Đại Học Bách Khoa Hà Nội Viện Điện tử viễn thông ********** BÁO CÁO BÀI TẬP LỚN MÔN Lý thuyết mật mã Đề tài Thuật toán Euclidean và mật mã Affine Giáo viên hướng dẫn Hồ Mạnh Linh Sinh viên MSSV 1 Trị[.]
Trang 1Đại Học Bách Khoa Hà Nội Viện Điện tử viễn thông
**********
BÁO CÁO BÀI TẬP LỚN MÔN
Lý thuyết mật mã
Đề tài: Thuật toán Euclidean và mật mã Affine
Giáo viên hướng dẫn: Hồ Mạnh Linh
1 Trịnh Thị Nga 20162883
3 Nguyễn Thị Oanh 20163104
4 Đinh Ngọc Phú 20163167
5 Nguyễn Đình Phúc 20163188
6 Vương Văn Phúc 20167332
7 Phạm Hồng Minh 20132311
8 Nguyễn Hữu Phúc 20167332
*Hà Nội 2018*
Trang 2NỘI DUNG
Phần I : Cơ Sở Lý Thuyết Chung về giải thuật Euclid 3
1.1 Giới thiệu chung về giải thuật Euclid 3
1.2 Nguyên lý của giải thuật 3
1.3 Xây dựng thuật toán 3
1.4 Ứng dụng 6
Phần II: MẬT MÃ AFFINE 7
2.1 Bài toán về mật mã Affine 7
2.2 Mã hóa trong Affine 8
2.3 Giải mã Affine 8
2.4 Tìm hiểu về thám mã nói chung và thám mã trong mật mã Affine nói riêng 9
2.5 Thực hành thám mã hệ mã Affine trên văn bản tiếng Việt 12
2.6 Phương pháp xác suất 12
Câu hỏi mở rộng 14
Câu 1: Cơ sở toán học của thuật toán Euclide 14
Câu 2: s,t có phải là duy nhất hay không? 16
Câu 3: Chuyện gì xảy ra khi gcd(k,n) ≠ 1? 17
Trang 3Phần I : Cơ Sở Lý Thuyết Chung về giải thuật Euclid
1.1 Giới thiệu chung về giải thuật Euclid
Giải thuật Euclid hay thuật toán Euclid là một giải thuật giúp tìm ước số chung lớn nhất( GCD- Greatest Common Divisor) của hai số một cách hiệu quả Giải thuật này đã được biết đến từ khoảng 300 năm trước công nguyên Nhà toán học
Hy Lạp cổ Euclid đã viết giải thuật này trong cuốn sách nổi tiếng Elements
1.2 Nguyên lý của giải thuật
Ở dạng đơn giản nhất, thuật toán Euclid bắt đầu với cặp số nguyên dương, và tạo
ra một cặp số nguyên dương mới bao gồm số nhỏ hơn và phần phép chia hai số ban đầu
Nguyên lý chính của thuật toán là ước số chung lớn nhất của một cặp số không thay đổi với hiệu của hai số đó Ví dụ như USCLN của 252 và 105 chính bằng ước
số chung lớn nhất của 147( = 252-105) và 105 Vì số lớn hơn trong cặp số bị giảm giá trị nên việc lặp đi lặp lại thuật toán này giúp chúng ta tạo ra những số càng ngày càng nhỏ và đến một lúc nào đó quá trình này sẽ kết thúc- khi cặp số còn lại bằng nhau( nếu quá trình được thực hiện thêm một bước nữa, sẽ có một trong hai
số trở thành số 0)
1.3 Xây dựng thuật toán
Thuật toán Euclid được dựa trên hai định lý:
Định lí 1: gcd( a, 0)= a
Định lí 2: gcd(a, b)= gcd (b, r), ở đây r là thương của phép chia a cho b
Trang 4Quy trình: Giải thuật tìm gcd (a, b):
Bước 1: A=a, B=b
Bước 2: If B=0 return A
Bước 3: r= A mod B
Bước 4: A= B
Bước 5: B= r
Bước 6: Lặp lại bước 2
Ví dụ: Tìm gcd(2740, 1760)
Qua bảng ta có r1=2740,r2=1760, q là giá trị trong phép tính
r1=q r2+ r Từ đó tìm được gcd( 2740, 1760)= 20
Trang 5*Thuật toán Euclid mở rộng:
Cho hai số nguyên a và b, tồn tại hai số nguyên s và t sao cho :
s × a + t × b = gcd (a, b)
Thuật toán Euclid mở rộng có thể tính gcd(a, b) và đồng thời tính được giá trị s
và t Giải thuật được chỉ ra trong hình dưới
Ví dụ: Cho a= 161 và b= 28, tìm gcd(a, b) và giá trị của s và t
Qua bảng ta tìm được gcd(161, 28)= 7, s= -1 và t= 6
Trang 61.4 Ứng dụng
Thuật toán này có rất nhiều ứng dụng lý thuyết và thực tế Một trong những ứng dụng quan trọng nhất của thuật toán Euclid mở rộng đó chính là tìm nghịch đảo modulo:
Nghịch đảo nhân:
Xét số nguyên dương m Xét các số nguyên trên modulo m (từ 0 đến m−1) Với một số nguyên a,ta gọi nghịch đảo modulo m (modular multiplicative inverse) của a là a−1 là số nguyên thoả mãn:
a∗a−1 ≡1(mod m)
Ta cần chú ý rằng không phải lúc nào a cũng tồn tại Ví dụ, với m=4, a=2, ta không thể tìm được a thoả mãn đẳng thức trên
o Có thể chứng minh rằng a luôn luôn tồn tại nếu gcd (a,m)=1
o Số nghịch đảo theo modulo n
o Nếu USCLN (a, n) = 1 thì luôn tồn tại b
(b < n) sao cho:
b = a-1 mod n hay ab ≡ 1 (mod n)
Ta gọi b là số nghịch đảo của a theo modulo n
Ví dụ: 5 × 2 ≡ 1 (mod 9) hay 2 = 5 mod 9
Ngoài ra, nó có thể được dùng để tạo ra gần như tất cả các nhịp điệu âm nhạc truyền thống được sử dụng trong nhiều nền văn hóa khác nhau trên toàn thế giới Nó cũng là một thành phần then chốt trong thuật toán mã hóa RSA, một mật
mã hóa công khai được sử dụng rộng rãi trong thương mại điện tử Thuật toán được áp dụng để giải phương trình Diophantine
Trang 7Phần II: MẬT MÃ AFFINE
Khái niệm: Mật mã Affine là một dạng mật mã thay thế dùng một bảng chữ cái, trong đó mỗi chữ cái được ánh xạ tới một số sau đó mã hóa qua một hàm số toán học đơn giản Một phép dịch Caesar là mật mã Afinne, trong đó các chữ cái được mã hóa với hàm (x+b)mod (26), với b là bước dịch
2.1 Bài toán về mật mã Affine
Phát biểu bài toán về hệ mật mã affine:
• Không gian bản rõ và bản mã của hệ mã là các xâu được hình thành từ một bảng chữ cái A có độ dài là N Khi đó không gian khóa của hệ mã affine được xác định như sau:
• Không gian khóa của hệ mã là các cặp số (a,b) với a,b Z ∈ N và ước chung lớn nhất của a và N là 1
• Hoặc: K = { (a,b): a,b Z ∈ N ,UCLN(a,N) =1}
• Ước chung lớn nhất của 2 số a, b là số nguyên dương d lớn nhất thỏa mãn điều kiện d là ước của cả hai số nguyên a, b Ký hiệu: UCLN( a, b) hoặc GCD( a, b)
• Trong vành Z N với a,b Z ∈ N và a>=1, N>=2 nếu UCLN(a,b)=1 thì ta gọi a và
b là các số nguyên tố cùng nhau
Câu hỏi: Trong bảng chữ cái tiếng anh có 26 chữ( tức N =26), nếu ta đánh số các chữ cái của bảng chữ cái từ 0 đến 25( như hình vẽ dưới) Hỏi ta sẽ có được bao nhiêu chữ số a, b thỏa mãn yêu cầu của bài toán mã affine và không gian khóa của
hệ mã affine với bảng chữ cái trên sẽ bao gồm bao nhiêu bộ số?
Lời giải: • Chữ số a theo yêu cầu của bài toán phải thỏa mãn 2 điều kiện: a∈ Z26
và gcd( a, 26) =1
Các số thỏa mãn yêu cầu a ={1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25} Như vậy có tất cả 12 chữ số a thỏa mãn yêu cầu của bài toán
• Chữ số b chỉ cần thỏa mãn điều kiện b ∈ Z26suy racó 26 chữ số b thỏa mãn yêu cầu bài toán
Trang 8• Có 12 cách chọn chữ số a, 26 cách chọn chữ số b suy ra không gian khóa K của bảng chữ cái tiếng anh trên sẽ gồm 12 x 26 = 312 khóa Đây là con số tương đối nhỏ
2.2 Mã hóa trong Affine
• Để mã hóa người ta đánh số các chữ cái của bảng chữ cái từ 0 →N-1 và tiến hành mã hóa, giải mã từng ký tự
• Hàm mã hóa trong affine có dạng như sau:
EK(x) = (ax +b)mod N với (a,b) ∈ K
Ký tự bản rõ có số thứ tự là x sẽ được chuyển thành ký tự có số ký tự là (ax+b)mod N trong bảng chữ cái A
Với a = 1: ta sẽ được hệ mật mã dịch vòng
Ví dụ: Mã hóa bản rõ WAR bằng hệ mật mã affine với K=(7,10) trong bảng chữ cái tiếng anh có 26 ký tự
Lời giải:
o Đổi các chữ trong xâu WAR thành các chữ số tương ứng: 22, 0, 17
o K=(7,10) tức là ta có a= 7 và b=10, áp dụng vào hàm mã hóa trong affine ta được: Ek(22) = (7×22+10) mod 26 = 8 → I
o Ek(0) = (7×0+10) mod 26 = 10 →K
o Ek(17) = (7×17+10) mod 26 = 25 → Z
Kết quả là : IKZ
2.3 Giải mã Affine
• Với bài toán đã được mã hóa:
EK(x) = (ax +b)mod N với (a,b) ∈ K
chúng ta sẽ cùng nhau đi giải mã bài toán trên
Phân tích:
Giả sử gọi x là số nguyên thể hiện ký tự ghi ở bản rõ và y là số nguyên thể hiện hiện ký tự ghi ở bản mã của ký tự x Và gọi a−1 là nghịch đảo của a theo module N
Ta có: y = (ax +b)mod N ↔ ax = (y-b) mod N ( áp dụng tính chất kết hợp, phân phối và giao hoán )
↔ a−1 ax =a−1 (y-b) mod N ( nhân cả 2 vế vớia−1)
↔x = a−1 (y-b) mod N
• Với a,b,y đã biết ta sẽ tính được x → ký tự tương ứng với vị trí x trong bảng ký tự
Trang 9• Hàm giải mã là: dK(y) =a−1 (y-b) mod 26
Ví dụ: Giải mã thông điệp “FBWGC” bằng mã Affine với a = 7 và b = 7 bằng
bộ chữ cái tiếng Anh (N = 26)
o Chuyển các ký tự thành các số: 5 1 22 6 2
o Ta tính a−1trong module 26 Ta có 7 −1= 15
o Áp dụng công thức giải mã ta được:
dK(5) = 7 −1 (5-7) mod 26 = (-30) mod 26 = (-30+ 2×26) mod 26 = 22 →W
dK(1) = 7 −1 (1-7) mod 26 = (-90) mod 26 = (-90 +4×26) mod 26 = 14 → O
dK(22) = 7 −1 (22-7) mod 26 = 225 mod 26 = 17 → R
dK(6) = 7 −1 (6-7) mod 26 = (-15) mod 26 = (-15+1×26) mod 26 = 11→ L
dK(2) = 7−1 (2-5) mod 26 = (-75) mod 26 = (-75 +3×26) mod 26 = 3 → D
Thông điệp được giải mã là: WORLD
2.4 Tìm hiểu về thám mã nói chung và thám mã trong mật mã Affine nói riêng
Thám mã (Cryptanalysis): là quá trình khôi phục lại bản rõ hoặc khóa khi chỉ
có bản mã tương ứng cho trước (không biết khóa và quy tắc mã/dịch) gọi là thám mã
2.4.1 Đặc trưng cơ bản của bản rõ :
Ở mỗi ngôn ngữ, mỗi loại văn bản có những đặc trưng riêng dựa trên quy luật tần số, quy luật trùng lắp, quy luật văn phong Muốn thám mã, đặc biệt là trên các bản mã truyền thống ta cần nắm được các đặc trưng này
a Tần số (Frequency):
Tần số xuất hiện một ký tự, một nhóm ký tự, một từ hay một vần… trong một văn bản là số lần xuất hiện của ký tự, nhóm ký tự, từ, vần đó trong văn bản đã cho Tần suất (hay còn gọi là tần số tương đối – relative frequency) của một ký tự trong một văn bản là xác suất ký tự đó xuất hiện so với các ký tự khác Nó được tính bằng việc lấy số lần xuất hiện ký tự đó trong văn bản chia cho độ dài văn bản đó
b Sự trùng lặp:
Sự trùng lặp là một quy luật của bất cứ ngôn ngữ tự nhiên nào Đó là đặc trưng thứ hai của ngôn ngữ được thể hiện trên các văn bản thông báo (bản rõ)
c Quy luật hành văn trong văn bản:
Mỗi loại văn bản, nhất là văn bản hành chính thường có những cấu trúc chung Đây cũng là điểm cần chú ý khi thực hiện thám mã
d Quy luật tình huống:
Trang 10Để chống lại việc thám mã của đối phương, các nhà mật mã phải thiết kế các cách thức mã hóa sao cho các thông tin về khóa và và 7 bản rõ không lộ rõ trên bản
mã Tuy nhiên luôn chứa đựng những mâu thuẫn nội tại mà các nhà mã thám dựa vào đó để khai thác, đó là: trình độ về mật mã ở các nước khác nhau là khác nhau, khóa mã không phải luôn được bảo vệ cẩn thận theo quy định
e Tiêu chuẩn bản rõ:
Tiêu chuẩn bản rõ của một loại văn bản là các thống kê thể hiện quy luật tần
số, quy luật trùng lặp của loại văn bản đó
2.4.2 Thám mã các luật mã truyền thống trên văn bản tiếng Việt
a Các bước cơ bản để tiến hành thám mã:
Khi nhận được một số bản mã, các nhà thám mã cần thực hiện một loạt các bước nghiên cứu nhằm khôi phục được bản rõ (hoặc khóa) từ các bản mã nhận được Ta tìm hiểu các bước cơ bản nhất đó là:
Bước 1 Phân loại bản mã
Bước 2 Xác định mã pháp
Bước 3 Thám mã Sau khi đã xác định được mã pháp, ta chuyển qua bước thám
mã với Một trong hai công đoạn như sau:
• Thám mã trực tiếp :Nếu mã pháp thuộc các luật mã truyền thống ta có thể thám
mã trực tiếp bằng thám mã thủ công hay tự động hóa bằng lập trình trên máy tính
• Xây dựng phương pháp thám mã (đối với hệ mã hiện đại)
- Phương pháp phân tích
- Phương pháp dự đoán “Từ phỏng chừng”
b Thám mã các hệ mã cổ điển
Giả thiết chung ở đây là luôn coi người thám mã biết hệ mật mã đang dùng Giả thiết này được gọi là nguyên lý Kerekhoff
Có nhiều kỹ thuật thám mã sử dụng các tính chất thống kê của ngôn ngữ Tức
là một số ký tự có tần suất xuất hiện cao hơn một số ký tự khác Tương tự, một số cặp đôi, cặp ba hoặc một số âm vần xuất hiện nhiều hơn các cặp đôi, cặp ba, hay các âm vần khác Tiếng Việt của chúng ta cũng có những tính chất giống như vậy Công việc đầu tiên khi tiến hành thám mã là xây dựng tiêu chuẩn bản rõ
c Xây dựng tiêu chuẩn bản rõ tiếng việt:
Dựa vào các gợi ý ở phần đặc trưng của bản rõ ta xây dựng tiêu chuẩn bản rõ cho một văn bản tiếng Việt
o Bộ ký tự tiếng Việt
Trang 11Với 29 ký tự trong bảng chữ cái tiếng Việt, một số dấu thanh trên các nguyên
âm tạo nên các ký tự đặc trưng của tiếng Việt, cùng với một số ký hiệu đặc biệt thường xuất hiện trên các văn bản tiếng Việt, trong khuôn khổ luận văn ta tiến hành thám mã trên các văn bản biểu diễn bằng các ký tự chữ thường, ký tự cách trống và hai dấu chấm câu là dấu chấm và dấu phảy Tổng cộng ta có 96 mã ký tự (93 mã chữ thường, ký tự cách trống và hai dấu chấm câu chấm và phảy)
o Xây dựng bảng tần suất đơn, bộ đôi móc xích và tần suất âm vần chuẩn trong tiếng Việt
* Tần suất đơn và tần suất bộ đôi móc xích
Ta thống kê được tần số đơn và tần số bộ đôi móc xích tiếng Việt dựa trên các văn bản thu được trên các tạp chí Theo thống kê, các ký tự: cách trống, n, h, c, t, i,
g lần lượt là những ký tự xuất hiện nhiều nhất trong các văn bản tiếng Việt, 16 những ký tự đặc thù tiếng Việt như ỹ, ỵ và các ký tự f, j, w, z rất ít khi xuất hiện… 2.4.3 Hàm do sự phù hợp fitness trên văn bản tiếng Việt
Ta có hàm đo sự phù hợp do R Spillman đưa ra thực hiện trên các văn bản tiếng Anh (với 26 ký tự chữ cái A Z):
Fitness=
8
SF i DF SDF i j DDF
Trong đó:
SF = (SF[1], SF[2],…, SF[26]) là bảng tần suất đơn tiếng Anh chuẩn (tức là tấn
số đơn tiếng Anh chuẩn đã được tính ra tỷ lệ phần tram)
SDF = (SDF[i , j])i , j= ´1,26 là bảng tần suất bộ đôi móc xích tiếng Anh chuẩn đã được tính như sau:
SDF[i,j] = m i , j
M
Với m i , j là tần số bộ đôi móc xích bộ (i,j) với i,j= 1,2,…26
Còn M là tống dố bộ đôi móc xích
DF = (DF[1], DF[2],…DF[26]) và DDF = (DDF[i , j])i , j= ´1,26 cũng được ký hiệu
và tính toán hoàn toàn tương tự như SF và SDF ở trên, chỉ có khác là chínhc được tính trên một văn bản cụ thế (thường là “bản rõ” có được từ bản mã sau khi giải mã bởi một khoá nào đó)
Với văn bản tiếng Việt được quy định , hàm fitness có thể được điều chỉnh lại như sau:
Trang 128
SF i DF SDF i j DDF
Các giá trị SF[i], DF[i], SDF[i,j] và DDF[i,j] cũng được tính toán tương tự với i,j= 1,2,3,…96
2.5 Thực hành thám mã hệ mã Affine trên văn bản tiếng Việt.
2.5.1 Mã hóa và giải mã
o Mã hóa: EK(x) = (ax + b) mod N
o Giải mã: DK(y) = a^(-1) (y - b) mod N
o Với văn bản tiếng Việt ta có N = 96
2.5.2 Thám mã
* Thám mã thủ công Ta có thể dựa vào quy luật tần suất kết hợp với hàm mã hóa
để tiến hành thám mã
* Thám mã với sự trợ giúp của máy tính
Hệ mã Affine có tổng số khóa không nhiều và hoàn toàn xác định được Vì vậy
ta thám mã bằng cách thử tất cả các khóa có thể
Ta có thuật toán như sau:
Dữ liệu vào: Bản mã
Dữ liệu ra: Bản rõ tiếng Việt và khóa (a, b) tương ứng
Thuật toán: Bắt đầu a = 0; b = 0 ;
FitMax = 0;
Vòng lặp 1 Nếu (ƯSCLN(a, 96) == 1) thì
Vòng lặp 2 Giải mã bản mã với khóa (a, b);
Tính độ phù hợp trên bản rõ vừa thu được (Fitness);
Nếu Fitness>FitMax thì
Gán FitMax=Fitness;
Cập nhật khóa (a, b);
Tăng b lên 1
Về đầu vòng lặp 2 nếu b<96
Tăng a lên 1
Về đầu vòng lặp 1 nếu a<96
Trả về khóa a, b được cập nhật;
Giải mã bản mã với khóa a, b được cập nhật
Kết thúc
Trang 132.6 Phương pháp xác suất
Phương pháp thám mã
Dựa trên tần suất xuất hiện của các chữ
Mã thế trên bảng chữ đơn khong làm thay đổi tần suất xuất hiện tương đối của các chữ Có nghĩa là ta cẫn có bản tần suất xuất hiện của các chữ đơn Điều này được phát hiện bởi các nhà khoa học ai cập từ thế kỉ thứ 9
Becker và Piper đã chia 26 chữ cái thành năm nhóm và chỉ ra xác suất của mỗi nhóm như sau:
E, có xác suất khoảng 0.120
T, A, O, I, N, S, H, R, mỗi chữ cái có xác xuất nằm trong khoảng từ 0.06 đến 0.09
D, L, mỗi chữ cái có xác xuất xấp xỉ 0.04
C, U, M, W, F, G, Y, P, B, mỗi chữ cái có xác xuất nằm trong khoảng từ 0.015 đến 0.023
V, K, J, X, Q, Z, mỗi chữ cái có xác xuất nhỏ hơn 0.01
Ngoài ra, tần suất xuất hiện của dãy hai hay ba chữ cái liên tiếp được sắp theo thứ tự giảm dần như sau : TH, HE, IN, ER … THE, ING, AND, HER…
Thám mã trên bảng chữ đơn: