You are on page 1of 43

Nhóm 1: 3 điểm

Câu 1. Trình bày Định nghĩa hệ thống mã hóa (cryptosystem) theo bộ 5 ký hiệu
toán học, có hình minh họa? Thám mã (cryptanalysis) là gì và có mối quan hệ như
thế nào với mật mã (crytography)? (Slide 1 và slide 24, Bài 1)
- Hệ thống mã hóa (cryptosystem) – hệ mật là một bộ năm (P, C, K, E, D) thỏa mãn các
điều kiện sau:
1. Tập nguồn P là tập hữu hạn tất cả các bản tin nguồn cần mã hóa có thể có
2. Tập đích C là tập hữu hạn tất cả các bản tin có thể có sau khi mã hóa
3. Tập khóa K là tập hữu hạn các khóa có thể được sử dụng
4. Đối với mỗi k K có một quy tắc mã hóa ek: P  C và một quy tắc giải mã tương ứng
dk  D. Mỗi ek: P  C và dk: C  P là những hàm mà:
dk(ek (x)) = x với mọi bản rõ x  P.
- Hình minh họa của hệ thống mã hóa:

- Thám mã là lĩnh vực khoa học nghiên cứu và tìm kiếm các yếu điểm của các hệ mật để
từ đó đưa ra phương pháp tấn công các hệ mật đó.
- Mật mã là ngành khoa học nghiên cứu việc ứng dụng toán học vào biến đổi thông tin
nhằm mục đích bảo vệ thông tin khỏi sự truy cập của những người không có thẩm quyền.
- Mật mã và mã thám là hai lĩnh vực đối lập nhau nhưng gắn bó mật thiết với nhau.
Không thể xây dựng một hệ mật tốt nếu không hiểu biết sâu về thám mã.
Câu 2. Trình bày các chức năng cơ bản của mật mã hiện đại? Phân tích chi tiết một
chức năng và lấy ví dụ về ứng dụng chức năng này trong thực tế? (Slide14, Bài 1)
- Đảm bảo tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai được
phép
Bảo vệ thông tin, chống lại các đối tượng không có quyền truy nhập muốn tìm hiểu nội
dung thông tin.
Thuật ngữ sự bí mật (secrecy) hoặc sự riêng tư (privacy) cũng đồng nghĩa với
confidentiality.
- Đảm bảo tính toàn vẹn dữ liệu (data integrity): thông tin không thể bị thay đổi mà
không bị phát hiện
đảm bảo khả năng phát hiện sửa đổi trái phép thông tin.
Phân tích: Đảm bảo tính toàn vẹn là đảm bảo thông tin, dữ liệu nhận được chính xác
giống như khi nó được gửi (tức là không bị sửa đổi, chèn, xóa hay phát lại). Để đảm bảo
toàn vẹn dữ liệu, cần có các phương pháp đơn giản và tin cậy để phát hiện bất kỳ sự can
thiệp không mong muốn vào dữ liệu.
Ví dụ: Hàm băm MD5 được sử dụng rộng rãi trong thế giới phần mềm để bảo đảm rằng
tập tin tải về không bị hỏng. Người sử dụng có thể so sánh giữa mã băm MD5 được công
bố với mã băm MD5 phần mềm mình đã tải về. Hoặc sử dụng hàm băm để nhận dạng
âm thanh, xác định xem một file MP3 có khớp với khai báo trong danh sách hay không.
- Đảm bảo sự xác thực (authentication): người gửi (hoặc người nhận) có thể chứng
minh đúng họ
chức năng này có liên hệ với sự định danh (identification).
 Vì thế nó được thực hiện xác thực trên cả thực thể (hai đối tượng trong một phiên
liên lạc sẽ định danh lẫn nhau) và bản thân thông tin (thông tin được truyền trên
kênh truyền sẽ được xác thực về nguồn gốc, nội dung, thời gian gửi, ...).
 Vì thế vấn đề xác thực trong mật mã được chia thành hai lớp chính – xác thực thực
thể (identity authentication) và xác thực nguồn gốc dữ liệu (data origin
authentication).
- Đảm bảo chống sự từ chối (non-repudiation) – người gửi hoặc nhận sau này không
thể chối bỏ việc đã gửi hoặc nhận thông tin
chức năng ngăn ngừa một thực thể từ chối (phủ nhận) một cam kết hoặc hành động trước
đó.
Khi xuất hiện tranh chấp vì một thực thể từ chối một hành động chắc chắn đã xảy ra, một
biện pháp giải quyết là cần thiết.
Câu 3. Hãy trình bày sự khác nhau giữa mã hóa công khai và mã hóa bí mật? Nêu
cơ sở toán học cho xây dựng các hệ mật mã khóa công khai, lấy ví dụ minh họa?
(Slide 4, ch10)
Mã hóa khóa bí mật (mã hóa đối xứng) Mã hóa công khai (mã hóa không đối xứng)
- Dựa trên sự chia sẻ khóa bí mật - Dựa trên khóa bí mật của cá nhân
- Sử dụng 1 khóa cho cả quá trình mã hóa - Sử dụng hai khóa riêng biệt: khóa công khai
và giải mã. Trao đổi khóa: cần kênh an dùng để mã hóa và khóa bí mật dùng để giải
toàn để chia sẻ khóa giữa Bob và Alice. mã. Public key sẽ được công khai, nhưng
private key là hoàn toàn bí mật. Khi một tin
nhắn được mã hóa bằng public key, nó chỉ có
thể được giải mã bằng private key. Tuy nhiên,
khi một tin nhắn được mã hóa bằng private
key, nó có thể được giải mã bằng public key.
- Mã hóa đối xứng là một kỹ thuật đã được - mã hóa bất đối xứng là kỹ thuật mới hơn
giới thiệu từ lâu - Thường được xây dựng bằng các hàm toán
- Thường được xây dựng bằng các phép học.
biến đổi. - Mất nhiều thời gian hơn, nhưng an toàn hơn
- Thực thi nhanh hơn do ít phức tạp hơn, mã hóa đối xứng vì nó sử dụng 2 key riêng
nên thường dùng trong truyền tải dữ liệu biệt cho 2 quy trình mã hóa và giải mã. Nó
hàng loạt. đượcược sử dụng trong các giao tiếp hàng
ngày qua internet.
- Các kỹ thuật mã hóa bất đối xứng phổ biến
- Một số thuật toán mã hóa đối xứng phổ bao gồm RSA, DSA và PKCS.
biến nhất bao gồm AES-128, AES-192 và
AES-256., Des, RC4, RC5, …
* Mã hóa khóa bí mật:

* Mã hóa khóa công khai:

* Cơ sở toán học của hệ mã hóa khóa công khai:


1. One-Way Function (Hàm 1 chiều): là một hàm mà tính xuôi thì dễ tính ngược thì cực
khó. Cụ thể: tính f thì dễ nhưng f-1 thì rất khó. các hàm một chiều có tính chất là hàm
nghịch đảo của chúng rất khó thực hiện
Ví dụ: Khi n lớn, n = p × q là hàm một chiều. Cho p và q, luôn dễ dàng tính được n; cho
trước n, rất khó để tính p và q. Đây là vấn đề thừa số hóa.
2. Trapdoor One-Way Function (Hàm 1 chiều cửa sập): Với điều kiện y và một cửa
sập f thì ta có thể dễ dàng tính f-1
Ví dụ: Khi n lớn, hàm y = xk mod n là hàm một cửa sập. Với x, k và n, ta dễ dàng tính
được y. Với y, k và n, rất khó để tính x. Đây là bài toán logarit rời rạc. Tuy nhiên, nếu
chúng ta biết cửa sập, k ′ sao cho k × k ′ = 1 mod f (n), chúng ta có thể sử dụng x = yk’
mod n để tìm x.
3. Knapsack cryptosystem (hệ thống mật mã Knapsack)

Cho trước a và x, ta dễ dàng tính được s. Tuy nhiên, với s và a thì rất khó để tìm x.
Lý thuyết số:
1. Định lý Fermat: Nếu p là số nguyên tố và a là số nguyên không chia hết cho p thì
ap-1≡ 1 mod p.
2. Phép toán logarit rời rạc: Ta định nghĩa phép lũy thừa modulo như sau, để tính y
từ a, x và n là các số nguyên: y = a x mod n = (a.a….a) mod n với x số a nhân với
nhau. Trong trường hợp tổng quát với mỗi n chỉ có một số trường hợp của a thì
phép lũy thừa là khả nghịch. Lúc này a được gọi là primitive root của n. Và cũng
tương tự như số thực, nếu biết y, a và n, muốn tìm lại x thì ta cũng dùng hàm
logarith, được gọi là logarith rời rạc.
x = dloga,ny

Câu 4. Thám mã (cryptanalysis) là gì? Có những phương pháp tấn công thám mã nào
(Crytanalysis attacks), trình bày chi tiết 2 trong số các phương pháp đó? (Slide 8, ch03)
- Vì mật mã là khoa học và nghệ thuật tạo ra các mã bí mật, nên thám mã là khoa học và
nghệ thuật để phá các mã đó. Hay dễ hiểu, thám mã là lĩnh vực khoa học nghiên cứu và
tìm kiếm các yếu điểm của các hệ mật để từ đó đưa ra phương pháp tấn công các hệ mật
đó.
- 4 phương pháp thám mã:
+ Tấn công chỉ biết bản mã (ciphertext-only): người thám mã chỉ có bản tin mã hóa.
+ Tấn công biết bản tin rõ (known plaintext): người thám mã có bản tin rõ và bản mã.
+ Tấn công chọn bản tin rõ (chosen plaintext): người thám mã tạm thời có quyền truy
xuất tới Bộ mã hóa, do đó anh ta có khả năng chọn bản tin rõ và xây dựng bản mã tương
ứng.
+ Tấn công chọn bản mã (chosen ciphertext): người thám mã tạm thời có quyền truy xuất
tới Bộ giải mã, do đó anh ta có khả năng chọn bản mã và xây dựng lại bản tin rõ tương
ứng.
- Ciphertex – only attack: (chặn bắt ciphertext trên đường truyền và phân tích để tìm
bản rõ)

Ví dụ: Đối với mã hóa thay thế, người thám mã chặn bắt ciphertext, sau đó thống kế tần
số xuất hiện của các ký tự. Đối chiếu với tần suất xuất hiện kí tự trung bình, để tìm ra
mỗi ký tự bản mã sẽ tương ứng với kí tự bản rõ nào.
- Known-plaintext attack: (tấn công khi đã biết bản rõ, hacker bằng 1 cách nào đó đã
biết được bản rõ, trên đường truyền tin họ biết thêm được bản mã, từ đó nghiên cứu kỹ
thuật mã hóa và tìm khóa bí mật)
Câu 5. Trình bày khái niệm và các tính chất của hàm băm? Hãy nêu m ột s ố ứng d ụng
điển hình của hàm băm? (Bài 10.v1)
- Hàm băm H(x) là một hàm tính checksum mạnh, nhằm sinh ra các giá trị băm tương
ứng với mỗi khối dữ liệu:
- Các tính chất:
1. H có thể áp dụng cho các thông điệp x với các độ dài khác nhau
2. Kích thước của output h = H(x) là cố định và nhỏ
3. Tính một chiều: với một h cho trước, không thể tìm lại được x sao cho h = H(x) (về
mặt thời gian tính toán)
4. Tính chống trùng yếu: cho trước một x, không thể tìm y≠ x sao cho H(x) = H(y)
5. Tính chống trùng mạnh: không thể tìm ra cặp x, y bất kỳ (x≠y) sao cho H(x) = H(y),
hay nói cách khác nếu H(x) = H(y) thì có thể chắc chắn rằng x = y.
- Ứng dụng của hàm băm:
• Lưu trữ mật khẩu
• Kinh doanh trực tuyến (đấu giá bí mật)
• Kiểm tra việc download dữ liệu có bị lỗi hay không
• Chữ ký điện tử
• Kiểm tra trùng lặp văn bản
Câu 6. Hãy cho biết điều kiện để tồn tại nghịch đảo nhân của số nguyên dương b
trong tập Zn? Dùng thuật toán Extended Euclidean để tìm nghịch đảo nhân của b
là ngày sinh của bạn trong Z100.
- Nghịch đảo nhân: Trong số học mô-đun, một số nguyên có thể có hoặc không có một
phép nhân nghịch đảo. Khi đó, tích của số nguyên và phép nhân nghịch đảo của nó đồng
dư với 1 modulo n.

- Điều kiện để tồn tại nghịch đảo nhân của số nguyên dương b trong tập Zn: n và b
nguyên tố cùng nhau. Tức là: gcd (n, b) = 1.
- Ngày sinh: b = 18, n = 100
Kiểm tra điều kiện: Vì (100, 18) = 2 khác 1 nên không tồn tại nghịch đảo nhân của 18
trong Z100
Nếu có: tìm theo công thức

Ta có: r1 = 100, r2 = 5.
q r1 r2 r t1 t2 t
100 18 0 1
5 18 10 10 1 -5 -5
1 10 8 8 -5 6 6
1 8 2 2 6 -11 -11
4 2 0 0
 Gcd(100, 18) = 2. Ko tồn tại …
Câu 7. Hãy cho biết điều kiện để tồn tại nghịch đảo nhân của một ma tr ận vuông c ấp m
trong tập Zn? Hãy lấy ví dụ một ma trận vuông cấp 2 sau đó kiểm tra tính ngh ịch đảo
theo phép nhân và tìm nghịch đảo của nó nếu có trong Z26. (Slide 3, 4, ch02)
- Điều kiện để ma trận A vuông cấp m tồn tại nghịch đảo nhân trong tập Zn:
+ Ma trận A phải là ma trận dư. Tức là các phần tử của nó đều nằm trong Z n
+ Ước chung lớn nhất của det(A) và n là 1. Tức là gcd (det (A), n) = 1
- Ví dụ:
Ma trận A = [ 7 , 14]
[6, 13]
Tính detA = 7*13 – 6*14 = 7
Vì gcd(7, 26) = 1
> Tồn tại A-1 là nghịch đảo nhân của ma trận A trong Z26
B1: Tìm ma trận đồng yếu tố và chuyển ma trận, ta được:
[13, -6]
[-14, 7]
B2: tính định thức của ma trận A: det(A) = 7
B3: tính nghịch đảo nhân của (det(A))-1 mod 26 = 7-1 mod 26 = 15
B4: lấy kết quả vừa tính được nhân với ma trận ở B1:
15 * [13, -6] mod 26 = [ 195, -90] mod 26 = [ 13, 14]
[-14, 7] [-210, 105] [ 24 , 1]
Câu 8. Trình bày về thuật toán mã hóa truyền thống Shift (Caesar). Sử dụng Shift để mã
hóa và giải mã tên của bạn. (p20, slide ch03)
Trong mật mã học, mật mã Caesar (Xê da), còn gọi là mật mã dịch chuyển, là một trong
những mật mã đơn giản và được biết đến nhiều nhất. Hệ mã Caesar là một hệ mã hóa
thay thế đơn âm, làm việc trên bẳng chữ cái tiếng Anh 26 ký tự. Đó là một dạng của mật
mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một
đoạn trong bảng chữ cái để tạo thành bản mã.
- Giải mã tên: Plaintext: linh. Chọn key k = 5
Plaintext: l => 11 Encryption: (11+5) mod 26 Ciphertext: 16 => q
Plaintext: i => 08 Encryption: (8 + 5) mod 26 Ciphertext: 13 => n
Plaintext: n => 13 Encryption: (13 + 5) mod 26 Ciphertext: 18 => s
Plaintext: h => 07 Encryption: (7 + 5) mod 26 Ciphertext:12 => m
 Ciphertext: qnsm
Câu 9. Trình bày về thuật toán mã hóa truyền thống Shift (Caesar). Hãy cho biết
một số phương pháp thám mã trên mã Shift, lấy một ví dụ minh họa đơn giản?

Ngày nay phương pháp mã hóa của Ceasar không được xem là an toàn.
* Phương pháp thám mã trên mã Shift:
- Do không gian khóa bé (0 < k <26)  dễ dàng thám mã bằng phương pháp vét cạn.
- Nếu có được bản mã và biết được đây là mã hóa caeser thì có thể tấn công bằng cách
phân tích tần suất hay phân tích các từ mẫu.
* Ví dụ: thám mã trên mã Shift bằng phương pháp vét cạn khi biết được 1 bản mã C =
UVACLYFZLJBYL

=> Khi thử tới K = 7 thì thu được plaintext là notverysecure (có ý nghĩa)
=> Từ đó tìm được khóa K = 7
Câu 10.Trình bày về thuật toán mã hóa truyền thống Affine. Nếu sử dụng phương
pháp thám mã vét cạn để tìm khóa thì không gian tìm kiếm là bao, vì sao?
Mã hóa Affine là một bộ năm (P, C, K, E, D) thỏa mãn:
Để việc giải mã có thể thực hiện được, yêu cầu cần thiết là hàm Affine phải là đơn ánh.
ax + b  y (mod 26)
phải có nghiệm x duy nhất.
 ax  y-b (mod 26)
 ax  y (mod 26) (y Z26 ).
Ta có định lý: Đồng dư thức ax  b mod m chỉ có một nghiệm duy nhất x  Zm với mọi
b  Zm khi và chỉ khi UCLN(a,m) = 1.
Vì 26 = 2  13 nên các giá trị a  Z26 thoả mãn UCLN(a,26) = 1 là a = 1, 3, 5, 7, 9, 11,
13, 15, 17, 19, 21, 23 và 25. Tham số b có thể là một phần tử bất kỳ trong Z26 . Như vậy,
mã Affine có 12  26 = 312 khoá có thể (dĩ nhiên con số này quá nhỏ để bảo đảm an
toàn).

 không gian khóa: 26 × 12 = 312. (Giải thích)


Câu 11.Trình bày về thuật toán mã hóa truyền thống Vigenere. Sử dụng Vigenere
để mã hóa và giải mã cụm từ “chuyendoiso” với khóa “cntt”.
Mã hóa Vigenère là sự kết hợp xem kẽ nhiều phép mã hóa Caesar với các bước dịch
khác nhau. Mã hóa Caesar, đây là phương pháp mã hóa mà ta chọn ra một giá trị khóa
key K, và dịch các chữ cái theo vòng tròn K bước. Trong mã hóa Vigenère thì ra sẽ sử
dụng một bảng để làm phép dịch, và một chuỗi khóa gọi là key, thay vì một số như trong
mã hóa Caesar.
Tập K có tất cả là 26m phần tử, do đó với mỗi m có tất cả là 26m hệ mật mã Vigenere
khác nhau (với m = 6 thì số đó là 308,915,776), duyệt toàn bộ chừng ấy khoá để thám
mã bằng tính thủ công thì khó, nhưng nếu dùng máy tính đủ mạnh thì cũng không đến
nỗi khó lắm! Nhưng điều quan trọng là m có thể thay đổi tăng lên để việc thám mã bằng
vét cạn là không khả thi.

* Ví dụ:
c h u y e n d o i s o
c n t t c n t t c n t
e u n
Câu 13.Trình bày về thuật toán mã hóa truyền thống Hill. Sử dụng thuật toán Hill để mã

hóa và giải mã 2 ký tự đầu trong tên của bạn. Biết ma trận .


Trong mã Hill, mỗi chữ cái được gán cho một con số nguyên từ 0 đến 25.
Mã Hill thực hiện mã hóa một lần m ký tự bản rõ (ký hiệu p1, p2,…,pm), thay thế thành m
ký tự trong bản mã (ký hiệu c1, c2,…,cm). Việc thay thế này được thực hiện bằng m
phương trình tuyến tính.

Ví dụ với m = 3:

Giải mã:

- Ma trận khóa trong mật mã Hill cần có một nghịch đảo nhân.
- Ví dụ: 2 ký tự đầu trong tên: li => P = [11, 08]
C = P * K = [11 08] * [ 8 5 ] = [(11*8 + 8*7) , (11*5 + 8*11)] = [144 143] = [14 13]
[ 7 11]
 C = on
Ma trân nghịch đảo:
[11, 19]
[21, 8]
Câu 14.Trình bày về thuật toán mã hóa truyền thống Hill. Sử dụng thuật toán Hill để mã
hóa và giải mã 2 ký tự đầu trong họ của bạn. Biết ma trận A = (8 3 7 6). (p41, slide
ch03; p49, slide Bài 1)

- Ma trận khóa trong mật mã Hill cần có một nghịch đảo nhân.
- Ví dụ: 2 ký tự đầu trong họ: ch => P = [2 7]
C = P * K = [2 7] * [ 8 5 ] = [(2*8 + 7*7) , (2*5 + 7*11)] = [65 87] = [13 9]
[ 7 11]
 C = nj
Ma trận nghịch đảo
[6, 23]
[19, 8]
Nhóm 2: 4 điểm (ý 1: 2 điểm, ý 2: 2 điểm)
Câu 1. Hãy trình bày thủ tục sinh khóa của RC4? Nêu các ứng dụng của RC4 trong
bảo mật thông tin?
- RC4 là một mã hóa đối xứng hiện đại, thuộc loại mã hóa dòng
Cơ chế hoạt động của RC4 cũng giống như TinyRC4 với các đặc tính sau:
- Đơn vị mã hóa của RC4 là một byte 8 bít.
- Mảng S và T gồm 256 số nguyên 8 bít
- Khóa K là một dãy gồm N số nguyên 8 bít với N có thể lấy giá trị từ 1 đến 256.
- Bộ sinh số mỗi lần sinh ra một byte để sử dụng trong phép XOR.
TinyRC4 RC4
- Giai đoạn khởi tạo - Giai đoạn khởi tạo

- Giai đoạn sinh số: - Giai đoạn sinh số:

- Quá trình sinh số của RC4 cũng sinh ra dãy số ngẫu nhiên, khó đoán trước, vì vậy RC4
đạt được mức độ an toàn cao theo tinh thần của mã hóa One-Time Pad. Mã hóa RC4
hoàn toàn được thực hiện trên các số nguyên một byte do đó tối ưu cho việc thiết lập
bằng phần mềm và tốc độ thực hiện nhanh hơn so với mã khối.
- Ứng dụng RC4 trong bảo mật an toàn thông tin:
RC4 được dùng trong giao thức SSL (xem phần 7.3) để bảo mật dữ liệu trong quá trình
truyền dữ liệu giữa Web Server và trình duyệt Web. Ngoài ra RC4 còn được sử dụng
trong mã hóa WEP của mạng Wireless LAN
Câu 2. Hãy trình bày thủ tục sinh khóa của RC4? Cho khóa K = [3, 1, 2], hãy dùng thuật
toán Tiny RC4 (áp dụng trên số nguyên 3 bit) để tìm mảng S? (p34, BaiGiang.pdf)
- RC4 là một mã hóa đối xứng hiện đại, thuộc loại mã hóa dòng
Cơ chế hoạt động của RC4 cũng giống như TinyRC4 với các đặc tính sau:
- Đơn vị mã hóa của RC4 là một byte 8 bít.
- Mảng S và T gồm 256 số nguyên 8 bít
- Khóa K là một dãy gồm N số nguyên 8 bít với N có thể lấy giá trị từ 1 đến 256.
- Bộ sinh số mỗi lần sinh ra một byte để sử dụng trong phép XOR.
TinyRC4 RC4
- Giai đoạn khởi tạo - Giai đoạn khởi tạo

- Giai đoạn sinh số: - Giai đoạn sinh số:

- Quá trình sinh số của RC4 cũng sinh ra dãy số ngẫu nhiên, khó đoán trước, vì vậy RC4
đạt được mức độ an toàn cao theo tinh thần của mã hóa One-Time Pad. Mã hóa RC4
hoàn toàn được thực hiện trên các số nguyên một byte do đó tối ưu cho việc thiết lập
bằng phần mềm và tốc độ thực hiện nhanh hơn so với mã khối.
* Ví dụ: chọn P = 111.100.010 (từ ‘hec’); K = [3, 1, 2]
- Giai đoạn khởi tạo:
Khởi tạo S = [0, 1, 2, 3, 4, 5, 6, 7]
Khởi tạo T = [3, 1, 2, 3, 1, 2, 3, 1]
J=0
Với I = 0
J = j + S[i] + T[i] = 0 + 0 + 3 mod 8 = 3
Swap(S[i], S[j]) => S = [3, 1, 2, 0, 4, 5, 6, 7]
Với I = 1
J = j + S[i] + T[i] = 3 + 1 + 1 mod 8= 5
Swap(S[i], S[j]) => S = [3, 5, 2, 0, 4, 1, 6, 7]
Với I = 2
J = j + S[i] + T[i] = 5 + 2 + 2 mod 8 = 1
Swap(S[i], S[j]) => S = [3, 2, 5, 0, 4, 1, 6, 7]
Với I = 3
J = j + S[i] + T[i] = 1 + 0 + 3 mod 8 = 4
Swap(S[i], S[j]) => S = [3, 2, 5, 4, 0, 1, 6, 7]
Với I = 4
J = j + S[i] + T[i] = 4 + 0 + 1 mod 8 = 5
Swap(S[i], S[j]) => S = [3, 2, 5, 4, 1, 0, 6, 7]
Với I = 5
J = j + S[i] + T[i] = 5 + 0 + 2 mod 8 = 7
Swap(S[i], S[j]) => S = [3, 2, 5, 4, 1, 7, 6, 0]
Với I = 6
J = j + S[i] + T[i] = 7 + 6 + 3 mod 8 = 0
Swap(S[i], S[j]) => S = [6, 2, 5, 4, 1, 7, 3, 0]
Với I = 7
J = j + S[i] + T[i] = 0 + 0 + 1 mod 8 = 1
Swap(S[i], S[j]) => S = [6, 0, 5, 4, 1, 7, 3, 2]
- Giai đoạn sinh số:
I = (i+1) mod 8 J = (j+s[i])mod8 S = Swap(s[i], s[j]) T=(s[i]+s[j])mod8 K=s[t]
0 0 0 [6, 0, 5, 4, 1, 7, 3, 2]
1 1 0 [0, 6, 5, 4, 1, 7, 3, 2] 6 7 = 1112
2 2 5 [0, 6, 7, 4, 1, 5, 3, 2] 4 1 = 0012
3 3 1 [0, 4, 7, 6, 1, 5, 3, 2] 2 7 = 1112
 Mã hóa: P XOR K = 111.100.010 XOR 111.001.111 = 000.001.101 (abf)
Câu 3. Trình bày cấu trúc tổng thể 16 vòng của mã DES? Phân tích hiệu ứng lan truyền?
Mã DES có các tính chất sau:
 Là mã thuộc hệ mã Feistel gồm 16 vòng, ngoài ra DES có thêm một hoán vị khởi tạo
trước khi vào vòng 1 và một hoán vị khởi tạo sau vòng 16
 Kích thước của khối là 64 bít: ví dụ bản tin „meetmeafterthetogaparty‟ biểu diễn
theo mã ASCII thì mã DES sẽ mã hóa làm 3 lần, mỗi lần 8 chữ cái (64 bít): meetmeaf -
tertheto - gaparty.
 Kích thước khóa là 56 bít
 Mỗi vòng của DES dùng khóa con có kích thước 48 bít được trích ra từ khóa chính.

* Hiệu ứng lan truyền:


Hiệu ứng lan truyền là chỉ cần một thay đổi nhỏ trong bản rõ hay trong khóa sẽ
dẫn đến thay đổi lớn trong bản mã. Cụ thể, chỉ cần thay đổi một bít trong bản rõ hay
khóa thì dẫn đến sự thay đổi của nhiều bít bản mã. Nhờ có tính chất này mà người phá
mã không thể giới hạn miền tìm kiếm của bản rõ hay của khóa (dù phá mã theo known-
plaintext hay chosen-plaintext) nên phải thực hiện vét cạn khóa.
DES là một phương pháp mã hóa có hiệu ứng lan truyền này. Xét hai bản rõ sau
64 bít):
P1: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
P2: 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Hai bản rõ trên được mã hóa bằng DES với khóa:
K: 0000001 1001011 0100100 1100010 0011100 0011000 0011100 0110010
Bảng a cho biết số bít khác nhau của bản mã tương ứng với P1 và P2 qua các
vòng của DES:

Chỉ cần đến vòng thứ 2, số bít khác nhau giữa hai bản mã đã là 21 bít, sau 16 vòng
số bít khác nhau là 34 bít (khoảng 1/2 tổng số bít của bản rõ)
Xét bản rõ sau (64 bít):
P: 01101000 10000101 00101111 01111010 00010011 01110110 11101011 10100100
Dùng hai khóa sau đây để mã hóa bản rõ trên (hai khóa này chỉ khác nhau 1 bít):
K1: 1110010 1111011 1101111 0011000 0011101 0000100 0110001 11011100
K2: 0110010 1111011 1101111 0011000 0011101 0000100 0110001 11011100
Bảng b cho biết số bít khác nhau của bản mã tương ứng với K1 và K2 qua các
vòng của DES. Sau 16 vòng, số bít khác nhau là 35 bít, cũng khoảng 1/2 tổng số bít của
bản rõ.
Câu 4. Trình bày cấu trúc chi tiết một vòng Feistel của DES? Hãy cho biết độ an toàn
của DES trước một số loại tấn công như: vét cạn (brute-force), phá mã vi sai (differential
cryptanalysis), phá mã tuyến tính (linear cryptanalysis)? (p43, BaiGiang.pdf), Riêng độ
an toàn: (p48, BaiGiang.pdf), (p74, ch6_DES) và tham khảo thêm các nguồn Internet để
có tính cập nhật – vì trong tài liệu là những đánh giá 3 loại tấn công này từ khoảng n ăm
2004.
* Một vòng Feistel:

Trong DES, hàm F của Feistel là:

Trong đó:
+ Hàm Expand vừa mở rộng vừa hoán vị Ri-1 từ 32 bít lên 48 bít.
+ Hàm Sboxes nén 48 bít lại còn 32 bít.
+ Hàm P-box là một hoán vị 32 bít.
* Phân tích độ an toàn:
1) Tấn công vét cạn khóa (Brute Force Attack):
Vì khóa của mã DES có chiều dài là 56 bít nên để tiến hành brute-force attack, cần kiểm
tra 256 khóa khác nhau. Hiện nay với những thiết bị phổ dụng, thời gian gian để thử khóa
là rất lớn nên việc phá mã là không khả thi (xem bảng). Tuy nhiên vào năm 1998, tổ
chức Electronic Frontier Foundation (EFF) thông báo đã xây dựng được một thiết bị phá
mã DES gồm nhiều máy tính chạy song song, trị giá khoảng 250.000$. Thời gian thử
khóa là 3 ngày. Hiện nay mã DES vẫn còn được sử dụng trong thương mại, tuy nhiên
người ta đã bắt đầu áp dụng những phương pháp mã hóa khác có chiều dài khóa lớn hơn
(128 bít hay 256 bít) như TripleDES hoặc AES.
2) Phá mã DES theo phương pháp vi sai (differential cryptanalysis):
Năm 1990 Biham và Shamir đã giới thiệu phương pháp phá mã vi sai. Phương pháp vi
sai tìm khóa ít tốn thời gian hơn brute-force. Tuy nhiên phương pháp phá mã này lại đòi
hỏi phải có 247 cặp bản rõ - bản mã được lựa chọn (chosen-plaintext). Vì vậy phương
pháp này là bất khả thi dù rằng số lần thử có thể ít hơn phương pháp brute-force.
3) Phá mã DES theo phương pháp thử tuyến tính (linear cryptanalysis)
Năm 1997 Matsui đưa ra phương pháp phá mã tuyến tính. Trong phương pháp này, cần
phải biết trước 2 cặp bản rõ-bản mã (known-plaintext). Tuy nhiên 243 cũng là một con
số lớn nên phá mã tuyến tính cũng không phải là một phương pháp khả thi.
Câu 5. Trình bày chế độ làm việc Output Feedback (OFB)? Chế độ làm việc này có
những ưu điểm gì so với các chế độ làm việc ECB, CBC và CFB? (p3, ch08)
- OFB là chế độ mã hóa mà giá trị ngõ ra của khối thực thi thuật toán mã hóa, không phải
ciphertext, của lần mã hóa hiện tại sẽ được phản hồi (feedback) đến ngõ vào của lần mã
hóa kế tiếp.
- Trong chế độ này, mỗi bit trong bản mã độc lập với bit hoặc các bit trước đó. Điều này
tránh sự lan truyền lỗi.
Chế độ OFB có những đặc điểm cần chú ý như sau:
1. Thuật toán mã hóa không áp dụng trực tiếp trên plaintext mà dùng để biển đổi một
khối dữ liệu sinh ra từ IV và khối ngõ ra của lần mã hóa trước đó. Điểm này tương
tự với CFB.
2. OFB khác với CFB là nó xử lý trên một khối dữ liệu với độ dài bit đầy đủ như
thuật toán mã hóa quy định chứ không xử lý trên một phần hay một vài bit của
khối dữ liệu.
Ưu điểm:
1. Khả năng bảo mật cao hơn ECB. Ciphertext của một khối dữ liệu plaintext có thể
khác nhau cho mỗi lần mã hóa vì nó phụ thuộc vào IV hoặc khối ngõ ra của lần
mã hóa trước đó.
2. Lỗi bit không bị lan truyền. Khi một lỗi bit xuất hiện trên một ciphertext, nó chỉ
ảnh hưởng đến kết quả giải mã của khối dữ liệu hiện tại
3. Thiết kế phần cứng đơn giản hơn CFB.
Nhược điểm:
Không thể thực hiện mã hóa/giải mã song song nhiều khối dữ liệu vì lần mã hóa/giải mã
sau phụ thuộc vào khối ngõ ra của lần mã hóa/giải mã liền trước nó.
********Note**********
1. ECB là chế độ mã hóa từng khối bit độc lập. Với cùng một khóa mã K, mỗi khối
plaintext ứng với một giá trị ciphertext cố định và ngược lại.
2. CBC là chế độ mã hóa chuỗi, kết quả mã hóa của khối dữ liệu trước (ciphertext) sẽ
được tổ hợp với khối dữ liệu kế tiếp (plaintext) trước khi thực thi mã hóa.
3. CFB là chế độ mã hóa mà ciphertext của lần mã hóa hiện tại sẽ được phản hồi
(feedback) đến đầu vào của lần mã hóa tiếp theo. Nghĩa là, ciphertext của lần mã hóa
hiện tại sẽ được sử dụng để tính toán ciphertext của lần mã hóa kế tiếp. Mô tả có vẻ
giống CBC nhưng quá trình trực hiện lại khác.
4. CTR là chế độ mã hóa sử dụng một tập các khối ngõ vào, gọi là các counter, để sinh ra
một tập các giá trị ngõ ra thông qua một thuật toán mã hóa. Sau đó, giá trị ngõ ra sẽ được
XOR với plaintext để tạo ra ciphertext trong quá trình mã hóa, hoặc XOR với ciphertext
để tạo ra plaintext trong quá trình giải mã.

( ECB: Một mã hóa khối, chế độ mã hóa các thông điệp là bội số của n bit bằng cách mã
hóa riêng từng đoạn n bit. Các thuộc tính bảo mật là yếu, phương pháp rò rỉ sự bình đẳng
của các khối trên cả vị trí khối và thời gian. Có giá trị di sản đáng kể và có giá trị như
một khối xây dựng cho các chương trình khác, nhưng chế độ không đạt được bất kỳ mục
tiêu bảo mật chung mong muốn nào theo quyền riêng của mình và phải được sử dụng
thận trọng; ECB không nên được coi là một chế độ bảo mật của mục đích chung của
thành phố.
CBC: Một sơ đồ mã hóa dựa trên IV, chế độ được bảo mật như một sơ đồ mã hóa xác
suất, đạt được sự không thể phân biệt từ các bit ngẫu nhiên, giả sử IV ngẫu nhiên. Tính
bảo mật không đạt được nếu IV chỉ là một nonce, cũng như nếu nó không được mã hóa
theo cùng khóa được sử dụng bởi lược đồ, như tiêu chuẩn gợi ý không chính xác. Mật
mã rất dễ uốn. Không có bảo mật tấn công mã hóa (CCA) được chọn. Bảo mật bị mất vì
sự hiện diện của một nhà tiên tri chính xác cho nhiều phương pháp đệm. Mã hóa không
hiệu quả từ vốn đã nối tiếp. Được sử dụng rộng rãi, các thuộc tính bảo mật chỉ riêng tư
của chế độ dẫn đến việc sử dụng sai thường xuyên. Có thể được sử dụng như một khối
xây dựng cho các thuật toán CBC-MAC. Tôi có thể xác định không có lợi thế quan trọng
so với chế độ CTR.
CFB: Một sơ đồ mã hóa dựa trên IV, chế độ được bảo mật như một sơ đồ mã hóa xác
suất, đạt được sự không thể phân biệt từ các bit ngẫu nhiên, giả sử IV ngẫu nhiên. Tính
bảo mật không đạt được nếu IV có thể dự đoán được, cũng như nếu nó được tạo bởi một
nonce được mã hóa theo cùng khóa được sử dụng bởi lược đồ, như tiêu chuẩn gợi ý
không chính xác. Mật mã có thể dễ uốn. Không bảo mật CCA. Mã hóa không hiệu quả
từ vốn đã nối tiếp. Lược đồ phụ thuộc vào một tham số s, 1 ≤ s ≤ n, thường là s = 1 hoặc
s = 8. Không hiệu quả khi cần một lệnh gọi mã hóa để xử lý chỉ các bit s. Chế độ đạt
được một thuộc tính tự đồng bộ hóa thú vị của Cameron; việc chèn hoặc xóa bất kỳ số
lượng ký tự s-bit nào vào bản mã chỉ tạm thời phá vỡ giải mã chính xác.
OFB: Một sơ đồ mã hóa dựa trên IV, chế độ được bảo mật như một sơ đồ mã hóa xác
suất, đạt được sự không thể phân biệt từ các bit ngẫu nhiên, giả sử IV ngẫu nhiên. Bảo
mật không đạt được nếu IV là một nonce, mặc dù một chuỗi IV cố định (ví dụ: bộ đếm)
hoạt động tốt. Mật mã rất dễ uốn. Không bảo mật CCA. Mã hóa và giải mã không hiệu
quả từ vốn đã nối tiếp. Tự nhiên mã hóa các chuỗi có độ dài bit bất kỳ (không cần đệm).
Tôi có thể xác định không có lợi thế quan trọng so với chế độ CTR.
TLB: Một sơ đồ mã hóa dựa trên IV, chế độ đạt được sự không thể phân biệt với các bit
ngẫu nhiên giả sử IV không. Là một lược đồ không dựa trên an toàn, chế độ cũng có thể
được sử dụng làm sơ đồ mã hóa xác suất, với IV ngẫu nhiên. Hoàn toàn thất bại về
quyền riêng tư nếu một nonce được sử dụng lại trên mã hóa hoặc giải mã. Tính song
song của chế độ thường làm cho nó nhanh hơn, trong một số cài đặt nhanh hơn nhiều so
với các chế độ bảo mật khác. Một khối xây dựng quan trọng cho các chương trình mã
hóa xác thực. Nhìn chung, thường là cách tốt nhất và hiện đại nhất để đạt được mã hóa
chỉ riêng tư.
XTS: Một sơ đồ mã hóa dựa trên IV, chế độ hoạt động bằng cách áp dụng một mã hóa
khối có thể điều chỉnh (bảo mật như một PRP mạnh) cho mỗi đoạn n bit. Đối với các thư
có độ dài không chia hết cho n, hai khối cuối được xử lý đặc biệt. Việc sử dụng chế độ
chỉ được phép là để mã hóa dữ liệu trên thiết bị lưu trữ có cấu trúc khối. Độ rộng hẹp của
PRP cơ bản và xử lý kém các khối cuối cùng phân đoạn là vấn đề. Hiệu quả hơn nhưng ít
mong muốn hơn so với mã khối bảo mật PRP (khối rộng) sẽ là.)
Câu 6. Trình bày cấu trúc tổng quát của mã AES? Giải thích vì sao mã AES lại được ứng
dụng rộng rãi hiện nay? (p7, ch07) cho cấu trúc, (p63, ch07) các nội dung Security,
Implementation Simplicity and Cost cho lý do tại sao lại được dùng rộng rãi hiện nay
* Cấu trúc tổng quát:
Mã hóa AES là một mã hóa theo khối 128 bít không sử dụng nguyên tắc của hệ mã
Feistel mà sử dụng mô hình mạng SPN. AES dùng 4 phép biến đổi chính để mã hóa một
khối: Add row key, Substitute bytes, Shift rows, Mix columns. Mỗi phép biến đổi nhận
tham số đầu vào có kích thước 128 bít và cho ra kết quả cũng có kích thước 128 bít. AES
thực hiện 4 phép biến đổi trên nhiều lần tạo thành 10 vòng biến đổi như hình bên dưới:

