1
M HA KHI
!
" #$%&'
"" #$%&'()
Trong mật mã học, *#$%&' 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)
2
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ữ
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
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
L
i+1
= R
i
R
i+1
= L
i
⊕
F(R
K
i
)
Kết quả (L
0
, R
0
) là văn bản gốc.
Hnh 1.1 : 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 ,%8%5511*1
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
4
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
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
)
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.
6
Hnh 2.1: Cấu trúc tổng thể của DES
Các hàm Feistel (F)
Hnh 2.2: 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à
7
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ở
(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:
Cấu 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
9
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.
Hàm tạo khóa
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.
Giải mã
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.
+B C=D
Không giống như nhiều chương trình , RC5 có kích thước khối thay đổi (32, 64
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.
+D F4;>5/.16
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.
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.
11
Hnh 2.1: 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.
Hnh 2.2: Hàm vòng (hàm Feistel) của Blowfish
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).
12
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á
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á.
B" =9&JKL
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:
MNI%O1&4>>: 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:
13
KLP3M*# (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ệ;
KL:Q3MNR3N(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.
KL:Q3M%! (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.
1
2
3
3.1
3.2 A4(:LNS&:(T49
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ó
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.
E V2*#$%&'
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.
15
• 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.
D T2:S*#$%&'
Ví dụ thuật toán mã hóa khối DES