Với mong muốn tìm hiểu được các phương pháp bảo mật thông tin em đã chọn đề tài TÌM HIỂU VÀ CÀI ĐẶT MỘT SỐ HỆ MẬT MÃ làm đồ án tốt nghiệp.. 1.1.4 Khái niệm hệ mã cổ điển Trong các hệ mã
Trang 1MỤC LỤC
Chương I 7
MỘT SỐ HỆ MÃ CỔ ĐIỂN 7
1.1 Một số khái niệm 7
1.1.1 Khái niệm hệ mật mã 7
1.1.2 Mã hoá và giải mã 7
1.1.3 Quy trình mã hoá và giải mã dữ liệu 7
1.1.4 Khái niệm hệ mã cổ điển 8
1.1.5 Hệ mã công khai 9
1.2 Mã dịch vòng 9
1.2.1 Mô tả 9
1.2.2 Đánh giá độ an toàn 10
1.3 Mã thay thế 10
1.3.1 Mô tả 10
1.3.2 Đánh giá độ an toàn 11
1.4 Mã Affine 11
1.4.1 Mô tả 11
1.4.2 Đánh giá độ an toàn 13
1.5 Mã Vigenere 13
1.5.1 Mô tả 13
1.5.2 Đánh giá độ an toàn 14
1.6 Hệ mã Hill 15
1.6.1 Mô tả 15
1.6.2 Đánh giá độ an toàn 17
1.7 Hệ mã Hoán vị 17
1.7.1 Mô tả 17
1.7.2 Đánh giá độ an toàn 18
1.8 Các hệ mã dòng 18
Mô tả 18
1.9 Sơ lược về thám mã các hệ mã cổ điển 19
1.10 Nhận xét chung về các hệ mật mã cổ điển 20
Chương II 21
HỆ MÃ DES 21
2.1 Mô tả DES 21
2.2 Ví dụ 30
2.3 Sơ lược về thám mã hệ mã DES 34
Chương III 37
MỘT SỐ HỆ MẬT MÃ CÔNG KHAI 37
3.1 Tổng quan 37
3.2 Hệ mã RSA 37
3.2.1 Mô tả sơ lược 38
3.2.2 Tạo khóa 38
3.2.3 Mã hóa 40
3.2.4 Giải mã 40
3.2.5 Ví dụ 41
Trang 23.2.7 Đánh giá độ an toàn 43
3.2.8 Sơ lược về thám mã RSA 45
Tấn công dựa trên thời gian 45
Tấn công lựa chọn thích nghi bản mã 46
3.3 Hệ mã Ba Lô (MHK) 46
3.3.1 Tạo khoá 46
3.3.2 Mã hoá 46
3.3.3 Giải mã 47
3.3.4 Ví dụ 47
Chương IV 49
CÀI ĐẶT 49
4.1 Mã dịch vòng 49
4.2 Mã Affine 50
4.3 Mã Hill 51
4.4 Mã Vigenere 52
4.5 Mã DES 53
4.6 Mã RSA 54
4.7 Mã Balô (MHK) 55
4.8 Truyền file qua mạng 56
KẾT LUẬN 58
Những điều đã làm được 58
Những điều chưa làm được 58
Hướng phát triển đề tài 59
PHỤ LỤC 60
SƠ LƯỢC VỀ TCP/IP 60
TCP/IP là gì? 60
TCP là gì? 60
IP là gì ? 63
Sử dụng TCP/IP trong Net để truyền file 64
MỘT SỐ MÃ NGUỒN CHÍNH 65
Mã Dịch Vòng: 65
Mã Affine: 67
Mã DES 69
Mã RSA: 75
Mã Ba Lô: 77
Truyền file qua mạng 82
TÀI LIỆU THAM KHẢO 85
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 86
Trang 3LỜI NÓI ĐẦU
Từ xưa đến nay thông tin luôn là yếu tố quan trọng trong các hoạt động của đời sống con người Trong thời đại ngày nay, các phương thức truyền đạt thông tin ngày càng đa dạng và phát triển Với sự ra đời của máy tính và mạng máy tính, việc trao đổi thông tin đã trở lên dễ dàng hơn, nhanh chóng hơn, đa dạng hơn Nhưng kèm theo đó là các nguy cơ xâm phậm thông tin cũng ngày càng tăng Nắm bắt được thông tin nhiều khi mang ý nghĩa quyết định, sống còn đặc biệt trong các lĩnh vực: kinh tế, chính trị, an ninh, quốc phòng…Vì vậy việc bảo mật thông tin đã, đang và sẽ là vấn đề được đặt ra rất cấp bách Để giải quyết vấn đề đó các hệ mật mã đã ra đời Từ các hệ mật mã sơ khải cổ điển như: Hệ mã Dịch Vòng, hệ mã Hill, hệ mã Affine,…, cho đến các hệ mật mã hiện đại, phúc tạp như hệ mã DES Các hệ mật mã công khai như hệ mã RSA, hệ mã Ba Lô Nhưng đi kèm với sự ra đời và phát triển của các hệ mật mã là các phương pháp phá khoá các hệ mật mã đó Cuộc chiến giữa bảo mật thông tin và xâm phạm thông tin vẫn luôn diễn ra một cách thầm lặng nhưng vô cùng gay gắt
Với mong muốn tìm hiểu được các phương pháp bảo mật thông tin em đã chọn đề tài TÌM HIỂU VÀ CÀI ĐẶT MỘT SỐ HỆ MẬT MÃ làm đồ án tốt nghiệp Tuy đã có nhiều cố gắng trong việc xây dựng đề tài nhưng do còn hạn chế về mặt thời gian cũng như kiến thức và kinh nghiệm thực tế nên đề tài không tránh khỏi những thiếu sót Vì vậy em rất mong được sự chỉ bảo, đóng góp ý kiến của các thầy cô giáo trong để đề tài của em ngày càng hoàn thiện hơn
Trang 4Chương I MỘT SỐ HỆ MÃ CỔ ĐIỂN
1.1 Một số khái niệm
1.1.1 Khái niệm hệ mật mã
Một hệ mật mã là một bộ 5 (P,C,K,E,D) thoả mãn các điều kiện sau:
P: Là một tập hợp hữu hạn các bản rõ, nó được gọi là không gian bản rõ
C: Là tập hữu hạn các bản mã, nó được gọi là không gian bản mã Mỗi phần tử của C có thể nhận được bằng cách áp dụng phép mã hoá Ek lên một phần tử của
P, với k K
K: Là tập hữu hạn các khoá hay còn gọi là không gian khoá Đối với mỗi phần tử
k của K được gọi là một khoá Số lượng của không gian khoá phải đủ lớn để “kẻ địch” không có đủ thời gian để thử mọi khoá có thể ( phương pháp vét cạn) Đối với mỗi k K có một quy tắc mã ek: PC và một quy tắc giải mã tương ứng dk D Mỗi ek : P C và dk: CP là những hàm mà:
Dk (ek(x))=x với mọi bản rõ x P
Trang 5Quy trình thực hiện như sau:
Bộ phận quản lý khoá thực hiện lập khoá mã hoá (Ke) và khoá giải mã (Kd)
Dữ liệu gốc được mã hoá nhờ khoá mã hoá Vấn đề ở đây là quản lý khóa như thế nào để cho việc mã hoá và giải mã tương đối đơn giản và đảm bảo tuyệt đối
bí mật cho khoá giải mã
1.1.4 Khái niệm hệ mã cổ điển
Trong các hệ mã cổ điển, người ta sử dụng cùng một khoá ở hai phía dĩ nhiên hạn chế sự an toàn và phổ biến của phương pháp đối xứng, đồng thời cũng là điểm yếu, bởi vì chỉ cần một bên để lộ khoá thì bí mật sẽ bị mất
Hệ mã cổ điển là loại mã được thực hiện thông qua hàm f có tính thuận nghịch, sử dụng f để mã hoá, biết f có thể suy ra hàm giải mã f-1
Quy trình mã hoá dữ liệu
Trang 61.1.5 Hệ mã công khai
Mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan
hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật)
Giả sử khoá cho MDV là K = 11 và bản rõ là :wewillmeetatmidnight
Đổi chuỗi ra số theo tứ tự trong bảng chữ cái ta có:
22 4 22 8 11 11 12 4 4 19
Cộng với khoá và moduloo 26:
Giả sử P = C = K = Z26 với 0 k 25 , Định nghĩa:
eK(x) = x +K mod 26
và dK(x) = y -K mod 26
(x,y Z26)
Trang 7Giả sử P = C = K = Z26 K chứa mọi hoán vị có thể của 26 kí hiệu
Để có được bản mã người ta thay đổi một ký hiệu trong bản rõ bằng một
ký hiệu nào đó Trên thực tế, mã thay thế có thể lấy cả P và C đều là bộ chữ cái tiếng Anh ( 26 chữ cái ) Ta dùng Z26 trong mã dịch vòng vì các phép mã hoá và giải mã đều là các phép toán đại số trong mã thay thế, có thể xem mã hoá và giải
mã như các hoán vị của các ký tự Ta có thể định nghĩa mã thay thế dưới dạng toán học như sau
Trang 8Sau đây là một ví dụ về phép hoán vị ngẫu nhiên tạo nên một hàm mã hoá ( cũng như trước các ký hiệu của bản rõ được kí hiệu bằng chữ in thường còn các ký hiệu của bản mã được kí hiệu bằng chữ in hoa)
Như vậy e(a)=X, e(b)= N,… Hàm giải mã là phép hoán vị ngược Điều này được thực hiện bằng cách viết hàng thứ hai lên trước rồi sắp xếp theo thứ tự chữ cái Ta nhận được:
Bởi vậy d(A)= d, d(B)= l,…
1.3.2 Đánh giá độ an toàn
Mỗi khoá của mã thay thế là một phép hoán vị của 26 kí tự Số các hoán
vị này là 26!, lớn hơn 4x1026 là một số rất lớn Bởi vậy, phép tìm khoá vét cạn không thể thực hiện được, thậm chí bằng máy tính Tuy nhiên mã hoán vị lại dễ dàng bị thám bằng các phương pháp khác
1.4 Mã Affine
1.4.1 Mô tả
Mã Affine là một trường hợp đặc biệt của mã thay thế chỉ gồm có 26 trong
số 26! các hoán vị của 26 phần tử Mã Affine được định nghĩa như sau:
Trang 9Giả sử P = C = K = Z26 và giả sử
P={(a,b) Z26 x Z26: USCLN(a,26)=1} Với k=(a,b)K, ta định nghĩa:
ax + b y (mod 26) phải có nghiệm x duy nhất Đồng dư thức này tương đương với:
ax y – b (mod 26)
Vì y thay đổi trên Z26 nên y-b cũng thay đổi trên Z26 Bởi vậy, ta chỉ cần nghiên cứu phương trình đồng dư:
ax y (mod 26) (y Z26)
Ta biết rằng, phương trình này có một nghiệm duy nhất đối với mỗi y khi
và chỉ khi UCLN (a,26) =1 (ở đây hàm UCLN là ước chung lớn nhất của các biến của nó) Trước tiên ta giả sử rằng UCLN(a,26) = d > 1 Khi đó, đồng dư thức ax 0 (mod 26) sẽ có ít nhất hai nghiệm phân biệt trong Z26 là x = 0 và x = 26/d Trong trường hợp này, e(x) = ax + b mod 26 không phải là một hàm đơn ánh và bởi vậy nó không thể là hàm mã hoá hợp lệ
Trang 10Cho m là một số nguyên dương cố định nào đó Giả sử P = C = K = (Z26)m
Với khoá K = ( k1, k1,…,km) ta xác định:
ek(x1, x2, …, xm) = (x1+k1, x2+k2,…, xm+km)
và
dk(y1, y2,…, ym) = (y1-k1, y2-k2, …, ym-km) Trong đó tất cả các phép toán đều được thực hiện trên Z26
Để minh hoạ ta hãy mã hoá bản rõ “hot” Trước tiên ta biến đổi các chữ h, o, t
thành các thặng dư theo modulo 26 Ta được các số tương ứng là 7,14,19 bây giờ sẽ mã hoá:
7 x 7+3 mod 26 = 52 mod 26 = 0
7 x 14 + 3 mod 26 = 101 mod 26 = 23
7 x 19 + 3 mod 26 = 136 mod 26 = 6 Bởi vậy 3 kí hiệu của bản mã là 0, 23, 6 tương ứng với xâu kí tự AXG
Thực hiện giải mã theo hàm giả mã ta thu được bản mã “hot”
1.5 Mã Vigenere
1.5.1 Mô tả
Trong cả hai hệ mã dịch vòng và mã thay thế ( một khi khoá đã được chọn ) mỗi ký tự sẽ được ánh xạ vào một ký tự duy nhất Vì lý do đó, các hệ mật còn được gọi là các hệ thay thế đơn biểu Còn đây là một hệ mật không phải là bộ chữ đơn, mật mã này lấy tên của Blaise de Vigenere sống vào thế kỷ XVI Hệ
mã Vigenere được định nghĩa như sau:
Trang 11Sử dụng phép tương ứng A <=> 0, B<=> 1,…, Z<=>25 mô tả ở trên ta có thể gắn cho mỗi khoá K với một chuỗi kí tự có độ dài m được gọi là từ khoá Mật
mã Vigenere sẽ đồng thời mã hoá m kí tự
Ta thấy rằng các từ khoá có thể với độ dài m trong mật mã Vigenere là
26m, bởi vậy, thậm chí với các giá trị m khá nhỏ, phương pháp tìm kiếm vét cạn cũng yêu cầu thời gian khá lớn Ví dụ nếu m =5 thì không gian khoá cũng có kích
Trang 12Cho m là một số nguyên dương cố định Cho P=C=(Z26)m và cho K= {các ma trận khả nghịch cấp m x m trên Z26
Với một khoá kK ta xác định
ek(x) = xk
và dk(y) = yk-1
Tất cả các phép toán đều được thực hiện trong Z26
thước lớn hơn 1,1 x 1027 Lượng khoá này đủ lớn để ngăn ngừa việc tìm khoá bằng tay (chứ không phải dùng máy tính)
Trong hệ mật Vigenere có từ khoá độ dài m, mỗi kí tự có thể được ánh xạ vào trong m ký tự có thể có Một hệ mật như vậy được gọi là hệ mật thay thế đa biểu Nói chung, việc thám mã hệ mật thay thế đa biểu sẽ khó khăn hơn so với thám mã hệ đơn biểu
1.6 Hệ mã Hill
1.6.1 Mô tả
Mật mã Hill cũng là một hệ mật thay thế đa biểu do Lester S.Hill đưa ra
năm 1929 Giả sử m là một số nguyên dương P=C=(Z26)m Ý tưởng ở đây là lấy
m tổ hợp tuyến tính của m ký tự trong một phần tử của bản rõ để tạo ra m ký tự ở một phần tử của bản mã Hệ mã Hill được định nghĩa như sau:
Nhận xét: để giải mã được thì ma trận thức K phải có nghịch đảo K có nghịch đảo khi và chỉ khi định thức của nó khác 0 Tuy nhiên, điều quan trọng cần nhớ là ta đang làm việc trên Z26 Kết quả tương ứng là ma trận K có nghịch đảo theo modulo 26 khi và chỉ khi UCLN( det K, 26) = 1
Sau đây sẽ chứng minh ngắn gọn kết quả này
Trước tiên, giả sử rằng UCLN (det K, 26) =1 Khi đó det K có nghịch đảo trong Z26 Với 1 ≤ i ≤ m, 1 ≤ j ≤ m, định nghĩa Kj i ma trận thu được từ K bằng cách loại bỏ hàng thứ i và cột thứ j Và định nghĩa ma trận K* có phần tử (i,j) của
nó nhận giá trị (-1) det Kj i (K* được gọi là ma trận bù đại số của K) Khi đó có thể chứng tỏ rằng:
Trang 13Ngược lại K có nghịch đảo K-1 theo quy tắc nhân của định thức
1= det I = det (KK-1) = det K det K-1Bởi vậy det K có nghịch đảo trong Z26
Trang 14Cho m là một số nguyên dương xác định nào đó Cho P=C= (Z26)m và cho K gồm tất cả các hoán vị của {1,…,m} Đối với một khoá (tức là một hoán vị)
π
-1 (m)) Trong đó π-1 là hoán vị ngược của hoán vị π
Và ta thu được bản rõ là “July”
1.6.2 Đánh giá độ an toàn
Do không gian khoá nhỏ hơn so với hệ mã Vigenere nên độ an toàn của hệ
mã Hill nhỏ hơn so với hệ mã Vigenere
1.7 Hệ mã Hoán vị
1.7.1 Mô tả
Tất cả các hệ mật mã thảo luận ở trên đều ít nhiều xoay quanh phép thay thế: Các ký tự của bản rõ được thay thế bằng các ký tự khác trong bản mã Ý tưởng của Mã Hoán Vị là giữ các ký tự của bản rõ không thay đổi nhưng sẽ thay đổi vị trí của chúng bằng cách sắp sếp lại các ký tự này Thật ra thì sự phân biệt giữa Mã Hoán Vị và mã Thay Thế đã được Giovani Porta chỉ ra từ năm 1563 Định nghĩa hình thức cho Mã Hoán vị như sau:
Ví dụ:
Giả sử m = 6 và các phép hoán vị (π ) như sau:
Khi đó phép hoán vị ngược π-1 sẽ là:
Trang 15Bây giờ giả sử ta có bản rõ
Shesellsseashellsbytheseashore
Trước tiên ta nhóm bản rõ thành 6 nhóm các kí tự
Shesel lsseas hellsb ythese ashore
Bây giờ mỗi nhóm 6 chữ cái được sắp xếp lại theo phép hoán vị π ta có:
EESLSH SALSES LSHBLE HSYEET HRAEOS Như vậy bản mã thu được là: EESLSHSALSESLSHBLEHSYEET HRAEOS Quá trinh giải mã làm tương tự bằng phép hoán vị đảo π-1
1.7.2 Đánh giá độ an toàn
Không giống với Mã Thay Thế ở đây không có các phép toán đại số nào cần thực hiện khi mã hoá và giải mã nên thích hợp hơn cả là dùng các ký tự mà không dùng các thặng dư theo modulo 26 Thực tế mã hoán vị là trường hợp đặc
biệt của mật mã Hill
y = y1y2 = ez1(x1) ez2(x1)
Mã dòng hoạt động như sau: Giả sử kK là khoá và x = x1x2… là xâu bản
rõ Hàm fi được dùng để tạo zi (zi là phần tử thứ i của dòng khoá), trong đó fi là một hàm của khoá k và i-1 là ký tự đầu tiên của bản rõ:
zi = fi(k, x1, …, xi-1)
Trang 16Phần tử zi của dòng khoá được dùng để mã xi tạo ra yi = eiz(xi) Bởi vậy, để
mã hoá xâu bản rõ x1x2… ta phải tính liên tiếp : z1, y1,z2, y2…
Việc giải mã xâu bản mã: y1y2… có thể được thực hiện bằng cắch tính liên tiếp: z1, x1, z2, x2…
Dưới đây là định nghĩa toán học của mật mã dòng
Mật mã dòng là một bộ (P, C, K, L, F, E, D) thoả mãn được các điều kiện sau:
P: Là một tập hữu hạn các bản rõ có thể
C: Là một tập hữu hạn các bản mã có thể
K: Là tập hữu hạn các khoá có thể ( không gian khoá)
L: Là tập hữu hạn các bộ chữ của dòng khoá
F: (f1, f2,…) là bộ tạo khoá dòng Trong đó, với mỗi i ≥ 1
fi: K x Pi-1 L Với mỗi z L có một quy tắc mã ez E và một quy tắc giải mã tương ứng dz
D ez: P C và dz : C P là các hàm thoả mãn dz(ez(x)) = x với mọi bản rõ
x P
1.9 Sơ lược về thám mã các hệ mã cổ điển
Trong phần này ta sẽ bàn tới một vài kỹ thuật thám mã Giả thiết chung ở đây là luôn coi đối phương đã biết hệ mật đang dùng Giả thiết này được gọi là nguyên lý Kerekhoff Dĩ nhiên, nếu đối phương không biết hệ mật được dùng thì nhiệm vụ của anh ta sẽ khó khăn hơn Tuy nhiên, ta không muốn độ mật của một
hệ mã lại dựa trên một giả thiết không chắc chắn là đối phương không biết hệ mật được sử dụng Do đó, mục tiêu trong thiết kế một hệ mật là phải đạt được độ mật dưới giả thiết Kerekhoff
Trước tiên ta phân biệt các mức độ tấn công khác nhau vào các hệ mật Sau đó là một số loại thông dụng nhất:
- Chỉ có bản mã: Thám mã chỉ có xâu bản mã y
- Chỉ có bản mã y và một bản rõ x
Trang 17- Bản rõ đã biết được lựa chọn: Một người tấn công có thể truy nhập được vào hệ thống và chọn một bản rõ x,sau đó mã hoá thành bản mã y tương ứng
- Bản mã được lựa chọn: Người tấn công có thể truy nhập được vào hệ thống và chọn một bản mã y, sau đó giải mã được thành bản rõ x tương ứng
Trong mỗi trường hợp trên, điều đối tượng cần phải xác định chính là khoá
đã sử dụng Rõ ràng 4 mức tấn công trên đã được liệt kê theo độ tăng của sức mạnh tấn công Nhận thấy rằng, tấn công theo bản mã được lựa chọn là thích hợp với các hệ mật khoá công khai
Phương pháp chung
Kỹ thuật thám mã sử dụng phương pháp chung là dùng các kỹ thuật thống
kê để tìm tần suất xuất hiện các ký tự và các cụm ký tự
Đối với các bản mã cần phá, cũng thực hiện phép thống kê tương ứng rồi lần lượt thử gán các ký hiệu có tần suất xuất hiện tương đương với nhau Bằng cách như vậy có thể làm giảm bớt số lần thử
1.10 Nhận xét chung về các hệ mật mã cổ điển
- Tính bảo mật kém
- Khoá có thể có nhiều dạng khác nhau nhưng chỉ có một khoá chung duy nhất cho cả người mã hoá và người giải mã
- Thuật toán nói chung phải giữ bí mật: ek(x) dk(y) = ek-1(x)
- Không thể dùng vào mục đích xác thực, không dùng được cho chữ kí điện tử
Trang 18
Chương II
HỆ MÃ DES
2.1 Mô tả DES
Thuật toán tiến hành theo 3 giai đoạn:
Với bản rõ cho trước x, một xâu bít x0 sẽ được xây dựng 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 Ta viết: x0= IP(x) =
L0R0, trong đó L0 gồm 32 bít đầu và R0 là 32 bít cuối
Sau đó tính toán 16 lần lặp theo một hàm xác định Ta sẽ tính LiRi, 1≤i
≤16 theo qui tắc sau:
Li = Ri-1
Ri = Li-1 f(Ri-1,Ki) Trong đó kí hiệu phép hoặc loại trừ của hai xâu bít (cộng theo modulo 2) F là một hàm mà ta sẽ mô tả ở sau, còn K1, K2, …, K16 là các xâu bít độ dài
48 được tính như hàm của khoá K (trên thực tế mỗi Ki là một phép chọn hoán vị bít trong K) K1,…, k16 sẽ tạo thành bảng khoá Một vòng của phép mã hoá được
mô tả trên hình 1
Áp dụng phép hoán vị ngược IP-1 cho xâu bít R16L16, ta thu được bản mã
y Tức là y = IP-1 (R16L16) Hãy chú ý thứ tự đã đảo của L16 và R16
Trang 20Hàm f có hai biến vào: biến thứ nhất A là xâu bít độ dài 32, biến thứ hai J
là một xâu bít độ dài 48 Đầu ra của f là một xâu bít độ dài 32 Các bước sau được thực hiện:
1 Biến thứ nhất A được mở rộng thành một xâu bít độ dài 48 theo một hàm mở rộng cố định E E(A) gồm 32 bít của A (được hoán vị theo cách cố định) với 16 bít xuất hiện hai lần
2 Tính E(A) J và viết kết quả thành một chuỗi 8 xâu 6 bít=
B1B2B3B4B5B6B7B8.
3 Bước tiếp theo dùng 8 bảng S1, S2, …, S8 (được gọi là các hộp S) Với mỗi Si là một mảng 4 x 16 cố định có các hàng là các số nguyên từ 0 đến 15 Với xâu bít có độ dài 6 (Kí hiệu Bi = b1b2b3b4b5b6), ta tính
Si(Bi) như sau: Hai bít b1b6 xác định biểu diễn nhị phân của hàng r của
Si (0 ≤ r ≤ 3) và bốn bít (b2b3b4b5) xác định biểu diễn nhị phân của cột
c của Sj ( 0 c 15 ) Khi đó Si(Bi) sẽ xác định phần tử Si(r,c); Phần tử này viết dưới dạng nhị phân là một xâu bít có độ dài 4 ( Bởi vậy, mỗi
Si có thể được coi là một hàm mã mà đầu vào là một xâu bít có độ dài
2 và một xâu bít có độ dài 4, còn đầu ra là một xâu bít có độ dài 4) Bằng cách tương tự tính các Ci = Si(Bi), 1 i 8
4 Xâu bít C= C1C2…C8 có độ dài 32 được hoán vị theo phép hoán vị cố định P Xâu kết quả là P(C) được xác định là f(A,J)
Hàm f được mô tả trong hình 2 Chủ yếu nó gồm một phép thế (Sử dụng hôp S), tiếp sau đó là phép hoán vị P 16 phép lặp của f sẽ tạo nên
một hệ mật như đã nêu
Trang 25Cuối cùng ta cần mô tả việc tính táon bảng khoá từ khoá K Trên thực tế,
K là một xâu bít độ dài 64, trong đó 56 bít là khoá và 8 bít để kiểm tra tính chẵn
lẻ nhắm phát hiện sai Các bít ở các vị trí 8,16,…, 64 được xác định sao cho mỗi byte chứa một số lẻ các số “1” Bởi vậy một sai sót đơn lẻ có thể phát hiện được trong mỗi nhóm 8 bít Các bít kiểm tra bị bỏ qua trong quá trình tính toán bảng khoá
Với một khoá K 64 bít cho trước, ta loại bỏ các bít kiểm tra tính chẵn lẻ và hoán vị các bít còn lại của K theo phép hoán vị cố định PC -1 Ta viết:
Trang 26Hình 3 Khoá của DES
Các hoán vị PC-1 và PC-2 được dùng trong bảng khoá là:
LS16 LS16
C16 D16 PC-2 K16
Trang 272.2 Ví dụ
Sau đây là một ví dụ về phép mã DES Giả sử ta mã bản rõ (ở dạng mã hexa - hệ đếm 16):
0 1 2 3 4 5 6 7 8 9 A B C D E F Bằng cách dùng khoá:
1 2 3 4 5 7 7 9 9 B B C D F F 1 Khoá ở dạng nhị phân không chứa các bít kiểm tra là:
Trang 28E(R0) = 011110100001010101010101011110100001010101010101
K1 = 000110110000001011101111111111000111000001110010 E(R0) K1 = 011000010001011110111010100001100110010100100111 S-box outputs 01011100100000101011010110010111
L2 = R1 = 11101111010010100110010101000100
E(R1) = 011101011110101001010100001100001010101000001001
K2 = 011110011010111011011001110110111100100111100101 E(R1) K2 = 000011000100010010001101111010110110001111101100 S-box outputs 11111000110100000011101010101110
L3 = R2 = 11001100000000010111011100001001
E(R2) = 111001011000000000000010101110101110100001010011
K3 = 010101011111110010001010010000101100111110011001 E(R2) K3 = 101100000111110010001000111110000010011111001010 S-box outputs 00100111000100001110000101101111
L4 =R3 = 10100010010111000000101111110100
E(R3) =01010000010000101111100000000101011111111010100
K4 = 011100101010110111010110110110110011010100011101 E(R3) K4 = 001000101110111100101110110111100100101010110100 S-box outputs 00100001111011011001111100111010
L5 = R4 = 01110111001000100000000001000101
E(R4) = 101110101110100100000100000000000000001000001010
K5 = 011111001110110000000111111010110101001110101000 E(R4) K5 = 110001100000010100000011111010110101000110100010 S-box outputs 01010000110010000011000111101011
L6 = R5 = 10001010010011111010011000110111
Trang 29E(R5) = 110001010100001001011111110100001100000110101111
K6 = 011000111010010100111110010100000111101100101111 E(R5) K6 =101001101110011101100001100000001011101010000000 S-box outputs 01000001111100110100110000111101
L7 = R6 = 11101001011001111100110101101001
E(R6) = 111101010010101100001111111001011010101101010011
K7 = 111011001000010010110111111101100001100010111100 E(R6) K7 = 000110011010111110111000000100111011001111101111 S- box outputs 00010000011101010100000010101101
L8 = R7 = 00000110010010101011101000010000
E(R7) = 000000001100001001010101010111110100000010100000
K8 = 111101111000101000111010110000010011101111111011 E(R7) K8 = 111101110100100001101111100111100111101101011011 S-box outputs 01101100000110000111110010101110
L9 = R8 = 11010101011010010100101110010000
E(R8) = 011010101010101101010010101001010111110010100001
K9 = 111000001101101111101011111011011110011110000001 E(R8) K9 = 100010100111000010111001010010001001101100100000 S-box outputs 00010001000011000101011101110111
L10 = R9 = 00100100011111001100011001111010
E(R9) = 000100001000001111111001011000001100001111110100
K10 = 101100011111001101000111101110100100011001001111 E(R9) K10 = 101000010111000010111110110110101000010110111011 S-box outputs 11011010000001000101001001110101
L11 = R10 = 10110111110101011101011110110010
Trang 30E(R10) = 010110101111111010101011111010101111110110100101
K11 = 001000010101111111010011110111101101001110000110 E(R10) K11 = 011110111010000101111000001101000010111000100011 S-box outputs 01110011000001011101000100000001
L12 = R11 = 11000101011110000011110001111000
E(R11) = 011000001010101111110000000111111000001111110001
K12 = 011101010111000111110101100101000110011111101001 E(R11) K12 = 000101011101101000000101100010111110010000011000 S-box outputs 01110011000001011101000100000001
L13 = R12 = 01110101101111010001100001011000
E(R12) = 001110101011110111111010100011110000001011110000
K13 = 100101111100010111010001111110101011101001000001 E(R12) K13 = 101011010111100000101011011101011011100010110001 Sbox outputs 10011010110100011000101101001111
L14 = R13 = 00011000110000110001010101011010
E(R13) = 000011110001011000000110100010101010101011110100
K13 = 010111110100001110110111111100101110011100111010 E(R13) K14 = 010100000101010110110001011110000100110111001110 S-box outputs 01100100011110011001101011110001
L15 = R14 = 11000010100011001001011000001101
E(R14) = 111000000101010001011001010010101100000001011011
K15 = 101111111001000110001101001111010011111100001010 E(R14) K15 = 010111111100010111010100011101111111111101010001 S-box outputs 10110010111010001000110100111100
R15 = 01000011010000100011001000110100
Trang 31E(R15) = 001000000110101000000100000110100100000110101000
K16 = 110010110011110110001011000011100001011111110101 E(R15) K16 = 111010110101011110001111000101000101011001011101 S-box outputs 10100111100000110010010000101001
R16 = 00001010010011001101100110010101
Cuối cùng áp dụng IP-1 vào L16, R16 ta nhận được bản mã hexa là:
8 5 E 8 1 3 5 4 0 F 0 A B 4 0 5
2.3 Sơ lược về thám mã hệ mã DES
Trên thực tế đối với bất cứ phương pháp mã hóa nào, kiểu tấn công cơ bản
và đơn giản nhất là tấn công kiểu duyệt toàn bộ: thử lần lượt tất cả các khóa có thể cho đến khi tìm ra khóa đúng Độ dài của khóa sẽ xác định số lượng phép thử tối đa cần thực hiện và do đó thể hiện tính khả thi của phương pháp Trong trường hợp của DES, nghi ngờ về độ an toàn của nó đã được đặt ra ngay từ khi
nó chưa trở thành tiêu chuẩn Người ta cho rằng chính NSA đã ủng hộ (nếu không muốn nói là thuyết phục) IBM giảm độ dài khóa từ 128 bit xuống 64 bit
và tiếp tục xuống 56 bit Điều này dẫn đến suy đoán rằng NSA đã có hệ thống tính toán đủ mạnh để phá vỡ khóa 56 bit ngay từ những năm 1970
Hệ thống phá mã DES của Hiệp hội EFF (Electronic Frontier Foundation, một tổ chức hoạt động cho quyền công dân trên Internet) được xây dựng với ngân sách 250000 đô la Mỹ Hệ thống bao gồm 1536 bộ vi xử lý thiết kế riêng và
có khả năng tấn công kiểu duyệt toàn bộ khóa DES trong vòng vài ngày
Trong giới nghiên cứu, nhiều đề xuất về các hệ thống phá mã DES được
đề ra Năm 1977, Diffie và Hellman dự thảo một hệ thống có giá khoảng 20 triệu
đô la Mỹ và có khả năng phá khóa DES trong 1 ngày Năm 1993, Wiener dự thảo một hệ thống khác có khả năng phá mã trong vòng 7 giờ với giá 1 triệu đô la Mỹ Những điểm yếu của DES được thực sự chứng minh vào cuối những năm 1990 Vào năm 1997, công ty bảo mật RSA đã tài trợ một chuỗi cuộc thi với giải
Trang 32DES Đội chiến thắng trong cuộc thi này là dự án DESCHALL với những người dẫn đầu bao gồm Rocke Verser, Matt Curtin và Justin Dolske Họ đã sử dụng hàng nghìn máy tính nối mạng để phá mã Khả năng phá mã DES được chứng minh thêm lần nữa vào năm 1998 khi tổ chức Electronic Frontier Foundation (EFF), một tổ chức hoạt động cho quyền công dân trên Internet, xây dựng một hệ thống chuyên biệt để phá mã với giá thành 250000 đô la Mỹ (Xem thêm: hệ thống phá mã DES của EFF) Động cơ thúc đẩy EFF trong hành động này là nhằm chứng minh DES có thể bị phá vỡ trên lý thuyết cũng như trên thực tế:
"Nhiều người không tin vào chân lý cho đến khi họ nhìn thấy sự việc bằng chính mắt mình Xây dựng một bộ máy có thể phá khóa DES trong vòng vài ngày là cách duy nhất chứng tỏ với mọi người rằng họ không thể đảm bảo an ninh thông tin dựa vào DES." Hệ thống này đã tìm được khóa DES bằng phương pháp duyệt toàn bộ trong thời gian hơn 2 ngày; trong khi vào khoảng thời gian đó, một chưởng lý của Bộ Tư pháp Hoa Kỳ (DOJ) vẫn tuyên bố rằng DES là không thể bị phá vỡ
Các kiểu tấn công khác hiệu quả hơn duyệt toàn bộ
Hiện nay có 3 kiểu tấn công có khả năng phá vỡ DES (với đủ 16 chu trình)
với độ phức tạp thấp hơn duyệt toàn bộ: phá mã vi sai (differential cryptanalysis
- DC), phá mã tuyến tính (linear cryptanalysis - LC) và phá mã Davies (Davies'
attack) Tuy nhiên các dạng tấn công này chưa thực hiện được trong thực thế
Phá mã vi sai được Eli Biham và Adi Shamir tìm ra vào cuối những năm
1980 mặc dù nó đã được IBM và NSA biết đến trước đó Để phá mã DES với đủ 16 chu trình, phá mã vi sai cần đến 247 văn bản rõ DES đã được thiết kế để chống lại tấn công dạng này
Phá mã tuyến tính được tìm ra bởi Mitsuru Matsui và nó đòi hỏi 243 văn bản rõ (Matsui, 1993) Phương pháp này đã được Matsui thực hiện và là thực nghiệm phá mã đầu tiên được công bố Không có bằng chứng chứng
tỏ DES có khả năng chống lại tấn công dạng này Một phương pháp tổng
quát hơn, phá mã tuyến tính đa chiều (multiple linear cryptanalysis), được
Trang 33Kaliski và Robshaw nêu ra vào năm 1994, Biryukov và cộng sự tiếp tục cải tiến vào năm 2004 Nghiên cứu của họ cho thấy mô phỏng tuyến tính
đa chiều có thể sử dụng để giảm độ phức tạp của quá trình phá mã tới 4 lần (chỉ còn 241 văn bản rõ) Kết quả tương tự cũng có thể đạt được với kiểu tấn công tuyến tính kết hợp với lựa chọn bản rõ (Knudsen and Mathiassen, 2000) Junod (2001) đã thực hiện một số thực nghiệm để tìm
ra độ phức tạp thực tế của phá mã tuyến tính và thấy rằng quá trình thực tế nhanh hơn dự đoán: 239×241
Phá mã Davies: trong khi phá mã vi sai và phá mã tuyến tính là các kỹ thuật phá mã tổng quát, có thể áp dụng cho các thuật toán khác nhau, phá
mã Davies là một kỹ thuật dành riêng cho DES Dạng tấn công này được
đề xuất lần đầu bởi Davies vào cuối những năm 1980 và cải tiến bởi Biham và Biryukov (1997) Dạng tấn công mạnh nhất đòi hỏi 250 văn bản
rõ, độ phức tạp là 250 và có tỷ lệ thành công là 51%
Ngoài ra còn có những kiểu tấn công dựa trên bản thu gọn của DES - DES với ít hơn 16 chu trình Những nghiên cứu này cho chúng ta biết số lượng chu trình cần có và ranh giới an toàn của hệ thống Năm 1994, Langford và Hellman
đề xuất phá mã vi sai - tuyến tính (differential-linear cryptanalysis) kết hợp giữa
phá mã vi sai và tuyến tính
Trang 34Chương III MỘT SỐ HỆ MẬT MÃ CÔNG KHAI
3.1 Tổng quan
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương đương Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong khi khóa công khai được phổ biến công khai Trong 2 khóa, một dùng để
mã hóa và khóa còn lại dùng để giải mã Điều quan trọng đối với hệ thống là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải
3.2 Hệ mã RSA
Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công khai
Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong
Trang 35việc sử dụng khóa công cộng RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn
3.2.1 Mô tả sơ lược
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân) Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được
Ta có thể mô phỏng trực quan một hệ mật mã khoá công khai như sau : Bob muốn gửi cho Alice một thông tin mật mà Bob muốn duy nhất Alice có thể đọc được Để làm được điều này, Alice gửi cho Bob một chiếc hộp có khóa đã
mở sẵn và giữ lại chìa khóa Bob nhận chiếc hộp, cho vào đó một tờ giấy viết thư bình thường và khóa lại (như loại khoá thông thường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả Bob cũng không thể mở lại được-không đọc lại hay sửa thông tin trong thư được nữa) Sau đó Bob gửi chiếc hộp lại cho Alice Alice mở hộp với chìa khóa của mình và đọc thông tin trong thư Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật
3.2.2 Tạo khóa
Giả sử Alice và Bob cần trao đổi thông tin bí mật thông qua một kênh không an toàn (ví dụ như Internet) Với thuật toán RSA, Alice đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:
1 Chọn 2 số nguyên tố lớn và với , lựa chọn ngẫu nhiên và độc lập
2 Tính:
Trang 36 Các số nguyên tố thường được chọn bằng phương pháp thử xác suất
Các bước 4 và 5 có thể được thực hiện bằng giải thuật Euclid mở rộng (xem thêm: số học modulo)
Bước 5 có thể viết cách khác: Tìm số tự nhiên sao cho
cũng là số tự nhiên Khi đó sử dụng giá trị
Từ bước 3, PKCS#1 v2.1 sử dụng thay cho
Một dạng khác của khóa bí mật bao gồm:
Trang 37Dạng này cho phép thực hiện giải mã và ký nhanh hơn với việc sử dụng
định lý số dư Trung Quốc (tiếng Anh: Chinese Remainder Theorem - CRT) Ở
dạng này, tất cả thành phần của khóa bí mật phải được giữ bí mật
Alice gửi khóa công khai cho Bob, và giữ bí mật khóa cá nhân của mình Ở
đây, p và q giữ vai trò rất quan trọng Chúng là các phân tố của n và cho phép tính d khi biết e Nếu không sử dụng dạng sau của khóa bí mật (dạng CRT) thì p
và q sẽ được xóa ngay sau khi thực hiện xong quá trình tạo khóa
3.2.3 Mã hóa
Giả sử Bob muốn gửi đoạn thông tin M cho Alice Đầu tiên Bob chuyển M thành một số m < n theo một hàm có thể đảo ngược (từ m có thể xác định lại M)
được thỏa thuận trước Quá trình này được mô tả ở phần #Chuyển đổi văn bản rõ
Lúc này Bob có m và biết n cũng như e do Alice gửi Bob sẽ tính c là bản
mã hóa của m theo công thức:
Hàm trên có thể tính dễ dàng sử dụng phương pháp tính hàm mũ (theo
môđun) bằng (thuật toán bình phương và nhân) Cuối cùng Bob gửi c cho Alice
3.2.4 Giải mã
Alice nhận c từ Bob và biết khóa bí mật d Alice có thể tìm được m từ c
theo công thức sau:
Biết m, Alice tìm lại M theo phương pháp đã thỏa thuận trước Quá trình
giải mã hoạt động vì ta có
Trang 38
Do ed ≡ 1 (mod p-1) và ed ≡ 1 (mod q-1), (theo Định lý Fermat nhỏ) nên:
Sau đây là một ví dụ với những số cụ thể Ở đây chúng ta sử dụng những
số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị đủ lớn
Lấy:
n = pq = 3233 — môđun (công bố công khai)
Khóa công khai là cặp (e, n) Khóa bí mật là d Hàm mã hóa là:
encrypt(m) = m e mod n = m17 mod 3233
với m là văn bản rõ Hàm giải mã là:
Trang 39decrypt(c) = c d mod n = c2753 mod 3233
Trước khi thực hiện mã hóa, ta phải thực hiện việc chuyển đổi văn bản rõ
(chuyển đổi từ M sang m) sao cho không có giá trị nào của M tạo ra văn bản mã
không an toàn Nếu không có quá trình này, RSA sẽ gặp phải một số vấn đề sau:
Nếu m = 0 hoặc m = 1 sẽ tạo ra các bản mã có giá trị là 0 và 1 tương ứng
Khi mã hóa với số mũ nhỏ (chẳng hạn e = 3) và m cũng có giá trị nhỏ, giá trị
m e cũng nhận giá trị nhỏ (so với n) Như vậy phép môđun không có tác dụng và có thể dễ dàng tìm được m bằng cách khai căn bậc e của c (bỏ
qua môđun)
RSA là phương pháp mã hóa xác định (không có thành phần ngẫu nhiên) nên kẻ tấn công có thể thực hiện tấn công lựa chọn bản rõ bằng cách tạo ra một bảng tra giữa bản rõ và bản mã Khi gặp một bản mã, kẻ tấn công sử dụng bảng tra để tìm ra bản rõ tương ứng
Trên thực tế, ta thường gặp 2 vấn đề đầu khi gửi các bản tin ASCII ngắn
với m là nhóm vài ký tự ASCII Một đoạn tin chỉ có 1 ký tự NUL sẽ được gán giá trị m = 0 và cho ra bản mã là 0 bất kể giá trị của e và N Tương tự, một ký tự
Trang 40ASCII khác, SOH, có giá trị 1 sẽ luôn cho ra bản mã là 1 Với các hệ thống dùng
giá trị e nhỏ thì tất cả ký tự ASCII đều cho kết quả mã hóa không an toàn vì giá trị lớn nhất của m chỉ là 255 và 2553 nhỏ hơn giá trị n chấp nhận được Những
bản mã này sẽ dễ dàng bị phá mã
Để tránh gặp phải những vấn đề trên, RSA trên thực tế thường bao gồm
một hình thức chuyển đổi ngẫu nhiên hóa m trước khi mã hóa Quá trình chuyển đổi này phải đảm bảo rằng m không rơi vào các giá trị không an toàn Sau khi
chuyển đổi, mỗi bản rõ khi mã hóa sẽ cho ra một trong số khả năng trong tập hợp bản mã Điều này làm giảm tính khả thi của phương pháp tấn công lựa chọn bản
rõ (một bản rõ sẽ có thể tương ứng với nhiều bản mã tuỳ thuộc vào cách chuyển đổi)
Một số tiêu chuẩn, chẳng hạn như PKCS, đã được thiết kế để chuyển đổi bản rõ trước khi mã hóa bằng RSA Các phương pháp chuyển đổi này bổ sung thêm bít vào M Các phương pháp chuyển đổi cần được thiết kế cẩn thận để tránh những dạng tấn công phức tạp tận dụng khả năng biết trước được cấu trúc của bản rõ Phiên bản ban đầu của PKCS dùng một phương pháp đặc ứng (ad-hoc)
mà về sau được biết là không an toàn trước tấn công lựa chọn bản rõ thích ứng (adaptive chosen ciphertext attack) Các phương pháp chuyển đổi hiện đại sử dụng các kỹ thuật như chuyển đổi mã hóa bất đối xứng tối ưu (Optimal Asymmetric Encryption Padding - OAEP) để chống lại tấn công dạng này Tiêu chuẩn PKCS còn được bổ sung các tính năng khác để đảm bảo an toàn cho chữ
ký RSA (Probabilistic Signature Scheme for RSA - RSA-PSS)
3.2.7 Đánh giá độ an toàn
Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA Nếu 2 bài toán trên là khó (không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực hiện được việc phá mã toàn bộ đối với RSA Phá mã một phần phải được ngăn chặn bằng các phương pháp chuyển đổi bản rõ an toàn