* AES lại được ứng dụng rộng rãi hiện nay:


- Security (Sự an toàn): AES được thiết kế sau DES. Hầu hết các cuộc tấn công đã biết
vào DES đều đã được thử nghiệm trên AES.
+ Tấn công Brute-Force: AES chắc chắn an toàn hơn DES do khóa có kích thước
lớn hơn.
+ Các cuộc tấn công thống kê: Nhiều thử nghiệm đã không thực hiện được phân
tích thống kê của bản mã.
+ Tấn công vi phân và tuyến tính: Chưa có các cuộc tấn công vi phân và tuyến tính
trên AES.
- Implementation (Triển khai): AES có thể được triển khai trong phần mềm, phần cứng
và chương trình cơ sở. Việc triển khai có thể sử dụng quy trình tra cứu bảng hoặc các
quy trình sử dụng cấu trúc đại số được xác định rõ.
- Simplicity and Cost (Tính đơn giản và chi phí): Các thuật toán được sử dụng trong AES
rất đơn giản nên chúng có thể được thực hiện dễ dàng bằng cách sử dụng bộ vi xử lý rẻ
tiền và dung lượng bộ nhớ tối thiểu.
Câu 7. Trình bày thủ tục Key expansion cho mã AES-128? Giải thích vì sao mã AES l ại
được ứng dụng rộng rãi hiện nay? (p35, ch07) cho Key expansion
Để tạo các khóa tròn cho mỗi vòng, AES sử dụng quy trình mở rộng khóa. Nếu số vòng
là Nr, quy trình mở rộng khóa sẽ tạo Nr + 1 khóa tròn 128 bit từ một khóa mật mã 128 bit
duy nhất.
Thao tác Expand key có input là 16 byte (4 word) của khóa bí mật, và sinh ra một mảng
44 word (176 byte). 44 word này được sử dụng cho 11 vòng mã hóa của AES, mỗi vòng
dùng 4 word.
Từ bốn word đầu vào w0w1w2w3, trong lần lặp đầu tiên thao tác Expand key sinh ra bốn
word w4w5w6w7, lần lặp thứ 2 từ w4w5w6w7 sinh ra w8w9w10w11 , cứ như thế cho đến lần
lặp thứ 10 sinh ra bốn word cuối cùng w40w41w42w43 như hình vẽ bên dưới.
Trong thao tác mở rộng khóa với khóa mã 128 bit có đầu vào là 16 byte (4 word) của
khóa mã, và sinh ra một mảng khóa vòng (Nr+1)x4=44 từ (word) hay 176 byte. 44 word
này được sử dụng cho 11 vòng mã hóa của AES, mỗi vòng dùng 4 word. Từ bốn word
đầu vào w0w1w2w3, trong lần lặp đầu tiên thao tác ExpandKey sinh ra bốn word
w4w5w6w7, lần lặp thứ 2 từ w4w5w6w7 sinh ra w8w9w10w11, cứ như thế cho đến lần lặp thứ
10 (tùy thuộc chiều dài khóa) sinh ra bốn word cuối cùng w40w41w42w43 như hình vẽ.

Mục đích của ExpandKey: dùng để chống lại known-plaintext attack


+ Biết một số bit của khóa hay khóa con cũng không thể tính các bit còn lại.
+ Không thể tính ngược: biết một khóa con cũng không thể tính lại các khóa con trước
đó.
+ Tính khuếch tán: một bit của khóa chính tác động lên tất cả các bit của các khóa con.
Câu 8. Trình bày thuật toán RSA? Hãy cho biết các điều kiện của p, q, d (private key) để
RSA an toàn?
Phương pháp RSA là một phương pháp mã hóa khóa công khai. Về mặt tổng quát
RSA là một phương pháp mã hóa theo khối. Trong đó bản rõ M và bản mã C là các số
nguyên từ 0 đến 2^i với i số bít của khối. Kích thước thường dùng của i là 1024 bít. RSA
sử dụng hàm một chiều là vấn đề phân tích một số thành thừa số nguyên tố.
Các bước thực hiện như sau:
1) Chọn hai số nguyên tố lớn p và q và tính N = pq. Cần chọn p và q sao cho: M < 2i-1 <
N < 2i. Với i = 1024 thì N là một số nguyên dài khoảng 309 chữ số.
2) Tính n = (p - 1)(q - 1)
3) Tìm một số e sao cho e nguyên tố cùng nhau với n
4) Tìm một số d sao cho e.d = 1 mod n (d là nghịch đảo của e trong phép modulo n)
5) Hủy bỏ n, p và q. Chọn khóa công khai KU là cặp (e, N), khóa riêng KR là cặp (d, N)
6) Việc mã hóa thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:

+ Theo phương án 2, mã hóa chứng thực:

7) Việc giải mã thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:

+ Theo phương án 2, mã hóa chứng thực:


Bản rõ M có kích thước i-1 bít, bản mã C có kích thước i bít.
* Điều kiện:
- p, q là snt lớn và M < 2i-1 <N < 2i
- p, q được chọn có cùng độ dài bit để tạo được 1 mã RSA mạnh, nhưng điều này có thể
khiến q,p quá gần nhau khiến cho kẻ tấn công dễ dàng phân tách n thành thừa số nguyên
tố. Điều kiện ( p – q ) < n¼

