Giả sử cần phải tìm một số nguyên tố rất lớn. Lấy ngẫu nhiên một số đủ lớn, ta cần phải kiểm tra xem số đó có phải là số nguyên tố không. Phương pháp truyền thống là thử bằng phép chia như sau:
o Chia cho tất cả các số (chỉ cần nguyên tố) nhỏ hơn hoặc bằng căn bậc hai của số đó. Nếu nó không chia hết cho số nào, thì đó là số nguyên tố.
o Chỉ hiệu quả khi xét các số nhỏ.
Có phương pháp khác, mà ta sẽ xét ở đây, sử dụng các phép kiểm tra tính nguyên tố thống kê dựa trên các tính chất
o Mà mọi số nguyên tố phải thỏa mãn
o Nhưng có một số số không nguyên tố, gọi là giả nguyên tố cũng thoả mãn tính chất đó.
Cụ thể là phép kiểm tra dựa trên Định lý Ferma như sau: nếu số n cần kiểm tra tính nguyên tố là số nguyên tố, thì nó sẽ thoã mãn định lý Ferma đối với mọi số a nhỏ hơn nó an-1 mod n = 1. Như vậy, lấy ngẫu nhiên số a và kiểm tra xem nó có tính chất trên
không. Nếu có thì n có thể là số nguyên tố, nếu cần độ tin cậy lớn hơn, thì ta kiểm tra liên tiếp nhiều lần như vậy với các số ngẫu nhiên a được chọn. Sau mỗi lần qua được phép thử, xác suất để n là số nguyên tố lại tăng lên. Chú ý rằng
- nếu bi mod n = 1,
thì b2i mod n = (1)2 mod n = 1 và - nếu bi mod n = n – 1,
thì b2i mod n = (n - 1)2 mod n = (n2 – 2n +1) mod n = 1
Kiểm tra số n có là số nguyên tố không, ta chỉ cần xét n là lẻ, khi đó n-1 là chẵn và biểu diễn nó dạng (n–1)= 2k.q
Khi đó để tính an-1, ta tính aq, sau đó bình phương liên tiếp k lần.
Thuật toán Miller - Rabin
• Thuật toán như sau: TEST (n) is:
1. Find integers k, q, k > 0, q odd, so that (n–1)= 2k.q
2. Select a random integer a, 1<a<n–1
3. if aq mod n = 1 then return (“maybe prime"); 4. for j = 0 to k – 1 do
5. if (a2jq mod n = n-1)
then return(" maybe prime ") 1. return ("composite")
Các xem xét về mặt xác suất
Nếu thuật toán Miller Rabin trả về số “composite” thì số đó chắc chắn không là số nguyên tố, vì khi đó số n và số a < n không thoả mãn định lý Fecma, tức là an-1 mod n ≠ 1.
Ngược lại số đó có thể là số nguyên tố hoặc giả nguyên tố theo nghĩa nó thoả mãn định lý Fecma với số a < n. Người ta chứng minh được rằng xác suất để số giả nguyên tố đó không là số nguyên tố là là ¼. Suy ra nếu lặp t phép thử với các lựa chọn ngẫu nhiên khác nhau của số a, thì khi đó xác suất để số n sau t phép thử là số nguyên tố là: 1- (1/4)t
Ví dụ. Sau 10 bước, t = 10, mà số đã cho n đều có thể là nguyên tố, thì xác suất để n là số nguyên tố là 1 – (1/4)10 > 0.99999.
Phân bố nguyên tố
Định lý về số nguyên tố khẳng định số nguyên tố xuất hiện trung bình sau mỗi khoảng ln n số nguyên (nếu xét các số trong kích thước n). Như vậy bỏ qua số chẵn và các bội số của 5, ta cần kiểm tra 0.4ln n số trong kích thước n để tìm được 1 số nguyên tố. Chẳng hạn n=1024, thì 0.4*ln 1024 = 0.4*10 = 4, nghĩa là trong 1024 số đầu, thì trung
bình cứ 4 số lại có một số nguyên tố. Lưu ý đây chỉ là trung bình, vì có lúc các số nguyên rất gần nhau và có lúc lại rất xa nhau.
III.4.10 Logarit rời rạc
Bài toán ngược của bài toán lũy thừa là tìm logarit rời rạc của một sô modulo p, tức là tìm số nguyên x sao cho
ax = b mod p
Hay còn được viết là x=logab mod p hoặc x=inda,p(b)
Nếu a là căn nguyên tố của p và p là số nguyên tố, thì luôn luôn tồn tại logarit rời rạc, ngược lại thì có thể không
Ví dụ. Tìm x = log2 3 mod 13. Bằng cách thử lần lượt:
20 mod 13 = 1; 21 mod 13 = 2, 22 mod 13 = 4, 23 mod 13 = 8, 24 mod 13 = 3. Vậy log2 3 mod 13 = 4.
Tìm x = log3 4 mod 13 (tìm x: 3x = 4 mod 13). Trong trường hợp này không có lời giải, vì
30 mod 13 = 1; 31 mod 13 = 3; 32 mod 13 = 9; 33 mod 13 = 1= 30 mod 13
Ta nhận thấy, trong khi bài toán lũy thừa là dễ dàng, thì bài toán logarit rời rạc là rất khó. Đây cũng là một cơ sở của mã công khai.
BÀI 3: CÁC HỆ MẬT MÃ CỔ ĐIỂN 3.1. Khái niệm Hệ mật mã
Một hệ mật mã là một bộ 5 (P, C, K,ε , D), thỏa mãn các điều kiện sau đây:
P: là tập hữu hạn các bản tin rõ (Pain Text)
C: là một tập hữu hạn các bản tin đã mã hóa (Cipher Text: bản mã ) K: là không gian khóa, là tập hữu hạn các khóa (Key)
E: Gọi là giải thuật mã hóa (Encryption algorithm) D: Gọi là giải thuật giải mã hóa (Decryption algorithm)
Với mỗi khóa K∈ K, tồn tại một giải thuật mã hóa eK ∈ε và một giải thuật giải mã
∈
K
d D. Trong đó: eK : P→C và dK :C→P là các hàm sao cho dK(eK(x))=x với mọi x∈P.
Hình 3.1. Mô hình hệ mật mã tổng quát
Ghi chú:
m
Z được định nghĩa là tập {0, …, m-1} và hai phép toán + và *. Hai phép toán này tương tự như trên trường số nguyên cộng với phép toán rút gọn kết quả module theo m.
Định nghĩa: Cho a, b là các số nguyên, m là số nguyên dương.
Ta viết a ≡ b mod m nếu (b-a) chia hết cho m. Cụm từ a≡b(modm) được đọc là “a, b đồng dư modulo m”.
3.2. Mã dịch chuyển (shift cipher - Caesar)
Hệ mã hoá nổi tiếng CAESAR là một hệ mã hoá thay thế đơn làm việc trên bảng chữ cái tiếng Anh 26 ký tự (A, B,... , Z).
Trong hệ CAESAR và các hệ tương tự còn lại ta sử dụng các số tự nhiên thay cho các ký tự - đánh số các ký tự trong bảng chữ cái theo thứ tự: A là 0, B là 1,... và Z là 25.
A B C D E F G H I J ... L M N ... W X Y Z 0 1 2 3 4 5 6 7 8 9 ... 11 12 13 ... 22 23 23 25
Các phép toán số học thực hiện theo modul 26. Có nghĩa là 26 đồng nhất với 0, 27 đồng nhất với 1, 28 đồng nhất với 2,... Ví dụ: 2×17 + 5×9 = 79 = 1 + 3×26 = 1
Hệ CAESAR sử dụng thuật toán mã hoá trong đó mỗi ký tự được thay thế bởi một ký tự khác được xác định bằng cách dịch ký tự cần mã hoá sang phải k bước theo modul 26:
Đặt P=C=K=Z26 . Với 0≤K ≤25, định nghĩa:
Ek(x) = (x + k) MOD 26
với x là một ký tự, 0 k 26, MOD là phép chia lấy phần dư.
Thuật toán giải mã tương ứng Dk là lùi lại k bước trong bảng chữ cái theo modul 26:
Dk(y) = (x - k) MOD 26 (x, y ∈ Z26). Không gian khoá của hệ CAESAR bao gồm 26 số 0, 1, 2,... 25.
Ví dụ 1: với k=3, A được thay bằng D, B được thay bằng E,... , W được thay bằng Z,... , X được thay bằng A, Y được thay bằng B, và Z được thay bằng C. Ta có:
Bảng chữ cái gốc
Bảng chữ cái dùng để mã hoá
D E F G H I J K L M N O P Q R S T U V W X Y Z A B C Trong trường hợp này bản rõ “TRY AGIAN” được mã hoá thành “WUBDJDLQ”, bản rõ “HELP ME” được mã hoá thành “KHOSPH”. (Chú ý, các ký tự trống trong bản mã được bỏ đi để đảm bảo tính an toàn).
Thêm một vài ví dụ minh hoạ:
E25(IBM) = HAL, E6(MUPID) = SAVOJ, E3(HELP) = KHOS, E1(HOME) = IPNF, E6(SAVOJ) = E20(SAVOJ) = MUPID. Một số thuộc tính của Ek và Dk là:
Tính giao hoán: Ek và Dk được áp dụng lần lượt, thứ tự không quan trọng. Ví dụ: E3 D7 E6 D11 = E3 E6 D7 D11 = D9 = E17.
Với k bất kỳ thoả mãn 1 k 26 ta có: Dk = E26-k, DkEk = E0 = D0.
Ví dụ 2:
Plain: meet me after the toga party
Cipher: PHHW PH DIWHU WKH WRJD SDUWB
3.3. Mã thay thế (substitution cipher)
Đặt P=C=Z26. Với K gồm tất cả các hoán vị có thể của 26 ký hiệu 0, 1, …, 25. Với mỗi K∈ K định nghĩa:
) ( ) (x K x eK = mod 26 và ) ( ) (y K 1 y
dK = − mod 26 Trong đó K−1 là hoán vị ngược của K.
Hệ mã hoá thay thế là hệ mã hoá trong đó mỗi ký tự của bản rõ được thay thế bằng ký tự khác trong bản mã (có thể là một chữ cái, một số hoặc một ký hiệu). Sự thay thế này làm cho bản rõ trở lên khó hiểu đối với mọi người nhưng người nhận sẽ đảo sự thay thế trong bản mã để được bản rõ.
Có 4 kỹ thuật thay thế sau đây:
Thay thế đơn (A simple substitution cipher): là hệ trong đó một ký tự của bản rõ được thay bằng một ký tự tương ứng trong bản mã. Một ánh xạ 1-1 từ bản rõ tới bản mã được sử dụng để mã hoá toàn bộ thông điệp.
Thay thế đồng âm (A homophonic substitution cipher): giống như hệ thống mã hoá thay thế đơn, ngoại trừ một ký tự của bản rõ có thể được ánh xạ tới một trong số một vài ký tự của bản mã: sơ đồ ánh xạ 1-n (one-to-many). Ví dụ, “A” có thể tương ứng với 5, 13, 25, hoặc 56, “B” có thể tương ứng với 7, 19, 31, hoặc 42, v.v.
Thay thế đa mẫu tự (A polyalphbetic substitution cipher): được tạo nên từ nhiều thuật toán mã hoá thay thế đơn. Ánh xạ 1-1 như trong trường hợp thay thế đơn, nhưng có thể thay đổi trong phạm vi một thông điệp. Ví dụ, có thể có năm thuật toán mã hoá
đơn khác nhau được sử dụng; đặc biệt thuật toán mã hoá đơn được sử dụng thay đổi theo vị trí của mỗi ký tự trong bản rõ.
Thay thế đa sơ đồ (A polygram substitution cipher): là thuật toán trong đó các khối ký tự được mã hoá theo nhóm. Đây là thuật toán tổng quát nhất, cho phép thay thế các nhóm ký tự của văn bản gốc. Ví dụ, “ABA” có thể tương ứng với “RTQ”, “ABB” có thể tương ứng với “SLL”, v.v.
Ví dụ: Khóa K: a b c d e f g h i j k l m n o p q r s t u v w x y z X N Y A H P O G Z Q W B T S F L R C V M U E K J D I Khóa K−1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z d l r y v o h e z x w p t b g f j q n m u s k a c i Cipher: MGZVYZLGHCMHJMXSSFMNHAHYCDLMHA 3.4. Hệ mật mã Affine
Hệ mã hoá AFFINE được xác định bởi hai số nguyên a và b, với điều kiện 0 <= a,b <= 25 (tức a, b thuộc bảng chữ cái tiếng Anh 26 ký tự). Ở đây chúng ta xét hệ làm việc trên các số tự nhiên thay cho các ký tự như đã nói ở phần trên, các phép toán số học được thực hiện theo modul 26.
Đặt P=C=Z26 và đặt K={(a, b)∈ Z26 x Z26: gcd(a, 26)=1}. Với K=(a, b)∈K, định nghĩa:
Ek(x) = (ax + b) MOD 26 và Dk(y) = a-1(y - b) MOD 26
Trong đó (x, y ∈ Z26), a-1 ∈ Z26 là số nghịch đảo của a (muốn tìm a-1 ta sử dụng thuật toán Euclid mở rộng), sao cho aa−1 ≡a−1a≡1(mod26)hay a-1 mod 26 =a
Lưu ý: khi a = 1 thì ta có hệ mã hoá CAESAR.
Ví dụ: nếu a = 3 và b = 5 thì ta có, bảng số tự nhiên tương ứng với bảng chữ cái gốc:
0 1 2 3 4 5 6 7 8 9 10 11 12
13 14 15 16 17 18 19 20 21 22 23 24 25 Bảng số tự nhiên sau khi mã hoá:
5 8 11 14 17 20 23 0 3 6 9 12 15
18 21 24 1 4 7 10 13 16 19 22 25 2 Tương ứng ta có bảng chữ cái gốc:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z và bảng chữ cái dùng để mã hoá:
F I L O R U X A D G J M P S V Y B E H K N Q T W Z C Khi đó bản rõ “NOTEVERYSTEAMBATHISSAUNA” được mã hoá thành “SVKRQREZHKRFPIFKADHHFNSF”.
3.5. Hệ mật mã Vigenere
Đặt m là một số nguyên dương. Định nghĩa P=C=K=(Z26)m. Với một khóa K=(
m
k k
k1, 2,..., ), chúng ta định nghĩa:
và
Trong đó các phép +, - được thực hiện trên trường Z26.
VIGENERE cũng giống như CAESAR, nhưng ở đây khoá được thay đổi theo từng bước. Hình vuông VIGENERE được sử dụng để mã hoá và giải mã.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P Q R S T U V W X Y ) ,..., , ( ) ,..., , ( 1 2 m 1 1 2 2 m m K x x x x k x k x k E = + + + ) ,..., , ( ) ,..., , ( 1 2 m 1 1 2 2 m m K y y y y k y k y k D = − − −
Mỗi cột của hình vuông VIGENERE có thể xem như là một hệ CAESAR, với các khoá 0, 1, 2,... , 25. Để mã hoá thì bản rõ được đọc từ các hàng và khoá được đọc từ các cột.
Ví dụ để mã hóa bản rõ PURPLE với từ khoá CRYPTO, đầu tiên ta tìm điểm giao nhau của hàng P và cột C, ta được R. Cứ như vậy ta được bản mã RLPEES. Ta sẽ thu được bản mã tương tự nếu ta thay đổi vai trò của hàng và cột trong khi mã hoá. Để giải mã bản mã RLPEES vừa mã hoá, ta nhìn vào hàng nào có chứa R trong cột C, theo cách này ta sẽ tìm được P. Và như vậy ta tìm được bản rõ là PURPLE.
Khoá được áp dụng một cách tuần hoàn, tức là nếu bản rõ dài hơn khoá thì khoá lại được bắt đầu lại từ đầu. Ví dụ khoá CRYPTO được áp dụng với bản rõ có độ dài 15 ký tự là CRYPTOCRYPTOCRY.
Ta thấy rằng trong hệ mã hoá VIGENERE, với khoá có độ dài d thì sẽ có 26d khoá hợp lệ. Vì vậy, chỉ cần với giá trị d nhỏ thì phương pháp thám mã vét cạn cũng đòi hỏi khá nhiều thời gian.
3.6. Hệ mật mã Hill
Đặt m là một số nguyên dương. Đặt P=C=(Z26)m và đặt K={m x m là ma trận khả nghịch trên Z26}.
Với K∈K, định nghĩa: Ek(x)=xK mod 26 và Dk(x)=xK-1 mod 26
Trong đó: Trong đó (x, y ∈ Z26), KK-1= Im với Im là ma trận đơn vị.
Ví dụ: với m=2;các phần tử của K là các số nguyên từ 0 đến 25. Hơn nữa K phải là ma trận khả nghịch, tức là tồn tại K-1. Ví dụ: K = 2 5 3 3 và K-1= 20 9 17 15 .
Để mã hoá, bộ d chữ cái của bản rõ được mã hoá cùng nhau. Trong các trường hợp sẽ xét dưới đây ta lấy d=2.
Quá trình mã hoá được thực hiện theo công thức:
C = E(K, P) = KP mod 26
Ví dụ với m=3 ta có công thức:
C1 = (k11P1 + k12P2 + k13P3) mod 26 C2 = (k21P1 + k22P2 + k23P3) mod 26 C3 = (k31P1 + k32P2 + k33P3) mod 26
Trong đó P và C được viết thành các vector cột d chiều. Mỗi bộ d chữ cái của bản rõ được viết thành vector P với các thành phần là các số biểu diễn các ký tự. Và C cũng thể hiện khối d ký tự của bản mã.
Còn khi giải mã ta phải dùng ma trận nghịch đảo K-1: