Mục lục 1 Mã hóa khối 2 1.1 Mã hóa khối là gì 2 1.2 Thiết kế 2 1.2.1 Lặp mã khối (Iterated block ciphers) 2 1.2.2 Mạng thay thếhoán vị (Substitutionpermutation networks) 3 1.2.3 Mã hóa Feistel 3 1.2.4 LaiMassey Scheme 3 2 Các loại mã hóa khối 3 2.1 Lucifer DES 3 2.2 IDEA 3 2.3 RC5 3 2.4 AES 3 2.5 Blowfish (cipher) 3 3 Độ an toàn của mã hóa khối 3 3.1 Các kiểu tấn công 3 3.2 An toàn vô điều kiện và tính toán 3 4 Ứng dụng mã hóa khối 3 5 Ví dụ về mã hóa khối 3 6 Tài liệu tham khảo 3 MÃ HÓA KHỐI GVHD : PSG.TS.Trịnh Nhật Tiến Người thực hiện: Nguyễn Thị Ngọc Thu 1 Mã hóa khối 1.1 Mã hóa khối là gì Trong mật mã học, mã hóa khối 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 nbit. 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 = E1. 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 EK (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 EK (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 EK1(C) := DK(C) = D(K,C):{0,1}k x {0,1}k →{0,1}n
Trang 1Mục lục
1 Mã hóa khối 2
1.1 Mã hóa khối là gì 2
1.2 Thiết kế 2
1.2.1 Lặp mã khối (Iterated block ciphers) 2
1.2.2 Mạng thay thế-hoán vị (Substitution-permutation networks) 3
1.2.3 Mã hóa Feistel 3
1.2.4 Lai-Massey Scheme 3
2 Các loại mã hóa khối 3
2.1 Lucifer / DES 3
2.2 IDEA 3
2.3 RC5 3
2.4 AES 3
2.5 Blowfish (cipher) 3
3 Độ an toàn của mã hóa khối 3
3.1 Các kiểu tấn công 3
3.2 An toàn vô điều kiện và tính toán 3
4 Ứng dụng mã hóa khối 3
5 Ví dụ về mã hóa khối 3
6 Tài liệu tham khảo 3
Trang 2MÃ HÓA KHỐI
GVHD : PSG.TS.Trịnh Nhật Tiến
Người thực hiện: Nguyễn Thị Ngọc Thu
1 Mã hóa khối
1.1 Mã hóa khối là gì
Trong mật mã học, mã hóa khối 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
EK (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 EK (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
EK-1(C) := DK(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, EK 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 (2n)
1.2 Thiết kế
1.2.1 Lặp mã khối (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
Trang 3có 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:
Mi = RKi (Mi-1)
Trong đó M0 là văn bản và bản mã Mr, 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):
M0 = M ⊕ K0
Mi = RKi (Mi-1); i = 1…r
C = Mr ⊕ Kr+1
1.2.2 Mạng thay thế-hoán vị (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
Trang 4Trong 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 K0, K1,…, Kn 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, (L0, R0)
Với mỗi vòng i = 0,1,…,n, tính toán
Li+1 = Ri
Ri+1 = Li ⊕ F(Ri, Ki)
Kết quả đoạn mã là (Rn+1, Ln+1)
Giải mã đoạn mã (Rn+1, Ln+1) sẽ thực hiện được bằng cách tính toán i=n,n-1,…,0
Ri = Li+1
Li = Ri+1 ⊕ F(Ri, Ki)
Kết quả (L0, R0) là văn bản gốc
Hình 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 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
Trang 5vò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 K0, K1, …, Kn 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, (L0, R0)
Với mỗi vòng i = 0,1,…, n, tính toán
Li+1 = б(Li) + Ti và Ri+1 = Ri + Ti
Trong đó б là một orthomorphism (có nghĩa là, cả hai б và x→ б (x)-x là hoán vị) và
Ti = F (б (б(Li) – Ri, Ki)
Kết quả, bản mã là (Rn+1, Ln+1)
Giải mã một bản mã (Rn+1, Ln+1) được thực hiện bằng cách tính toán đối với i = n, n-1,
…, 0
Ri = б-1(Li+1 – Ti) và
Li = Ri+1 - Ti
Trong đó Ti = F(Li+1 – Ri+1, Ki)
Kết quả, (L0, R0) chính là văn bản gốc
Hình 1.2: Sơ đồ Lai-Massey
Trang 62 Các loại mã hóa khối
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
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ấ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
Trang 7Hình 2.1: Cấu trúc tổng thể của DES Các hàm Feistel (F)
Hình 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à
Trang 8bao 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
Hàm tạo khóa
Trang 9Hình 2.3: 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-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 216 (ký hiệu bằng dấu cộng đóng ô vuông màu xanh lá cây ⊞)
Modulo nhân 216 +1, trong đó các từ 0 (0x0000) được xem như là 216 (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
Trang 10cá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
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
Đặ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