* Khả năng gây mất an toàn:


- Số n nhỏ
- Số e nhỏ, số m nhỏ
- Tấn công lặp liên tục
- Hiệu p – q nhỏ - Fermat Attack

p, q được chọn có cùng độ dài bit để tạo được 1 mã RSA mạnh, nhưng điều này có thể
khiến q,p quá gần nhau khiến cho kẻ tấn công dễ dàng phân tách n thành thừa số nguyên
tố. Điều kiện ( p – q ) < n¼
- Số e trùng nhau, số e nhỏ - Hastad Broadcast Attack
- Số n trung nhau - Common modulus
- Phân phối khoá

Câu 9. Trình bày thuật toán RSA? Hãy cho biết một số kỹ thuật tấn công RSA? (p19-41,
ch10-RSA)
Phương pháp RSA là một phương pháp mã hóa khóa công khai. Về mặt tổng quát
RSA là một phương pháp mã hóa theo khối. Trong đó bản rõ M và bản mã C là các số
nguyên từ 0 đến 2i với i số bít của khối. Kích thước thường dùng của i là 1024 bít. RSA
sử dụng hàm một chiều là vấn đề phân tích một số thành thừa số nguyên tố.
Các bước thực hiện như sau:
1) Chọn hai số nguyên tố lớn p và q và tính N = pq. Cần chọn p và q sao cho: M < 2i-1 <
N < 2i. Với i = 1024 thì N là một số nguyên dài khoảng 309 chữ số.
2) Tính n = (p - 1)(q - 1)
3) Tìm một số e sao cho e nguyên tố cùng nhau với n
4) Tìm một số d sao cho e.d = 1 mod n (d là nghịch đảo của e trong phép modulo n)
5) Hủy bỏ n, p và q. Chọn khóa công khai KU là cặp (e, N), khóa riêng KR là cặp (d, N)
6) Việc mã hóa thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:

+ Theo phương án 2, mã hóa chứng thực:


7) Việc giải mã thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:

+ Theo phương án 2, mã hóa chứng thực:


Bản rõ M có kích thước i-1 bít, bản mã C có kích thước i bít.
* Kỹ thuật tấn công:

1) Vét cạn khóa: cách tấn công này thử tất cả các khóa d có thể có để tìm ra bản giải mã
có ý nghĩa, tương tự như cách thử khóa K của mã hóa đối xứng. Với N lớn, việc tấn công
là bất khả thi.
2) Phân tích N thành thừa số nguyên tố N = pq: Chúng ta đã nói rằng việc phân tích phải
là bất khả thi thì mới là hàm một chiều, là nguyên tắc hoạt động của RSA. Tuy nhiên,
nhiều thuật toán phân tích mới đã được đề xuất, cùng với tốc độ xử lý của máy tính ngày
càng nhanh, đã làm cho việc phân tích N không còn quá khó khăn như trước đây. Năm
1977, các tác giả của RSA đã treo giải thưởng cho ai phá được RSA có kích thước của N
vào khoảng 428 bít, tức 129 chữ số. Các tác giả này ước đoán phải mất 40 nghìn triệu
triệu năm mới có thể giải được.
3) Đo thời gian: Đây là một phương pháp phá mã không dựa vào mặt toán học của thuật
toán RSA, mà dựa vào một “hiệu ứng lề” sinh ra bởi quá trình giải mã RSA. Hiệu ứng lề
đó là thời gian thực hiện giải mã. Giả sử người phá mã có thể đo được thời giải mã

dùng thuật toán bình phương liên tiếp. Trong thuật toán bình
phương liên tiếp, nếu một bít của d là 1 thì xảy ra hai phép modulo, nếu bít đó là 0 thì chỉ
có một phép modulo, do đó thời gian thực hiện giải mã là khác nhau. Bằng một số phép
thử chosen-plaintext, người phá mã có thể biết được các bít của d là 0 hay 1 và từ đó biết
được d.
Câu 10.Trình bày thuật toán RSA? Cho p = 11, q = 17 hãy dùng RSA để tính bản mã t ừ
bản rõ M = 5.
Phương pháp RSA là một phương pháp mã hóa khóa công khai. Về mặt tổng quát
RSA là một phương pháp mã hóa theo khối. Trong đó bản rõ M và bản mã C là các số
nguyên từ 0 đến 2i với i số bít của khối. Kích thước thường dùng của i là 1024 bít. RSA
sử dụng hàm một chiều là vấn đề phân tích một số thành thừa số nguyên tố.
Các bước thực hiện như sau:
1) Chọn hai số nguyên tố lớn p và q và tính N = pq. Cần chọn p và q sao cho: M < 2i-1 <
N < 2i. Với i = 1024 thì N là một số nguyên dài khoảng 309 chữ số.
2) Tính n = (p - 1)(q - 1)
3) Tìm một số e sao cho e nguyên tố cùng nhau với n
4) Tìm một số d sao cho e.d = 1 mod n (d là nghịch đảo của e trong phép modulo n)
5) Hủy bỏ n, p và q. Chọn khóa công khai KU là cặp (e, N), khóa riêng KR là cặp (d, N)
6) Việc mã hóa thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:

+ Theo phương án 2, mã hóa chứng thực:

7) Việc giải mã thực hiện theo công thức:

+ Theo phương án 1, mã hóa bảo mật:


+ Theo phương án 2, mã hóa chứng thực:
Bản rõ M có kích thước i-1 bít, bản mã C có kích thước i bít.
*
1. p = 11, q = 17 => N = pq = 187
2. n = (p-1)(q-1) = 10*16 = 160
3. Chọn e = 7 nguyên tố cùng nhau với n
4. Tính nghịch đảo của e trong phép module n được d = 23
5. Khóa công khai KU = (e, N) = (7, 187). Khóa bí mật KR = (d, N) = (23, 187)
Theo phương án 1 (mã hóa bảo mật):
6. Mã hóa bản rõ M = 5:
C = Me mod N = 57 mod 187 = 146
7. Giải mã bản mã C = 146:
M = Cd mod N = 14623 mod 187 = (2*73)23 mod 187 = 5
Theo phương án 2 (mã hóa chứng thực):

Câu 11.Trình bày cấu trúc tổng thể của hàm băm MD5-128? Hãy nêu một số ứng dụng
điển hình của hàm băm trong thực tế?
Hàm băm MD5 với giá trị băm có kích thước là 128 bít, được dùng để tính giá trị
băm của thông điệp có kích thước tối đa là 264 bít

Trước tiên thông điệp được thêm dãy bit padding 100….00. Sau đó thêm vào chiều dài
(trước khi padding) của thông điệp được biểu diễn bằng 64 bít. Như vậy chiều dài của
dãy bít padding được chọn sao cho cuối cùng thông điệp có thể chia thành N block 512
bít M1, M2, … , MN.
Quá trình tính giá trị băm của thông điệp là quá trình lũy tiến. Trước tiên block M1 kết
hợp với giá trị khởi tạo H0 thông qua hàm F để tính giá trị hash H1. Sau đó block M2 được
kết hợp với H1 để cho ra giá trị hash là H2 . Block M3 kết hợp với H2 cho ra giá trị H3. Cứ
như vậy cho đến block MN thì ta có giá trị băm của toàn bộ thông điệp là HN.
H0 là một dãy 128 bít được chia thành 4 từ 32 bít, ký hiệu 4 từ 32 bít trên là abcd. a, b, c,
d là các hằng số như sau (viết dưới dạng thập lục phân):
a = 01234567
b = 89abcdef
c = fedbca98
d = 76543210

- Ứng dụng của hàm băm:


• Lưu trữ mật khẩu
• Kinh doanh trực tuyến (đấu giá bí mật)
• Kiểm tra việc download dữ liệu có bị lỗi hay không
• Chữ ký điện tử
• Kiểm tra trùng lặp văn bản
1. Lưu trữ mật khẩu

2. Đấu giá trực tuyến


3. Download file: Khi chúng ta download file từ mạng internet, nếu chất lượng mạng
không tốt thì có thể xảy ra lỗi trong quá trình download làm cho file tại máy client
khác với file trên server. Hàm băm có thể giúp chúng ta phát hiện ra những trường
hợp bị lỗi như vậy

Câu 12.Trình bày cấu trúc hàm F của hàm băm MD5-128? Hãy nêu một số ứng dụng
điển hình của hàm băm trong thực tế? (Bai10_Hambam.v1, p85 BaiGiang.pdf)
• Khởi tạo abcd
a = 01 23 45 67
b = 89 AB CD EF
c = FE DC BA 98
d = 76 54 32 10
e = C3 D2 E1 F0

• Phép cộng cuối là phép cộng modul 232


• Mi –> Wj
• Mi chia thành 16 từ 32 bít W0 -W15, sau đó lặp lại 3 lần được 64 giá trị

Tại mỗi bước lũy tiến, các giá trị abcd của giá trị hash Hi-1 được biến đổi qua 64 vòng từ
0 đến 63. Tại vòng thứ j sẽ có 2 tham số là Kj và Wj đều có kích thước 32 bít. Các hằng số
Kj được tính từ công thức: Kj là phần nguyên của số 2 n với i biểu diễn theo radian.
Giá trị block Mi 512 bít được biến đổi qua một hàm message schedule cho ra 64 giá trị
W0, W1,…, W63 mỗi giá trị 32 bít. Block Mi 512 bít được chia thành 16 block 32 bít ứng
với các giá trị W0, W1, …, W15 (16×32=512). Tiếp theo, 16 giá trị này được lặp lại 3 lần
tạo thành dãy 64 giá trị.
Sau vòng cuối cùng, các giá trị abcde được cộng với các giá trị abcd của Hi-1 để cho ra
các giá trị abcd của Hi. Phép cộng ở đây là phép cộng modulo 232.
- Ứng dụng của hàm băm:
• Lưu trữ mật khẩu
• Kinh doanh trực tuyến (đấu giá bí mật)
• Kiểm tra việc download dữ liệu có bị lỗi hay không
• Chữ ký điện tử
• Kiểm tra trùng lặp văn bản
Câu 13. Trình bày những dịch vụ bảo mật (security services) mà chữ ký số có thể cung
cấp? Cho thông điệp M là chữ cái in hoa đầu tiên trong tên của bạn, p = 7, q = 11, hãy
thực hiện ký và xác thực chữ ký với lược đồ chữ ký số RSA? (4 services p13 ch13)
Các dịch vụ bảo vệ chính:
▪ Tính bảo mật của thông điệp,
▪ Xác thực tin nhắn: Một lược đồ chữ ký số an toàn, giống như một chữ ký thông thường
an toàn có thể cung cấp xác thực thông điệp
▪ Tính toàn vẹn của thông điệp: Tính toàn vẹn của thông điệp được bảo toàn ngay cả khi
chúng ta ký toàn bộ thông điệp vì chúng ta không thể có được chữ ký giống nhau nếu
thông điệp bị thay đổi
▪ Không thoái thác:

Chữ ký điện tử có thể cung cấp trực tiếp ba phần cuối cùng
Lược đồ chữ ký số RSA:

Ký tên: p = 7, q = 11
M = T = 19
1. N = 7*11 = 77
2. n = 6*10 = 60
3. Chọn e = 17 nguyên tố cùng nhau với n
4. Tính nghịch đảo của e trong phép module với n được d = 53
5. Khóa công khai KU = (e, N) = (17, 77). Khóa bí mật KR = (d, N) = (53, 77)
M = 19 => S = 1953 mod 77 = 17
M’ = Se mod N = 1717 mod 77 = 19 = M =>

Câu 14.Trình bày lược đồ chữ ký số RSA khi ký trên mã băng của thông điệp? Tại sao
phải ký trên mã băm của thông điệp thay vì ký trực tiệp trên thông điệp? (p26 ch13)

Giải thích tại sao:


Nếu dùng lược đồ chữ ký RSA thì kẻ tấn công dễ dàng thực hiện sự đánh lừa. Ví dụ như
kẻ tấn công có thể chọn ngẫu nhiên giá trị s thuộc Zn và tính toán độ lớn M = Se mod n,
thì rõ ràng quá trình thẩm tra (M, S) là hoàn toàn hợp lệ. Ngoài ra do tính chất của hệ
mật RSA, tức là nếu có 2 bức điện thư m1, m2 tương ứng với 2 chữ ký là s1, s2 thì dễ
dàng hình thành chữ ký thứ ba s1s2 với bức điện thư thứ 3 m1m2.
Khi ký trên mã băm của thông điệp thì sẽ chống lại được sự giả mạo trên do rất khó có
thể tìm được bản tin mà giá trị băm của nó trùng với giá trị hàm băm đã cho.

Nhóm 3: 3 điểm
- Chạy được chương trình cho kết quả đúng: 0.5 điểm
- Giải thích được overview thuật toán tương: 1.0 điểm
- Giải thích được code và cải tiến, thay đổi code: 1.5 điểm
1. Viết chương trình mã hóa thông điệp M và giải mã bằng RC4. Thông điệp M được
đọc vào từ một file và bản mã được lưu ra một file khác.
Code k dùng thư viện trong jupyter ‘RC4 – code’
Hoặc dùng hàm “RC4 – code hàm”
Hoặc dùng thư viện trên google colab
2. Viết chương trình mã hóa thông điệp M và giải mã bằng thuật toán DES với một
trong 5 chế độ làm việc (ECB, CBC, CFB, OFB, CTR) do giáo viên yêu cầu. Thông
điệp M được đọc vào từ một file và bản mã được lưu ra một file khác.
2. DES (mod OFB) - Thư viện (Linh) chưa làm được chế độ CTR
2. DES 3
3. Viết chương trình mã hóa thông điệp M và giải mã bằng thuật toán AES với với một
trong 5 chế độ làm việc (ECB, CBC, CFB, OFB, CTR) do giáo viên yêu cầu. Thông
điệp M được đọc vào từ một file và bản mã được lưu ra một file khác.
3. AES - Thư viện - Linh
4. Viết chương trình mã hóa thông điệp M và giải mã bằng thuật toán RSA. Thông điệp
M là một chuỗi số nguyên được đọc vào từ một file và bản mã được lưu ra một file
khác.
4. RSA - Thư viện - Linh
5. Viết chương trình thực hiện ký và xác thực chữ ký bằng thuật toán RSA trên mã băm
H của văn bản M. Văn bản M được lưu trong một file và kết quả (văn bản, mã băm
cùng chữ ký) lưu trên một file khác.
6. 5. Băm - RSA - Thư viện – Linh
5. Băm 2
6. Giả sử file M được truyền từ A tới B. Viết chương trình thực hiện tạo mã băm
đính kèm M tại A và xác thực tính toàn vẹn của một file M tại B. Chương trình
cho phép lựa chọn 1 trong các hàm băm sau để xác thực: SHA-256, SHA-512,
MD5.
6. RSA - Băm - Thư viện - Linh
6. Băm 2
* Note:
- Mã hóa đối xứng
- Mã hóa đối xứng cổ điển
- Shift
- Vigenere
- Hill
- Mã hóa đối xứng hiện đại
- Mã dòng
- RC4
- Mã khối
- DES
- AES
- Chế độ làm việc của mật mã khối hiện đại
- Mã hóa bất đối xứng:
- RSA (khối), chữ ký số
- MD5

You might also like