1
Mục Lục
1 2
1.1 Mã hóa khi là gì 2
1.2 Thit k 2
2 Các loi mã hóa khi 5
2.1 Lucifer / DES 5
2.2 IDEA 9
2.3 RC5 10
2.4 AES 11
2.5 Blowfish (cipher) 11
3 13
3.1 13
3.2 u kin và tính toán 14
4 ng dng mã hóa khi 15
5 16
6 19
2
1 M
1.1 Mã hóa khi là gì
Trong mật mã học, mã hóa khi là những thuật toán mã hóa đối xứng hoạt động
trên những khối thông tin có độ dài xác định (block) thông qua 1 số phép chuyển đổi
xác định.
Quá trình mã hóa khối bao gồm hai thuật toán ghép nối, một cho mã hóa, E, và một
cho giải mã, D. Cả hai thuật toán chấp nhận hai tham số đầu vào: một khối đầu vào
kích thước n bit và một khóa kích thước k bit, và cả hai đều sinh ra một khối đầu ra n-
bit. Các thuật toán giải mã D được định nghĩa là hàm nghịch đảo của mã hóa, tức là D
= E
-1
. Chính thức hơn, một thuật toán mã hóa khối được xác định bởi một hàm mã hóa
E
K
(M) = E ( K , M ): {0 , 1}
k
x {0 , 1}
n
→ {0 , 1}
n
Trong đó, đầu vào là một khóa K có chiều dài k bit, được gọi là kích thước khóa, và
một chuỗi M bit có độ dài n, được gọi là kích thước khối, và trả về một chuỗi C có n
bit. M được gọi là chữ thô, và C được gọi là bản mã. Đối với mỗi K, các hàm E
K
(M)
cần thiết để có một bản đồ nghịch trên {0,1} n. Nghịch đảo với E được định nghĩa là
một hàm
E
K
-1
(C) := D
K
(C) = D(K,C):{0,1}
k
x {0,1}
k
→{0,1}
n
Có đầu vào là khóa K, đoạn mã C trả về đầu ra là đoạn văn bản M sao cho
Ví dụ, một khối mật mã thuật toán mã hóa có thể lấy một khối 128-bit của văn bản
làm đầu vào, và đầu ra là một khối mã với 128-bit. Việc chuyển đổi chính xác được
kiểm soát bằng cách sử dụng đầu vào thứ hai - khóa bí mật. Giải mã tương tự: trong ví
dụ này , các thuật toán giải mã lấy một khối 128-bit của đoạn mã cùng với khóa bí
mật, và đầu ra là các khối ban đầu 128-bit của văn bản gốc.
Đối với mỗi khóa K, E
K
là một hoán vị (ánh xạ song ánh) trong tập hợp các khối đầu
vào. Mỗi khóa chọn một hoán vị từ một tập có thể của (2
n
).
1.2 Thit k
1.2.1 Lp mã khi (Iterated block ciphers)
Hầu hết các thuật toán mã hóa khối được phân loại vào nhóm mã hóa khối lặp
có nghĩa là quá trình chuyển đổi khối kích thước cố định của văn bản thành các khối
của bản mã có kích thước giống hệt nhau, thông qua ứng dụng lặp của một chuyển đổi
có thể nghịch đảo gọi là hàm round, với mỗi lần lặp được gọi là một vòng (round).
Thông thường, các hàm vòng R có đầu vào thứ hai là các khóa tròn khác nhau Ki,
được bắt nguồn từ chính bản gốc:
M
i
= R
Ki
(M
i-1
)
Trong đó M
0
là văn bản và bản mã M
r
, với r là số vòng.
Ngoài ra, khóa Whitening cũng thường được sử dụng. Vào lúc bắt đầu và kết thúc, dữ
3
liệu được sửa đổi bởi khóa (thường với XOR, nhưng phép tính số học đơn giản như
cộng và trừ cũng được sử dụng):
M
0
= M
K
0
M
i
= R
Ki
(M
i-1
); i = 1…r
C = M
r
K
r+1
1.2.2 -Substitution-permutation networks)
Một loại quan trọng của thuật toán mã hóa khối lặp được gọi là mạng lưới thay
thế-hoán vị (SPN) nhận một khối văn bản và khóa làm đầu vào, và áp dụng nhiều
vòng xoay dịch chuyển bao gồm một đoạn thay thế tiếp theo là một đoạn hoán vị để
sinh ra từng khối mã đầu ra. Khâu thay thế phi tuyến tính hỗn hợp các bit khóa với các
bit của văn bản, tạo ra nhập nhằng Shannon. Khâu hoán vị tuyến tính sau đó mất đi dư
thừa, tạo ra sự khuếch tán.
Một hộp thay thế ( S -box) thay thế một khối nhỏ của các bit đầu vào với một khối các
bit đầu ra. Sự thay thế này phải là một-một , để đảm bảo tính nghịch đảo ( do giải mã).
Một S-box an toàn sẽ có các thuộc tính mà thay đổi một bit đầu vào sẽ thay đổi
khoảng một nửa số bit đầu ra trung bình, đặc điểm này được gọi là hiệu ứng tuyết lở -
tức nó có các tính chất mỗi bit đầu ra sẽ phụ thuộc vào tất cả các bit đầu vào.
Hộp hoán vị (P -box) sẽ hoán vị tất cả các bit: nó nhận kết quả đầu ra của tất cả các S -
box trong một vòng, hoán vị các bit, và đưa chúng vào S -box của vòng tiếp theo. Một
chiếc hộp-P tốt có các tính chất mà các bit đầu ra của bất kỳ S-box được phân phối
cho nhiều đầu vào S-box càng tốt.
Tại mỗi vòng, khóa vòng ( thu được từ khóa sau một số phép toán đơn giản, chẳng
hạn, sử dụng S - hộp và P- hộp ) được kết hợp bằng cách sử dụng một số phép toán
nhóm , điển hình là XOR.
Giải mã được thực hiện bằng cách đơn giản đảo ngược quá trình này ( bằng cách sử
dụng ngược của S- hộp và P- hộp và áp dụng các khóa vòng theo thứ tự ngược lại) .
1.2.3 Mã hóa Feistel
Trong thuật toán mã hóa Feistel, khối văn bản được mã hóa được chia thành
hai phần có kích thước bằng nhau. Hàm vòng được áp dụng cho một nửa, sử dụng một
khóa con, và sau đó đầu ra được thực hiện XOR với nửa kia. Hai nửa sau đó được đổi
chỗ.
Cho F là hàm vòng và cho K
0
, K
1
,…, K
n
là các khóa con cho các vòng 0,1,…, n tương
ứng.
Sau đó, các thao tác cơ bản như sau:
Chia khối bản rõ thành hai phần bằng nhau, (L
0
, R
0
)
Với mỗi vòng i = 0,1,…,n, tính toán
4
L
i+1
= R
i
R
i+1
= L
i
F(R
i
,
K
i
)
Kết quả đoạn mã là (R
n+1
, L
n+1
).
Giải mã đoạn mã (R
n+1
, L
n+1
) sẽ thực hiện được bằng cách tính toán i=n,n-1,…,0
R
i
= L
i+1
L
i
= R
i+1
F(R
i
,
K
i
)
Kết quả (L
0
, R
0
) là văn bản gốc.
: Sơ đồ mã hóa Feistel
Một lợi thế của mô hình Feistel so với mạng lưới thay thế-hoán vị là hàm vòng F
không cần phải có tính nghịch đảo.
1.2.4 Lai-Massey Scheme
Lai-Massey Scheme có đặc điểm an toàn tương tự như cấu trúc Feistel. Nó
cũng có lợi thế hàm vòng F không cần phải có tính nghịch đảo. Một điểm tương tự
khác là cũng là chia tách các khối đầu vào thành hai phần bằng nhau. Tuy nhiên, hàm
vòng được áp dụng cho sự khác biệt giữa hai phần, và kết quả là sau đó thêm vào cả
hai nửa.
Cho F là hàm vòng và để cho K
0
, K
1
, …, K
n
là các khóa con cho các vòng 0,1,…, n
tương ứng.
Sau đó, các thao tác cơ bản như sau:
Chia khối bản thành hai phần bằng nhau, (L
0
, R
0
)
5
Với mỗi vòng i = 0,1,…, n, tính toán
L
i+1
= б(L
i
) + T
i
và R
i+1
= R
i
+ T
i
Trong đó б là một orthomorphism (có nghĩa là, cả hai б và x→ б (x)-x là hoán vị) và
T
i
= F (б (б(L
i
) – R
i
, K
i
).
Kết quả, bản mã là (R
n+1
, L
n+1
).
Giải mã một bản mã (R
n+1
, L
n+1
) được thực hiện bằng cách tính toán đối với i = n, n-
1,…, 0
R
i
= б
-1
(L
i+1
– T
i
) và
L
i
= R
i+1
- T
i
Trong đó T
i
= F(L
i+1
– R
i+1
, K
i
)
Kết quả, (L
0
, R
0
) chính là văn bản gốc.
2: Sơ đồ Lai-Massey
2 Các loi mã hóa khi
2.1 Lucifer / DES
Nói chung, Lucifer được coi là thuật toán mã hóa khối dân sự đầu tiên, được
phát triển tại IBM vào những năm 1970 dựa trên nghiên cứu thực hiện bởi Horst
Feistel.
6
DES là thuật toán mã hóa khối nguyên mẫu – nhận một chuỗi văn bản dài 64 bit và
biến đổi nó thông qua một loạt các thao tác phức tạp thành một chuỗi bit mã có cùng
chiều dài. DES cũng sử dụng một khóa điều chỉnh sự chuyển đổi, do đó có thể giải mã
được cho là chỉ có thể được thực hiện bởi những người có đúng khóa được sử dụng để
mã hóa. Về mặt hình thức, khóa có chiều dài 64 bit. Tuy nhiên, chỉ có 56 bit trong số
này được thực sự sử dụng bởi thuật toán. Tám bit được sử dụng chỉ để kiểm tra tính
chẵn lẻ, sau đó được bỏ đi. Do đó độ dài khoá hiệu quả là 56 bit.
Cấu trúc tổng thể của thuật toán được thể hiện trong hình: thuật toán bao gồm
16 bước giống hệt nhau, gọi là vòng lặp. Ngoài ra còn có một hoán vị ban đầu và một
hoán vị cuối cùng, gọi là IP và FP, đó là nghịch đảo (IP đảo ngước các hành động của
FP, và ngược lại). IP và FP không có ý nghĩa mật mã, nhưng được đưa vào để tạo điều
kiện nạp các khối vào và ra giữa những năm 1970 8-bit dựa trên phần cứng.
Trước vòng chính, khối được chia thành hai nửa 32-bit và xử lý luân phiên, kỹ thuật
đan chéo này được gọi là chương trình Feistel. Cấu trúc Feistel đảm bảo rằng giải mã
và mã hóa là quá trình rất giống nhau - sự khác biệt duy nhất là các khóa được áp
dụng theo thứ tự ngược lại khi giải mã. Phần còn lại của thuật toán là giống hệt nhau.
Điều này giúp đơn giản hoá việc triển khai thực hiện, đặc biệt là ở phần cứng, vì
không có nhu cầu cho các thuật toán mã hóa và giải mã riêng biệt.
Biểu tượng ⊕ biểu thị phép toán OR loại trừ (XOR). Hàm-F thao tác trên một nửa
khối cùng với một vài khóa. Đầu ra của hàm-F sau đó được kết hợp với một nửa còn
lại của khối, và các nửa được tráo đổi trước khi bắt đầu vòng tiếp theo. Sau khi vòng
cuối cùng kết thúc, các nửa được đổi chỗ, đây là một tính năng của cấu trúc Feistel
làm cho quá trình mã hóa và giải mã tương tự nhau.
7
Cấu trúc tổng thể của DES
Các hàm Feistel (F)
: Hàm Feistel của DES
Hàm-F, mô tả trong hình 2, thao tác trên một nửa khối (32 bit) tại một thời điểm và
8
bao gồm bốn bước nhỏ:
1. Mở rộng- Các nửa khối 32-bit được mở rộng thành 48 bit bằng cách sử dụng
hoán vị mở rộng, ký hiệu là E trong sơ đồ, bằng cách sao chép một nửa trong số các
bit. Kết quả bao gồm tám chuỗi 6-bit (8 * 6 = 48 bit) miếng, từng chuỗi chứa một bản
sao của 4 bit đầu vào tương ứng, cộng với một bản sao của bit ngay liền kề từ mỗi
chuỗi đầu vào cho cả hai phía.
2. Trộn khóa - kết quả được kết hợp với một khóa con bằng cách sử dụng một phép
toán XOR. 16 khóa con 48-bit - một khóa cho mỗi vòng – được điều chế từ khóa
chính bằng cách sử dụng key schedule (được mô tả dưới đây).
3. Thay thế - sau khi trộn khóa, khối được chia thành tám mảnh 6-bit trước khi được
điều chế bởi hộp-S, hoặc hộp thay thế. Mỗi hộp trong số tám S-hộp thay thế sáu bit
đầu vào của nó với bốn bit đầu ra theo một chuyển đổi phi tuyến tính, cung cấp dưới
dạng một bảng tra cứu. S-hộp cung cấp cốt lõi của sự an toàn của DES - mà không có
họ, các thuật toán mã hóa sẽ là tuyến tính, và tầm thường dễ vỡ.
4. Hoán vị - cuối cùng, 32 kết quả đầu ra từ các hộp-S được sắp xếp lại theo một hoán
vị xác định, hộp P. Kỹ thu
ật này được thiết kế để, sau khi hoán vị, các bit đầu ra của từng S-box được đưa vào 4
hộp S khác nhau trong vòng tiếp theo.
Các biến đổi luân phiên thay thế từ hộp S, và hoán vị của các bit từ hộp P và hàm mở
rộng E tạo ra sự "nhầm lẫn và khuếch tán" tương ứng, một khái niệm xác định bởi
Claude Shannon trong những năm 1940 như một điều kiện cần thiết cho một thuật
toán mã hóa thực tế nhưng an toàn.
9
: Hàm tạo khóa của DES
Hình 3 minh họa hàm tạo khóa cho quá trình mã hóa - tạo ra các khóa con. Ban đầu,
56 bit của khóa được lựa chọn từ chuỗi 64 bit ban đầu bởi hoán vị lựa chọn 1 (PC -1 )
- tám bit còn lại hoặc là loại bỏ hoặc sử dụng làm bit kiểm tra chẵn lẻ. 56 bit được chia
thành hai nửa 28 -bit, sau mỗi nửa được xử lý riêng. Trong vòng kế tiếp , cả hai nửa
được quay vòng bằng một hoặc hai bit ( xác định cho mỗi vòng ) , và sau đó 48 bit
khóa con được lựa chọn bởi hoán vị lựa chọn 2 (PC -2 ) - 24 bit từ nửa bên trái , và 24
từ nửa phải. Các phép quay ( ký hiệu là "<<< " trong sơ đồ ) có nghĩa là một tập khác
nhau của các bit được sử dụng trong mỗi khóa con, mỗi bit được sử dụng trong
khoảng 14 trong số 16 khóa .
Hàm tạo khóa cho quá trình giải mã cũng tương tự - nhưng theo thứ tự ngược lại so
với mã hóa. Ngoài sự thay đổi đó, quá trình này giống như đối với mã hóa. Cùng 28
bit được truyền cho tất cả các hộp quay.
2.2 IDEA
IDEA hoạt động trên các khối 64-bit bằng cách sử dụng một khóa 128-bit, và bao
gồm liên tiếp tám biến đổi giống hệt nhau (một vòng, xem hình minh họa) và chuyển
đổi đầu ra (nửa vòng). Các quy trình để mã hóa và giải mã tương tự. IDEA chú trọng
an ninh của mình bằng cách đan xen các phép chuyển đổi từ trên các nhóm khác nhau
– phép cộng, phép nhân, và phép hoặc loại trừ (XOR) - đó là đại số "không tương
thích" trong một nghĩa nào đó. Cụ thể hơn, các phép toán này xử lý với từng chuỗi 16-
10
bit:
Hoặc loại trừ (ký hiệu dấu cộng khoanh tròn màu xanh nước biển ⊕).
Modulo cộng 2
16
(ký hiệu bằng dấu cộng đóng ô vuông màu xanh lá cây ⊞).
Modulo nhân 2
16
+1, trong đó các từ 0 (0x0000) được xem như là 2
16
(ký hiệu
bằng dấu chấm khoanh tròn).
Sau khi kết thúc tám vòng, chuyển sang "nửa vòng" cuối cùng, kết quả chuyển đổi
minh họa như dưới đây:
Cu trúc
Cấu trúc tổng thể của IDEA sau lược đồ Lai-Massey. XOR được sử dụng cho cả phép
trừ trừ, phép cộng. IDEA sử dụng một hàm nửa vòng có khóa phụ thuộc. Làm việc với
các từ 16 bit (có nghĩa là bốn đầu vào thay vì hai cho kích thước khối 64 bit), IDEA
sử dụng lược đồ Lai-Massey hai lần song song, với hai hàm vòng song song được đan
xen với nhau. Để đảm bảo đủ khuếch tán, hai trong số các khối con được tráo đổi sau
mỗi vòng.
Mỗi vòng sử dụng sáu khóa con 16-bit, trong khi nửa vòng sử dụng bốn, tổng cộng 52
cho 8,5 vòng. Tám khóa con đầu tiên được sinh ra trực tiếp từ khóa chính, với K1 từ
vòng đầu tiên ứng với mười sáu bit thấp hơn; nhóm tiếp theo trong tám khóa được tạo
ra bằng cách xoay tròn khóa sang trái 25 bit giữa mỗi nhóm tám. Điều này có nghĩa
rằng nó được quay ít hơn một lần mỗi vòng, trung bình, tổng cộng sử dụng sáu phép
quay.
G
Giải mã hoạt động giống như mã hóa, nhưng thứ tự của các khóa vòng được đảo
ngược, và mỗi giá trị của mỗi khóa con được thay thế bằng đảo ngược các phép
chuyển đổi nhóm tương ứng.
2.3 RC5
Không giống như nhiều chương trình , RC5 có kích thước khối thay đổi (32, 64
hoặc 128 bit ) , kích thước khóa ( 0-2048 bit) và số vòng ( 0 đến 255) . Lựa chọn đề
nghị ban đầu cho các thông số là kích thước khối - 64 bit , kích thước khóa 128-bit và
12 vòng .
11
Đặc điểm chính của RC5 là việc sử dụng phép quay dữ liệu phụ thuộc, một trong
những mục tiêu của RC5 là để khuyến cáo nghiên cứu và đánh giá các kỹ thuật như
một nguyên lý mật mã nguyên thủy. RC5 gồm một số bổ sung mô-đun và phép toán
OR loại trừ (XOR ). Cấu trúc chung của thuật toán là một mạng tựa Feistel. Các bước
mã hóa và giải mã có thể được xác định trong một vài dòng mã. Hàm tạo khóa, tuy
nhiên, phức tạp hơn, mở rộng khóa bằng cách sử dụng một hàm cơ bản một chiều có
bản mở rộng nhị phân với cả tỉ lệ e và tỷ lệ vàng. Sự đơn giản hiển nhiên của thuật
toán cùng với sự mới lạ của các phép quay dữ liệu phụ thuộc đã làm RC5 một đề tài
hấp dẫn cho các nghiên cứu về mã hóa. RC5 về cơ bản được ký hiệu là RC5-w/r/b đó
w = kích thước từ theo bit , r = số vòng , b = số byte 8-bit trong khóa .
2.4 AES
AES dựa trên một nguyên tắc thiết kế được gọi là một mạng lưới thay thế - hoán
vị , và nhanh chóng trong cả phần mềm và phần cứng. [8] Không giống như thuật toán
tiền nhiệm của nó là DES , AES không sử dụng mạng Feistel . AES là một biến thể
của Rijndael trong đó có một kích thước khối cố định 128 bit, và kích thước khóa 128
, 192 , hoặc 256 bit. Ngược lại, các đặc điểm kỹ thuật Rijndael được quy định với kích
thước khối và khóa có thể là bất kỳ bội số của 32 bit , với kích thước tối thiểu là 128
và tối đa là 256 bit .
AES hoạt động trên một ma trận cột chính 4 × 4 byte , được gọi là state, mặc dù một
số phiên bản của Rijndael có kích thước khối lớn hơn và có các cột bổ sung trong
state. Hầu hết các tính toán AES được thực hiện trong một trường hữu hạn đặc biệt.
Kích thước khóa được sử dụng cho thuật toán mã hóa AES xác định số lần lặp lại của
vòng chuyển đổi đầu vào văn bản thành kết quả cuối cùng, được gọi là bản mã. Số chu
kỳ lặp lại như sau:
10 chu kỳ lặp đi lặp lại đối với các khóa 128-bit.
12 chu kỳ lặp đi lặp lại đối với các khóa 192 -bit.
14 chu kỳ lặp đi lặp lại đối với các khóa 256-bit .
Mỗi vòng bao gồm một số bước xử lý , từng có bốn khâu tương tự nhưng khác nhau,
trong đó có một khâu phụ thuộc vào khóa mã hóa riêng của nó. Một tập các vòng đảo
ngược được áp dụng để chuyển đổi mã trở lại vào văn bản ban đầu bằng cách sử dụng
chính khóa mã hóa.
2.5 Blowfish (cipher)
Blowfish có kích thước khối 64-bit và chiều dài khóa thay đổi từ 32 bit lên đến
448 bit. Đây là một thuật toán mã hóa Feistel 16 vòng và sử dụng hộp S khóa phụ
thuộc lớn. Về mặt cấu trúc, thuật toán này giống như CAST-128, sử dụng hộp S cố
định.
12
Sơ đồ bên dưới cho thấy hành động của Blowfish. Mỗi đường đại diện cho 32 bit. Các
thuật toán nhận hai mảng khóa con: đầu vào 18 mảng P và bốn hộp S -256. Hộp S
chấp nhận đầu vào 8-bit và cho đầu ra 32-bit. Một trong những đầu vào của mảng P
được sử dụng mỗi vòng, và sau khi vòng cuối cùng kết thúc, mỗi nửa của khối dữ liệu
được XOR với một trong hai đầu vào còn lại không sử dụng của mảng P.
Cấu trúc Feistel của Blowfish
Sơ đồ dưới cho thấy hàm F của Blowfish. Hàm này chia tách đầu vào 32-bit thành bốn
phần 8 bit, và sử dụng các phần này làm đầu vào cho S-box. Kết quả đầu ra được thêm
modulo 2
32
và XOR để sinh ra đầu ra 32-bit.
2.2: Hàm vòng (hàm Feistel) của Blowfish
13
Giải mã là giống như mã hóa , ngoại trừ P1, P2, , P18 được sử dụng theo thứ tự
ngược lại. Điều này không hoàn toàn như vậy vì phép toán XOR là có tính chất giao
hoán và kết hợp. Một quan niệm sai lầm phổ biến là sử dụng thứ tự đảo ngược của mã
hóa để thực hiện thuật toán giải mã (tức là thực hiện XOR P17 đầu tiên và P18 với
khối mã , sau đó sử dụng các đầu vào P theo thứ tự ngược lại).
Hàm tạo khóa của Blowfish bắt đầu bằng cách khởi tạo mảng P và các hộp S với giá
trị thu được từ các chữ số thập lục phân của số pi , mà không chứa mô hình rõ
ràng.Tiếp theo, khóa bí mật , được tạo thành theo từng byte , ghép chu kỳ khóa nếu
cần thiết, XOR với tất cả các đầu vào P theo thứ tự. Khối 64-bit 0 được mã hóa với
bằng thuật toán riêng. Các bản mã kết quả thay thế P1 và P2. Các bản mã tương tự
được mã hóa một lần nữa với các khóa con mới, và các đoạn mã mới sẽ thay thế P3 và
P4. Thao tác này tiếp tục, thay thế toàn bộ mảng P và tất cả các mục S -box. Tóm lại,
các thuật toán mã hóa Blowfish sẽ chạy 521 lần để tạo ra tất cả các khóa con – khoảng
4KB dữ liệu được xử lý.
Vì mảng P có chiều dài 576 bit, và các byte của khóa được XOR với tất cả 576 bit này
trong lúc khởi tạo, nhiều phiên bản hỗ trợ kích thước khóa lên đến 576 bit. Trong khi
điều này là chắc chắn có thể, giới hạn 448 bit là ở đây để đảm bảo rằng tất cả các bit
của mỗi khóa con đều phụ thuộc vào tất cả các bit của khóa chính, vì bốn giá trị cuối
cùng của mảng P không ảnh hưởng đến tất cả các bit của bản mã. Điểm này phải được
đưa ra xem xét cho triển khai với một số vòng khác nhau, bởi mặc dù nó làm tăng
cường an ninh chống lại tấn công toàn diện, nó làm suy yếu mức độ an ninh được đảm
bảo bởi các thuật toán. Và cho khởi tạo chậm của thuật toán mã hóa với mỗi thay đổi
của khóa, nó được tăng cường thêm mức độ bảo mật tự nhiên chống lại các cuộc tấn
công brute-force, mà không thực sự biện minh cho kích thước khóa dài hơn 448 bit.
3
Như đã nói trước đây, thuật toán mã hóa có thể được sử dụng để bảo vệ văn bản
không bị tiết lộ. Mục đích của kẻ tấn công là "phá vỡ" thuật toán mã hóa nhằm phục
hồi các văn bản từ bản mã được bảo vệ. Thuật toán mã hóa hoàn toàn bị phá vỡ nếu kẻ
giải mã có thể xác định khóa bí mật đã được sử dụng để có thể đọc tất cả các thông
điệp dễ dàng như các người sử dụng hợp pháp. Thuật toán mã hóa bị phá vỡ một phần
nếu kẻ tấn công có khả năng phục hồi văn bản từ bản mã đã được bảo vệ, nhưng
không thể xác định được khóa bí mật.
An ninh luôn luôn liên quan đến các nguy cơ tiềm ẩn. Như đã nêu trên, chúng tôi đã
giả định rằng kẻ tấn công có quyền truy cập vào tất cả mọi thứ được truyền tải qua các
kênh không an toàn.
Tuy nhiên, có thể có các thông tin khác có sẵn cho các tin tặc. Khả năng tính toán của
các tin tặc cũng phải được xem xét trước khi an ninh của thuật toán mã hóa có thể
được đánh giá.
3.1
Giả định phổ biến nhất được chấp nhận trong mật mã là những kẻ tấn công
(Enemy cryptanalyst) có thể truy cập vào các bản mã truyền qua kênh không an toàn.
Một giả định khác được chấp nhận như sau:
14
Gi nh ca Kerckhoff: Các cryptanalyst đối phương biết tất cả các chi tiết của quá
trình mã hóa và giải mã trừ giá trị của khóa bí mật.
Giả định Kerckhoff ngụ ý rằng sự an toàn của một hệ thống mật mã khóa bí mật hoàn
toàn dựa vào các khóa bí mật. Theo giả định của Kerckhoff, các cuộc tấn công thường
phân loại theo kiến thức của kẻ tấn công như sau:
(Ciphertext-only attack): Các đối phương tấn công không có
thông tin bổ sung về bản mã được bảo vệ;
(Known-plaintext attack:): Các đối phương tấn
công biết thêm một số cặp văn bản / bản mã cho các khóa hiện tại.
Tn công bn la chn (Chosen-plaintext attack): Các kẻ thù có thể có thể đạt
được những bản mã cho bất kỳ văn bản xác định cho các khóa hiện tại.
Tấn công văn bản xác định là mạnh nhất trong các dạng tấn công trên. Nếu một thuật
toán mã hóa là an toàn với dạng tấn công văn bản lựa chọn, thì nó cũng an toàn với
các dạng tấn công khác. Trong thực tế, người ta sẽ muốn sử dụng thuật toán mã hóa an
toàn chống lại dạng tấn công văn bản lựa chọn ngay cả khi kẻ thù hiếm khi có cơ hội
để nhằm vào dạng tấn công chỉ mã hơn.
3.2 u kin và tính toán
Sự an toàn của một hệ thống mã hóa phụ thuộc chủ yếu vào khả năng tính toán
của kẻ thù. Một hệ thống thuật toán mã hóa được gọi là an toàn vô điều kiện nếu nó
được bảo vệ chống lại kẻ thù phá hoại với tài nguyên tính toán không giới hạn. An
toàn vô điều kiện, còn được gọi là lý thuyết an toàn, thực hiện đảm bảo không thể phá
vỡ thuật toán mã hóa. Một thuật toán mã hóa an toàn chống lại kẻ thù với sức mạnh
tính toán hạn chế xác định được gọi là an toàn tính toán. An ninh tính toán, cũng được
gọi là an ninh thực tế, nhằm đảm bảo gây khó khăn trong việc phá vỡ thuật toán mã
hóa. Tất cả hệ thống mã hóa an toàn vô điều kiện được biết đến hiện nay là không thực
tế vì một vài lý do sẽ được thảo luận dưới đây. Hơn nữa, không có mã hóa thực tế nào
được chứng minh là an toàn tính toán.
u kin
Mặc dù trong hầu hết các ứng dụng, an toàn vô điều kiện là không cần thiết và không
thể đạt được thuật toán mã hóa thực tế, các nghiên cứu về an ninh vô điều kiện không
thể hiện được tầm nhìn sâu sắc và hỗ trợ trong việc thiết kế và sử dụng các thuật toán
mã hóa thực tế. Ví dụ, động lực cơ bản cho một mã hóa dòng là mật mã hoàn hảo
được cung cấp bởi hệ thống "one-time pad ".
(Shannon 1949) Một thuật toán mã hóa hỗ trợ bảo mật hoàn hảo nếu
bản mã và khối văn bản là độc lập thống kê.
Các thành tựu bảo mật hoàn hảo đạt được bởi Shannon trong bài báo năm 1949 của
ông.
Ý tưởng sử dụng hệ thống khóa "một lần" lần đầu tiên được Vernam đề xuất vào năm
1926 Hệ thống mã hóa Vernam thường được gọi là hệ thống "pad một lần". Mặc dù
người ta tin trong một thời gian dài rằng pad 1 lần là "không thể phá vỡ”, nhưng thực
tế là nó cung cấp bảo mật hoàn hảo lần đầu tiên được chứng minh bởi Shannon.
15
Ví dụ 1 (Mã hóa nhóm khóa 1 lần) xem xét các mã khối thể hiện trong Hình 2.2 trong
đó là một phép toán nhóm được xác định trên bộ . Mã hóa này có bảo mật
hoàn hảo nếu khóa được chọn một cách ngẫu nhiên thống nhất và độc lập cho mỗi
khối văn bản.
Hình 3.1: Mã hóa nhóm khóa một lần: Khóa Z, được lựa chọn thống nhất ngẫu nhiên
và độc lập
An toàn tính toán
Trong thực tế, không có kẻ tấn công nào có thể có sức mạnh tính toán không giới
hạn. Do đó, sự an toàn của một hệ thống mã hóa thực tế không phải phụ thuộc vào sự
bất khả lý thuyết để phá vỡ một thuật toán mã hóa, mà là phụ thuộc trên những khó
khăn thực tế của các cuộc tấn công. Một thuật toán mã hóa là an toàn tính toán nếu
những khó khăn của một cuộc tấn công tối đa vượt quá năng lực tính toán của kẻ tấn
công. Shannon mô tả khó khăn như vậy (cho dạng tấn công chỉ bản mã) bởi đặc tính
làm việc W (n) của thuật toán mã hóa, được xác định bằng khối lượng công việc cần
thiết để xác định khóa khi n đoạn mã được biết đến.
4 ng dng mã hóa khi
Mã hóa khối có thể được sử dụng để xây dựng nguyên thủy mã hóa khác, chẳng
hạn như những thuật toán dưới đây. Để những nguyên thủy khác này được mã hóa an
toàn, cần phương hướng xây dựng chúng đúng đắn.
Mã hóa dòng có thể được xây dựng bằng cách sử dụng mã hóa khối. Kiểu
OFB và kiểu CTR là kiểu khối biến một thuật toán mã hóa khối thành mã
hóa dòng.
Hàm băm mã hóa có thể được xây dựng bằng cách sử dụng mã hóa khối.
Các phương pháp tương tự như kiểu mã hóa khối về mặt vận hành thường
được sử dụng để mã hóa.
Máy phát điện số giả ngẫu nhiên mã hóa an toàn ( CSPRNGs ) có thể được
xây dựng sử dụng mã hóa khối.
Hoán vị giả ngẫu nhiên an toàn của các tập có kích thước hữu hạn tùy ý có
thể được xây dựng với mã hóa khối.
Mã xác thực thông điệp ( MAC ) thường được xây dựng từ mã hóa khối.
CBC- MAC, OMAC và PMAC là những MAC như vậy.
Mã hóa chứng thực cũng được xây dựng từ mã khối. Nó có nghĩa là cả mã
hóa và MAC cùng một lúc. Mục đích là để cung cấp bảo mật và xác thực.
CCM, EAX, GCM và OCB là chế độ mã hóa chứng thực như vậy.
16
5
Ví dụ thuật toán mã hóa khối DES
Hình 5.1: Thuật toán mã hóa khối DES
Hình 5.2: Bảng mô tả DES phép hoán vị ban đầu IP của DES và nghịch đảo của nó
IP
-1
Hình 5.3: Hàm f của DES.
17
Hình 5.4: Bảng mô tả các hàm mở rộng E và hoán vị cuối cùng P của hàm f - DES.
18
Hình 5.5: Các hộp S của DES
Hình 5.6: Hàm tạo khóa của DES.
19
Hình 5.7: Bảng mô tả hàm PC-1, PC-2 được sử dụng bởi hàm tạo khóa DES
6
1.
2. Chương 3, BLOCK CIPHERS, Cryptology của Bellare và Rogaway
3. On the Design and Security of Block Ciphers, XUEJIA LAI