1.3.1 Hệ mã hóa DES
Khoảng những năm 1970, Tiến sĩ Horst Feistel đã đặt nền móng đầu tiên cho chuẩn mã hóa dữ liệu DES với phương pháp mã hóa Feistel Cipher. Vào năm 1976 Cơ quan bảo mật Quốc gia Hoa kỳ (NSA) đã công nhận DES dựa trên phương pháp Feistel là chuẩn mã hóa dữ liệu. Kích thước khóa của DES ban đầu là 128 bit nhưng tại bản công bố FIPS kích thước khóa được rút xuống còn 56 bit.
Trong phương pháp DES, kích thước khối là 64 bit. DES thực hiện mã hóa dữ liệu qua 16 vòng lặp mã hóa, mỗi vòng sử dụng một khóa chu kỳ 48 bit được tạo ra từ khóa ban đầu có độ dài 56 bit. DES sử dụng 8 bảng hằng số S-box để thao tác
Quá trình mã hóa của DES có thể tóm tắt như sau : Biểu diễn thông điệp nguồn x P bằng dãy 64 bit. Khóa k có 56 bit. Thực hiện mã hóa theo 3 giai đoạn :
1) Với bản rõ x cho trước có độ dài 64 bit, tạo ra một xâu x0 bằng cách hoán vị các bít của x theo phép hoán vị cố định ban đầu IP (Initial Permutation).
Biểu diễn x0 = IP(x) = L0R0,
Trong đó, L0 gồm 32 bit bên trái của x0,R0 gồm 32 bit bên phải của x0.
2) Thực hiện 16 vòng lặp từ 64 bit thu được và 56 bit của khóa k (chỉ sử dụng 48 bit của khóa k trong mỗi vòng lặp). 64 bit kết quả thu được qua mỗi vòng lặp sẽ là đầu vào cho vòng lặp sau. Các cặp từ 32 bit Li, Ri (với 1 ≤ i ≤ 16 ) được xác định theo quy tắc sau:
Li=Ri-1
Ri=Li-1 f(Ri-1, Ki)
Với biểu diễn phép toán XOR trên hai dãy bit, K1, K2,..., K16 là các dãy 48 bit phát sinh từ khóa K cho trước (Trên thực tế, mỗi khóa Ki được phát sinh bằng cách hoán vị các bit trong khóa K cho trước).
3) Áp dụng hoán vị ngược IP-1 đối với dãy bit R16L16, thu được từ y gồm 64 bit. Như vậy, y=IP-1 (R16L16)
Hàm f được sử dụng ở bước 2 là hàm số gồm 2 tham số: Tham số thứ nhất A là một dãy 32 bit , tham số thứ hai J là một dãy 48 bit. Kết quả của hàm f là một dãy 32 bit. Các bước xử lý của hàm f (A, J) như sau:
Tham số thứ nhất A (32 bit) được mở rộng thành dãy 48 bit được phát sinh từ A bằng cách hoán vị theo một thứ tự nhất định 32 bit của A, trong đó có 26 bit của A được lặp lại 2 lần trong E (A).
Thực hiện phép toán XOR cho hai dãy 48 bit E(A) và J, ta thu được một dãy 48 bit B. Biểu diễn B thành từng nhóm 6 bit như sau: B=B1 B2 B3 B4 B5 B6 B7 B8 Sử dụng 8 ma trận S1, S2, ..., S8 mỗi ma trận Si có kích thước 4 x16 và mỗi dòng của ma trận nhận đủ 16 giá trị từ 0 đến 15. Xét dãy gồm 6 bit B
được xác định bằng giá trị của phần tử tại dòng r cột c của Sj, trong đó, chỉ số dòng r có biểu diễn nhị phân là b1 b6 , chỉ số cột c có biểu diễn nhị phân là b2 b3 b4 b5. Bằng cách này, ta xác định được các dãy 4 bit Cj = Sj(Bj), 1 ≤ j ≤ 8.
Tập hợp các dãy 4 bit Cj lại, ta có được dãy 32 bit C = C1 C 2 C3 C4 C5 C6 C7 C8. Dãy 32 bit thu được bằng cách hoán vị C theo một quy luật P nhất định chính là kết quả của hàm F(A,J).
Quá trình giải mã chính là thực hiện theo thứ tự đảo ngược tất cả các thao tác của quá trình mã hóa.
1.3.2 Hệ mã hóa AES
Vào năm 2000, cơ quan quản lý về chuẩn và công nghệ của Mỹ, NIST (National Institute of Standard and Technology), đã tổ chức một cuộc thi để chọn một hệ mật mã mới thay thế cho DES. Hệ mã Rijndael đã được chọn và được công bố (2002) như là chuẩn mật mã mới thay thế cho DES, với tên gọi là Advanced Encryption Standard (AES). Vào đến vòng trong còn có các ứng viên khác là RC6, Serpent, MARS và Twofish. Hệ mã này được phát triển bởi 2 nhà khoa học Bỉ, Joan Daemen và Vincent Rijnmen (vì vậy tên gọi Rijndael được tạo ra từ việc ghép tiền tố tên họ 2 ông này).
AES được xây dựng trên nguyên lý thiết kế lưới giao hoán – thay thế (substitution-permutation network). Đây là một hệ mã có tốc độ tốt trong cả cài đặt phần mềm cũng như phần cứng. Khác với DES, AES không theo mẫu thiết kế mạng Feistel. Thay vào đó các thao tác cơ bản được thực hiện trên các khối ma trận dữ liệu 4*4 (bytes), được gọi là các trạng thái (state). Số vòng lặp của AES là một tham số xác định trên cơ sở kích thước khóa: 10 vòng lặp cho khóa 128bit, 12 cho 192 bit, 14 cho 256bit.
1.3.3 Hệ mã hóa IDEA
Thuật toán IDEA (International Encryption Algorihm) được mô tả như sau:
IDEA là phương pháp mã khối sử dụng 128 bit khoá để mã khối dữ liệu 64 bit. IDEA được xây dựng nhằm mục đích kết hợp với nhiều yếu tố khác để tăng độ an toàn và khả năng thực hiện. Từ khi mới được công bố thì thuật toàn này đều là đối tượng quan tâm của các nhà phân tích mật mã (mã thám), và không ai có thể đảm bảo được mức độ chắc chắn, sự an toàn của thuật toán này cung cấp và cũng
không ai có thể bảo đảm rằng việc tấn công hay đột phá vào thuật toán này là không thể thành công. Một ngày nào đó, cho dù có đột phá được thì người ta cũng không hề công bố. Tuy nhiên, với điều kiện kỹ thuật như hiện nay thì điếu đó vẫn khó có thể xảy ra.
Trong IDEA sự phân bố được tạo ra dựa trên khối thuật toán có cấu trúc như hình vẽ gọi là cấu trúc MA( Multiplication/Additio) trong hình sau:
F1 F2 Z5 Z6 G1 G2
Hình 1.8 Cấu trúc Multiplication/Additio (MA)
Khối này nhận 16 bit từ bản rõ và 16 bit được lấy từ khoá ra theo một quy tắc nào đó ( 16 bit này được gọi là subkey và quy tắc lấy subkey từ khoá sẽ được trình bày ở sau) để tạo ra 16 bit đầu ra. Một chương trình kiểm tra trên máy tính bằng phương pháp vét cạn xác định rằng mỗi bit ở đầu ra phụ thuộc vào các bít rõ và bit subkey đầu vào. Cấu trúc này được sử dụng lặp lại 8 lần trong thuật toán và tạo nên một sự phân bố có hiệu qủa.
IDEA được xây dựng sao cho việc thực hiện nó được dễ dàng cả trên phần cứng và phần mềm. Việc thực hiện trên phần cứng, điển hình là trên vi mạch VLSI (VLSI: mạch tích hợp cao), được thiết kế để đạt được tốc độ cao.
1.4 Hệ mã hóa đồng cấu 1.4.1 Định nghĩa 1.4.1 Định nghĩa
1.4.1.1 Định nghĩa đồng cấu trong toán học
Trong đại số, đồng cấu là phép ánh xạ bảo toàn cấu trúc giữa hai cấu trúc đại số (ví dụ như các nhóm, vành hoặc không gian vector).
Định nghĩa đồng cấu:
Cho (G, *) và (H, ο) là các nhóm, một đồng cấu là một hàm f: G H nếu: f(x*y) = f(x) ο f(y) với mọi x, y G. Các tính chất của ánh xạ G so với tính chất của G và ngược lại được bảo toàn.
Cấu trúc đại số có thể được bảo tồn không chỉ có một phép tính, một đồng cấu cần bảo tồn nhiều phép tính.
Ví dụ: Phép cộng: = 0 = 0 + 0 = + 0 0 0 r s r s f r s f r f s r s r s Phép nhân: = 0 = 0 0 = 0 0 0 rs r s f rs f r f s rs r s
1.4.1.2 Định nghĩa hệ mã hoá đồng cấu
Hệ mã hóa đồng cấu được sử dụng để giúp thực hiện các phép toán trên dữ liệu đã được mã hóa mà không cần giải mã chúng (không có khóa bí mật), người dùng là chủ sở hữu duy nhất của khóa bí mật.
Định nghĩa: Một mã hóa được gọi là đồng cấu khi: từ Enc(a) và Enc(b) có thể tính toán Enc(f (a, b)), với f là các phép tính +, *, và không sử dụng khóa riêng.
Hệ mã hóa chỉ thực hiện một phép tính là phép cộng (hệ mã hóa Pailler, Goldwasser - Micalli), phép nhân (hệ mã hóa ElGamal, RSA).
1.4.2 Hệ mã hoá đồng cấu cộng
Một hệ mã hóa coi là đồng cấu cộng nếu: Enc (xy) = Enc(x) Enc(y).
Ví dụ: Giả sử thuật toán mã hóa Paillier với khoá công khai modulo m và cơ sở g,
khi đó mã hoá thông điệp x là: 2
( ) = g r mod mx m
x
Với ngẫu nhiên r 0, ..., m1 Khi đó: 1 2 1 2 1 2 1 2 1 2 1 2 ( ). ( ) = g rx m . g rx m = gx x r r m = ( ) x x x x
Suy ra, hệ mã hóa Paillier có tính chất cộng của hệ mã hóa đồng cấu.
1.4.3 Hệ mã hoá đồng cấu nhân
Một hệ mã hoá coi là đồng cấu nhân nếu: Enc (x⊗y) = Enc(x) ⊗ Enc(y).
Ví dụ 1: Thuật toán mã hóa công khai RSA modulo m và mũ e, khi đó mã hoá thông điệp x được cho bởi: ( ) = mod me
x x
Khi đó : ( ). ( ) = mod m = x1 x2 xe x x1 2e mod m = ( x1x2)
Suy ra, hệ mã hóa RSA có tính chất của hệ mã hóa đồng cấu nhóm nhân.
Ví dụ 2: Thuật toán mã hóa ElGamal với một nhóm G. Nếu khoá công khai là (G, q, g, h), với h = gx và x là khoá bí mật, thì mã hoá thông điệp m được xác định:
( ) = (g , .r r)
m m h
, ngẫu nhiên r 0, ..., q-1 Khi đó:
Suy ra, hệ mã hóa ElGamal có tính chất của hệ mã hóa đồng cấu nhóm nhân.
2 1 2 1 2 1 1 2 2 1 2 1 2 + r + r 1 2 1 2 1 2 ( ) * ( ) = , . ) (g . ) . ) ) = ( ) (g , (g , = (g , r r r r k r r r r x E x x x h x x x x x x h h h
CHƯƠNG 2
HỆ MẬT MÃ DES VÀ HỆ MẬT MÃ IDEA
2.1 Hệ mật mã DES 2.1.1 Mô tả hệ mật 2.1.1 Mô tả hệ mật
DES là thuật toán mã hóa khối, nó xử lý từng khối thông tin của bản rõ có độ dài xác định là 64 bit. Trước khi đi vào 16 chu trình chính, khối dữ liệu cần bảo mật được “bẻ” ra từng khối 64 bit, và từng khối 64 bit này sẽ được lần lượt đưa vào 16 vòng mã hóa DES để thực hiện.
Phương pháp DES mã hóa một bản tin x :
Input: Bản rõ M = m1m2 … m64,là mô ̣t khối 64 bit,
Khóa K = k1k2 . . . k64 (K= 64 bao gồm cả 8 bit chẵn lẻ, viê ̣c thêm bit chẵn lẻ sao cho các đoa ̣n khóa 8 bit có số bit 1 là lẻ).
Output: Bản mã 64 bit C = c1 c2 … c64.
Quá trình mã hóa của DES có thể tóm tắt như sau : Biểu diễn thông điệp nguồn x P bằng dãy 64 bit. Khóa k có 56 bit. Thực hiện mã hóa theo 3 giai đoạn :
1) Với bản rõ x cho trước có độ dài 64 bit, tạo ra một xâu x0 bằng cách hoán vị các bít của x theo phép hoán vị cố định ban đầu IP (Initial Permutation).
Biểu diễn x0 = IP(x) = L0R0,
Trong đó, L0 gồm 32 bit bên trái của x0,R0 gồm 32 bit bên phải của x0.
L0 R0
32 32
X0
Hình 2.1 Biểu diễn dãy 64 bit x thành 2 thành phần L và R
2) Thực hiện 16 vòng lặp từ 64 bit thu được và 56 bit của khóa k (chỉ sử dụng 48 bit của khóa k trong mỗi vòng lặp). 64 bit kết quả thu được qua mỗi vòng lặp sẽ là đầu vào cho vòng lặp sau. Các cặp từ 32 bit Li, Ri (với 1 ≤ i ≤ 16 ) được xác định theo quy tắc sau:
Li = Ri-1
Ri=Li-1 f(Ri-1, Ki)
Trong đó, biểu diễn phép toán XOR trên hai dãy bit, K1, K2,..., K16 là các dãy 48 bit phát sinh từ khóa K cho trước ( Trên thực tế, mỗi khóa Ki được phát sinh bằng cách hoán vị các bit trong khóa K cho trước).
Hình 2.2 Quy trình phát sinh dãy Li Ri từ dãy Li-1 Ri-1 và khóa Ki
3) Áp dụng hoán vị ngược IP-1 đối với dãy bit R16L16, thu được từ y gồm 64 bit. Như vậy, y = IP-1 (R16L16).
2.1.2 Quá trình mã hóa Chia làm 3 giai đoạn Chia làm 3 giai đoạn
2.1.2.1 Giai đoạn 1: Cách tính biến x0
Hoán vị biến x theo phép hoán vị ban đầu IP(X).
x0 = IP(x) = L0 R0
L0: 32 bit đầu
R0: 32 bit cuối Hoán vị khởi tạo IP như sau:
Li-1 Ri-1
Li Ri
f Ki
58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 Bảng 2.1 Hoán vi ̣ IP
Điều này có nghĩa là bit thứ 58 của x là bit đầu tiên của IP(x); bit thứ 50 của x
là bit thứ hai của IP(x); bít ở vị trí thứ 7 là bít cuối của IP(x).
2.1.2.2 Giai đoạn 2
Cách tính LiRi. Để tính LiRi trước hết ta phải xác định hàm f
1) Các biến trong hàm f: có 2 biến vào
+ Biến thứ nhất A là xâu bít độ dài 32, + Biến thứ hai J là xâu bít độ dài 48,
+ Đầu ra của hàm f là một xâu bít độ dài 32. Hàm f thực hiện theo các bước sau:
Bước 1: Xác định biến thứ nhất (biến A):
Xâu bít của Ri-1 được mở rộng thành một xâu bít có độ dài 48 theo một hàm mở rộng cố định E.
32 1 2 3 4 5 4 5 6 7 8 9 8 9 10 11 12 13 12 13 14 15 16 17 16 17 18 19 20 21 20 21 22 23 24 25 24 25 26 27 28 29 28 29 30 31 32 1 Bảng 2.2 Bảng chọn E bít
E(Ri-1) gồm 32 bít của Ri-1 (được hoán vị theo cách cố định) với 16 bít xuất hiện 2 lần. theo bảng E bít ở vị trí thứ 32 là bít đầu tiên của E(Ri-1), ở vị trí thứ 1 là bít thứ 2 và bít cuối của E(Ri-1).
Bước 2: Xác định biến thứ hai (biến J):
Biến j thực chất là phép hoán vị và dịch vòng của xâu bít khóa k
Mười sáu vòng lă ̣p DES cha ̣y cùng thuật toán như nhau nhưng với 16 khóa con khác nhau. Các khóa con đều được sinh ra từ khóa chính của DES bằng mô ̣t thuật toán sinh khóa con.
Hình 2.4 Sơ đồ tạo khóa con
Theo sơ đồ trên việc xác định Ki được thực hiện theo 3 bước sau:
Bước 1: Với khóa k có độ dài 64 bít, cho trước hoán vị các bít của K theo phép hoán vị cố định PC-1. Ta viết: PC – 1 (K) = C0D0,
Khi thực hiện hoán vị K theo PC – 1 thì chỉ còn lại 56 bít. Trong đó C0 là 28 bít đầu và D0 là 28 bít cuối. IP-1 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 Bảng 2.3 Hoán vi ̣ IP-1
Bước 2: Ta tính Ci Di với i thay đổi từ 1 đến 16: Ci = LSi (Ci-1),
Di = LSi (Di-1).
LSi là phép dịch vòng (dịch trái):
+ Với i= 1, 2, 9, 16 dịch trái 1 bước, + Với i còn lại dịch trái 2 bước.
Vòng lặp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Số bít dịch 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
Bảng 2.4. Bảng di ̣ch bit tại các vòng lặp của DES
Bước 3: Sau khi tìm được Ci Di ta thực hiện phép hoán vị PC – 2 thu được Ki. 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 Bảng 2.5 Hoán vi ̣ PC - 2
2) Cách tính hàm f
Hàm f được sử dụng là:
Hình 2.5 Hàm f
Hoạt động trên khối 32 bit và bao gồm bốn giai đoạn:
1. Mở rộng: Sau khi mở rộng Ri-1,32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán hoán vị mở rộng (expansion permutation) với việc nhân đôi một số bit. Giai đoạn này được ký hiệu là E trong sơ đồ.
2. Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con