2.1. Mã hóa công khai và các thuật toán trong mã hóa công khai 2.1.1. Mã hóa công khai[1]
Mã hóa công khai là m t dộ ạng mã hóa cho phép ngườ ử ụng trao đổi s d i các thông tin m t mà không c n phậ ầ ải trao đổi các khóa 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 (Public key) và khóa riêng (Private key) hay khóa bí m t (sccret ậ key).
2.1.1.1. Khái ni m chung ệ
Thu t ng mã hóa bậ ữ ất đố ứng thường được dùng đồng nghĩa với x i mã hó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ã bất đố ứi x ng không có tính ch t công khai và bí mấ ật như đề ậ c p ở trên mà c hai khóa (cho vi c mã hóa và giả ệ ải mã) đều c n ph i gi bí m ầ ả ữ ật.
Trong mã hóa công khai, khóa riêng c 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 (ho c r t khó) tìm ra khóa bí ể ặ ấ m t n u ch ậ ế ỉbiết khóa công khai.
H ệthống mật mã 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 mã được.
34
T o ch ký s : Cho phép ki m tra m t s ạ ữ ố ể ộ ố văn bản xem nó có phải đượ ạc t o v i mộớ t khóa bí mật nào đó hay không.
Thỏa thu n khóa: Cho phép thi t lậ ế ập khóa để trao đổi thông tin m t ậ giữa hai bên.
Thông thường, các k thu t mỹ ậ ật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa đố ứng nhưng do những ưu điểi x m nổi bật nên chúng đượ ử ục s d ng nhi u. ề
Thu t toán mã hóa bậ ất đối x ng s d ng hai khóa: khóa công khai (hay ứ ử ụ khóa công c ng) và khóa bí m t (hay khóa riêng). 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 và 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 biết khóa công khai đều có th ể mã hóa nhưng chỉ có người biết khóa riêng (bí m t) m i có th ậ ớ ểgiải mã được.
Ta có th mô ph ng tr c quan m t h ể ỏ ự ộ ệ thống mã hóa khóa công khai như sau: Bình mu n g i cho An m t thông tin m t mà Bình mu n ch cho duy nhố ử ộ ậ ố ỉ ất An có th ể đọc được. Để làm được điều này, An g i cho Bình m t chi c h p kín ử ộ ế ộ có ổ khóa đã mở ẵ s n và gi l i chìa khóa. Bình nh n chi c hữ ạ ậ ế ộp, cho vào đó một lá thư viết bình thường và b m khóa l i (loấ ạ ại khóa thông thường ch b m là ỉ ấ khóa, sau khi s p ch t là khóa l i ngay c ậ ố ạ ả Bình cũng không mở được, không đọc l i hay sạ ửa thông tin trong thư được nữa). Sau đó bình gửi chi c h p cho An qua ế ộ đường bưu điện thông thường ho c nh ặ ờ người nào đó mang hộ. Nhân viên bưu điện hay người đưa hộ dù muốn cũng không thể ở ộp xem thư. Chỉ m h khi chiếc hộp đến tay An, An có chìa khóa riêng m i m ớ ở được hộp và đọc được thông tin
35
trong thư. Trong ví dụ này, chi c h p vế ộ ới ổ khóa m An gở ửi cho Bình đóng vai trò khóa công khai, chi c chìa khóa riêng c a An chính là khóa bí m ế ủ ật.
2.1.1.2. Sơ đồ ạ t o và chuy n giao khóa công khai ể
Các h ệ thống mã hóa khóa công khai thông thường được th c hi n v i 3 ự ệ ớ bước cơ bản. Bước th nhứ ất là công đoạn sinh khóa, m t c p khóa public key và ộ ặ private key có quan h v m t toán hệ ề ặ ọc đượ ạc t o ra d a vào các bào toán c a lự ử ật 1 chiều. Bước hai là bước mã hóa s d ng khóa công khai (public key), khóa ử ụ này có th ể được chuyển giao trên môi trường m . Quá trình giở ải mã là bước cu i ố cùng s d ng khóa riêng bí m t (private key). ử ụ ậ
Các bước th c hi n nhự ệ ư sau:
A ch n m t s ọ ộ ố ngẫu nhiên lớn đẻ sinh c p khóa, khóa công khai E ặ và khóa bí m t riêng D. ậ
A g i E khóa công khai (public key) cho B, gi ử – ữ D – khóa riêng (private key) cho mình.
Dùng khóa công khai để mã hóa, dùng khóa bí mật đểgiải mã.
B nhận được khóa công khai E. B có thông điệp g c P, dùng E mã ố hóa E(P) = C, C là thông điệp mã hóa g i cho A. ử
A nhận được C, dùng D giải mã D(C) = P: đượ ại thông điệc l p g c. ố
36
Hình 2.1: Chuy n giao khóa công khai ể
Chỉ riêng có A (có D) m i gi i mã ớ ả được.
Ai có E đều mã hóa được.
D dùng để ải E, Nhưng nế gi u ch bi t E thì hỉ ế ầu như chắc ch n là không th ắ ể tìm được D.
2.1.1.3. H tạ ầng cơ sở khóa công khai[1]
Trong mật mã h c, h tọ ạ ầng cơ sở khóa công khai PKI (Public Key Infrastructure) là một cơ chếhoạt động để cho bên th ứ 3 (thường là cơ quan cấp chứng th c s ) cung c p và xác thự ố ấ ực định danh các bên tham gia vào quá trình trao đổi thông tin. Cơ chế này cũng cho phép gán cho mỗi ngườ ử ụi s d ng trong h ệ thống m t c p khóa công khai/khóa bí mộ ặ ật. Các quá trình này thường được thực hi n b i m t ph n mệ ở ộ ầ ềm ph i h p khác tố ợ ại các địa điểm của người dùng.
37
Khóa công khai thường được phân ph i trong ch ng thố ứ ực điện t . Khái ử niệm h tạ ầng khóa công khai thường được dùng để ch toàn b h th ng bao g m ỉ ộ ệ ố ồ cơ quan cấp ch ng th c s (Cứ ự ố A) cùng các cơ chế liên quan đồng th i v i toàn b ờ ớ ộ việc s d ng các thu t toán mử ụ ậ ật mã hóa công khai trong trao đổi thông tin. Tuy nhiên phần sau được bao g m không hoàn toàn chính xác bồ ởi vì cơ chế trong PKI không nh t thi t s d ng các thu t toán mã hóa khóa công khai. PKI cho ấ ế ử ụ ậ phép người tham gia xác th c l n nhau và s d ng thông tin t các ch ng thự ẫ ử ụ ừ ứ ực khóa công khai để mã hóa và giải mã thông tin trong quá trình trao đổi. Thông thường, PKI bao g m ph n m m máy khách (client), ph n m m máy ch (sever), ồ ầ ề ầ ề ủ phần cứng (như thẻ thông minh) và các quy trình hoạt động liên quan. Ngườ ửi s dụng cũng có thể ký các văn bản điệ ử ớn t v i khóa bí m t c a mình và mậ ủ ọi người đều có th ki m tra v i khóa công khai c a h . ể ể ớ ủ ọ
PKI cho phép các giao dịch điệ ử đượn t c diễn ra đảm bảo tính bí m t, toàn ậ v n và xác th c l n nhau mà không cẹ ự ẫ ần trao đổi các thông tin m t t ậ ừ trước. Hầu h t các h thông PKI quy mô doanh nghiế ệ ệp đều d a trên các chu i ch ng thự ỗ ứ ực để xác th c các th c th . Ch ng th c cự ự ể ứ ự ủa người dùng s ẽ được một cơ quan cấp chứng th c s cự ố ấp, đến lượt nhà cung c p này l i có ch ng thấ ạ ứ ực được m t nhà ộ cung c p khác cấ ở ấp cao hơn tạo ra… (hình cây). Hệ th ng s bao g m nhi u ố ẽ ồ ề máy tính thu c nhi u t ộ ề ổ chức khác nhau v i các gói ph n mớ ầ ềm tương thích từ nhi u ngu n khác nhau. Vì v y, các tiêu chu n là y u t r t quan trề ồ ậ ẩ ế ố ấ ọng đố ới v i hoạt động c a PKI. H u h t các tiêu chu n v PKI hi n tủ ầ ế ẩ ề ệ ại được so n th o b i ạ ả ở nhóm làm vi c PKIX c u IETF. ệ ả
Các h ệ thống PKI doanh nghiệp, thường đượ ổc t chức theo mô hình danh b ạ trong đó khóa công khai của mỗi ngườ dùng được lưu trữi (bên trong các chứng th c s ) kèm v i các thông tin cá nhân (s điự ố ớ ố ện thoại, email, địa chỉ, nơi
38
làm việc…). Hiện nay công ngh danh b tiên ti n nhệ ạ ế ất là LDAP và định dạng chứng th c ph bi n nhự ổ ế ất X.509 cũng được phát tri n t ể ử mô hình trước đó của LDAP là X.500.
M c tiêu chính c a PKI là cung cụ ủ ấp khóa công khai và xác định m i liên ố h ệ giữa khóa và định dạng người dùng. Nh vờ ậy người dùng có th s dể ử ụng trong mộ ố ứt s ng dụng như:
Mã hóa email hoặc xác thực người g i email (OpenPGP hay ử S/MIME).
Mã hóa ho c nh n thặ ậ ực văn bản (các tiêu chu n ch ký XML ho c ẩ ữ ặ mã hóa XML khi văn bản được th hiể ện dướ ại d ng XML).
Xác thực người dùng ng dứ ụng (đăng nhập b ng th thông minh ằ ẻ nhận thực người dùng trong SSL).
Các giao th c truy n thông an toàn dùng k ứ ề ỹ thuật Bootstrapping (IKE,SSL): trao đổi khóa b ng khóa bằ ất đố ứi x ng, còn mã hóa b ng ằ khóa đố ứi x ng.
2.1.2. Các thuật toán trong mã hóa công khai 2.1.2.1. Thuật toán Rsa[1]
Thuật toán này được Revest, Shamir và Adleman mô t lả ần đầu tiên năm 1977 tại trường đạ ọi h c MIT.
Gi s An và Bình 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ư qua internet). Với thuật toán RSA, An đầu tiên c n t o ra cho ầ ạ mình m t c p khóa công khai E và khóa bí mộ ặ ật D theo các bước sau:
Mô t thu t toán ả ậ
Chọn 2 s nguyên tốố khá l n (>1024 bit) P và Q, Q # Q ớ
39
L y tích sấ ố: N = P*Q, N được g i là modulo mã hóa. ọ
Chọn E sao cho: 1 < E < P*Q, E và (P 1)*(Q 1) là 2 s nguyên – – ố t cùng nhau (v y E ph i ch n là 1 s lố ậ ả ọ ố ẻ). E được g i là s ọ ố mũ mã hóa.
Tính s D sao cho tích s DE = 1[mod(P 1)(Q ố ố – – 1)] có nghĩa là tích s DE chia cho tích s (P 1)(Q 1) có s ố ố – – ố dư là 1, hay là DE – 1 chia h t cho (P 1)(Q ế – – 1). Ta dùng phương pháp thử ầ d n các s ố nguyên X sao cho có được: D = [X(P 1)(Q 1) + 1]/E là s – – ố nguyên. D được g i là s ọ ố mũ giải mã.
Khóa công khai An gửi cho Bình (qua đường thông tin b t k là cấ ỳ ặp s [N,E] ố
Khóa bí m t An gi cho mình là c p s [N,D] ậ ữ ặ ố
Mã Hóa
Bình nhận được khóa công khai c a An Gủ ửi. Bình có thông điệp gốc (PlainText) T (thông điệp đã được s hóa, T th c ra là m t con s ố ự ộ ố d ng nh ạ ị phân được đổi thành s ố thập phân nào đó) cần g i cho An. ử
Bình mã hóa b ng phép toán: TE mod N = C; T = plainText, C = ằ ciphertext. Phép toán “lũy thừa theo modul” có nghĩa là lấy T lũy thừa E r i chia cho N l y s ồ ấ ố dư.
Bình gửi thông điệp mã hóa C cho An.
Giải Mã
An nhận được C.
An gi i mã b ng phép toán: CD mod N = T. ả ằ
Như vậ ở đây ta cầy n ph i chả ứng minh đượ ằc r ng:
(TE mod N)D mod N = T.
40
Điều này đã được ch ng minh b ng cách ng dứ ằ ứ ụng Định Lý Trung Hoa v ề s ố dư (The Chinese Remainders Theorem) một thành t u r t cao v s h c, trong ự ấ ề ố ọ toán h c C ọ ổ Trung Hoa thường được gọi là bài toán Hàn Tín điểm binh (Hàn Tín là m t v ộ ị tướng nhà Ti n Hán, vào kho ng th k ề ả ế ỷ II trước Công Nguyên. Thực chất vi c tìm khóa riêng D chính là tìm mệ ột phép toán ngược trong vành module N c a E. ủ
M t s ộ ố lưu ý:
Các s nguyên t ố ố thường được ch n bọ ằng phương pháp thử ngẫu nhiên.
Các bước 3 và 4 có th ể được th c hi n b ng gi i thu t Euclid m ự ệ ằ ả ậ ở r ng. ộ
M t s d ng khác cộ ố ạ ủa khóa bí m t: ậ
P và Q, hai s nguyên t ố ốchọn ban đầu,
D mod (P – 1) và D mod (Q – 1) (thường được ký hi u là DmP1 và ệ DmQ1),
(1/Q) mod P (thường được g i là iQmP) ọ
D ng này cho phép th c hi n gi i mã và lạ ự ệ ả ập mã nhanh hơn với việc s dử ụng định lý s ố dư Trung Hoa (Chinese Remainders Theorem) d ng 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. An g i khóa công khai cho Bình và gi bí m t khóa riêng cậ ử ữ ậ ủa mình.
Ở đây, P và Q giữ vai trò rát quan tr ng. Chúng là các nhân t c a ọ ố ủ N và h ỗtrợkhả năng tính D khi biết E.
41
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 quá trình t o khóa, ch ạ ỉgiữ ạ l i N, E, D.
Ví d :ụ Ở đây chỉ minh họa phương pháp nên ta chọn p, q khá bé cho r ễtính toán.
Chọn 2 s nguyên t : p = 61 = (111101)2 ; q = 53 = (11011)2 (hủy ố ố p và q ngay sau khi t o khóa), ạ
N = p*q = 3233 Modulo –
E = 17 s – ố mũ mã hóa (công bố công khai)
Khóa công khai A gửi đi cho B: (3233, 17)
D = 2753 s – ố mũ giải mã (A gi riêng) ữ
Thông điệp g c (s hóa thành s d ng nh phân rố ố ố ạ ị ồi đổi ra s th p ố ậ phân): 123
B dùng khóa công khai (n, e) mã hóa: 12317 mod 3233 = 855
Thông điệp mã hóa gửi đi: 855
A dùng khóa riêng (n, d) gi i mã: 8552753 mod 3233 = 123 ả
Cài đặt thu t toánậ [2]
T o khóa ạ
o private static void CreateKey(out int e, out int n, out int d) {
int p = 61, q = 53;
n = p * q;
//Tính Phi(n)=(p-1)*(q- 1)
int phiN = (p - 1) * (q - 1);
42
//Tính e là m t s ộ ố ngẫu nhiên có giá tr 1< e < phi(n) và là s ị ố nguyên t cùng nhau v i Phi(n) ố ớ
do {
Random rd = new Random();
e = rd.Next(2, phiN);
}
while (!CheckNguyenToCungNhau(e, phiN));
//Tính d
int i = 2;
d = 0;
while (((1 + i * phiN) % e) != 0 || d <= 0) {
i++;
d = (1 + i * phiN) / e;
}}
Trong đó gía ị ả tr tr ra: e - blic key, d - private key, n - tham s pu ố
o private static bool CheckNguyenToCungNhau(int a, int b) {
if (b == 0)
return (a == 1);
43
return CheckNguyenToCungNhau(b, a % b);
}
Hàm kiểm tra xem đây có phải là 2 s nguyên t cùng nhau ố ố
Mã hóa
d a theo public key d // ự
o private static BigInteger Encryt(int m, int e, int n) {
return BigInteger.Pow(m, e) % n;
}
Trong đó tham số đầ u vào là tin nh n m, e là public key, n là ắ tham s e và n là 2 bi n sinh ra t ố. ế ừ phầ ạn t o key
Giá tr ra là 1 s mã hóa ịtrả ố
Giải mã d a theo private key e ự
o private static BigInteger Decryt(BigInteger c, int d, int n) {
return BigInteger.Pow(c, d) % n;
}
Trong đó tham số đầ u vào là: s mã hóa c, d là private key, n là ố tham s ố
Giá tr là là tin nhịtrả ắn ban đầu
44 2.1.2.2. Thuật toán Merkle Hellman– [1]
H mã x p ba lô Merkle - Hellman là m t trong h mệ ế ộ ệ ật mã công khai ra đời s m nhớ ất, do Ralph Merklr và Martin Hellman phát minh năm 1978. Về ặ m t ý tưởng h m t mã này xây dệ ậ ựng đơn giản hơn nhiều so với RSA nhưng nó nhanh chóng b v . ị đổ ỡ
Mô t ả
Merkle Hellman là m t h m– ộ ệ ật mã bất đố ứng, có nghĩa là khi giao dịi x ch c n có hai khóa: m t khóa công khai và mầ ộ ột khóa riêng. Hơn nữa, cũng giống RSA, hai khóa đó đều là m t chi u vộ ề ới nghĩa là khóa công khai chỉ dùng để mã hóa còn khóa riêng ch ỉ dùng để giải mã. Cũng vì vậy nó không th s dể ử ụng để nhận d ng qua vi c ký tên b ng m t mã. ạ ệ ằ ậ
V m t toán h c, h Merkle Hellman d a trên bài toán t ng t p h p con ề ặ ọ ệ – ự ổ ậ ợ subset sum problem (một trường hợp riêng trong bài toán ―cái ba lô‖ (knapsack) quen thu c trong toán h c ròi r c). Bài toán có th phát biộ ọ ạ ể ểu như sau: Cho một t p h p các con s A và m t con s b, hãy tìm m t t p h p con c a A c ng lậ ợ ố ộ ố ộ ậ ợ ủ ộ ại bằng b. Trong trường h p tợ ổng quát, bài toán đó được bi t là có tính NP ế – đủ (NP complete) (khó gi i bả ậc NP). Tuy nhiên trong trường h p riêng khi t p hợ ậ ợp các con s ố (được gọi là cái ba lô) là ―siêu tăng‖ (superincreasing) với nghĩa là có thể ắ s p x p thành mế ột dãy để cho mỗi ph n t c a t p hầ ử ủ ậ ợp đề ớn hơn tổ l ng các phầ ử đi trướn t c nó, thì bài toán có th giể ải được ―dễ dàng‖ trong thời gian đa thức b ng mằ ột thuật toán tham lam đơn giản.
T o khóa ạ
Trong h m t mã Merkle ệ ậ – Hellman, các khóa là các ―ba lô‖. Khóa công khai là một ―ba lô đầy‖ còn khóa riêng là một ―ba lô vơi‖ (hard anh easy
45
knapsacks) k t h p v i hai ph n t c a phép c ng, m t s nhân và m t modulo, ế ợ ớ ầ ử ủ ộ ộ ố ộ các con s ố này dùng đểbiến đổi các ba lô siêu tăng thành ba lô đầy. Nh ng con ữ s ố đó cũng được dùng để biến đổ ổi t ng các t p con cậ ủa ba lô đầy thành t ng các ổ t p con cậ ủa ba lô vơi, tính toán thực hiện được trong thời gian đa thức.
Mã hóa
Để mã hóa một thông điệp, m t t p con c ộ ậ ả ba lô đầy được ch n ra b ng ọ ằ cách so sánh nó v i m t t p hớ ộ ậ ợp các bit (plaintext) có độ dài bằng độ dài chìa khóa và làm cho m i thành phỗ ần ứng v i 1 s trong plaintext m t ph n t trong ớ ố ộ ầ ử t p con mà b qua thành phậ ỏ ần ứng v i s 0 trong plaintext. Các ph n t c a tớ ố ầ ử ủ ập con đố ộ c ng l i v i nhau, t ng s ạ ớ ổ ố thu được cho ta ciphertext.
Giải mã
Việc gi i mã th c hiả ự ện được b i vì s ở ố nhân và modulo đã dùng để biến đổi ba lô vơi siêu tăng thành khóa công khai, cũng có thể dùng để biến đổi con s ố đại di n cho ciphertext thành t ng các ph n t ệ ổ ầ ử tương ứng của ba lô siêu tăng.
Như vậy, dùng m t thuộ ật toán tham lam đơn giản, ba lô vơi giải ra được b ng ằ cách dùng O(n) phép toán s hố ọc để giải mã.
Phương pháp toán học
T o khóa ạ
Để mã hóa một thông điệp n bit, ta ch n một dãy siêu tăng: ọ w = (w1, w2, w3, …., wn)
C a n s t nhiên khác 0. L y ng u nhiên m t s nguyên q, sao cho: ủ ố ự ấ ẫ ộ ố q >
46
Và m t s nguyên t ộ ố ố ngẫu nhiên r, sao cho USCLN(r, q) = 1 (r và q là 2 s ố nguyên t ố cùng nhau), q được chọn như vậy để đả m b o cho ciphertext là duy ả nhất. Nếu chon q bé hơn thì có thể có nhiều hơn một plaintext được mã hóa ra cùng một ciphertext. r ph i nguyên t ả ố cùng nhau vơi q nếu không s không tẽ ồn t i s nghạ ố ịch đảo mod q c a nó. S t n t i c a s ủ ự ồ ạ ủ ố nghịc đảo là c n thi t cho quá ầ ế trình gi i mã th c hiả ự ện được.
Bây gi ta tính dãy: ờ ( 1, 2, …, n) Trong đó:
i = rwi mod q
Khóa công khai chính là còn khóa riêng là (w,q,r).
Mã hóa
Để mã hóa một thông điệp n bit: ( 1, 2, …, n ), trong đó i là bước th i cứ ửa thông điệp và i {0,1}, ta tính:
C >
Thông điệp mã hóa chính là c.
Giải mã
Để giải mã ciphertext c người nhận thông điệp c n tìm các bit i sao cho ầ thỏa mãn:
C =
Đây là một bài toán r t khó nói chung n u i là nh ng giá tr b t k vì ấ ế ữ ị ấ ỳ người nhận thông điệp ph i gi i m t lo t bài toán t ng t p h p con mà bài toán ả ả ộ ạ ổ ậ ợ
47
đó đã được bi t là NP ế – khó khăn! Tuy nhiên ở đây các giá trị ủ c a i đã được chọn sao cho vi c gi i mã là d ệ ả ễ dàng khi đã biết khóa riêng (w,q,r).
M u ch t c a vi c gi i mã là phấ ố ủ ệ ả ải tìm đượ ốc s nguyên s là nghịch đảo r theo modulo q. Điều này có nghĩa là: s thỏa mãn phương trình:
s*r mod q = 1
hay nói cách khác, t n t i m t s nguyên k sao cho: ồ ạ ộ ố sr = kq +1
Do bởi r đã được ch n sao cho USCLN(r,q) = 1ch c ch n có th ọ ắ ắ ể tìm được các s s và k b ng cách áp d ng thu t toán Euclid m r ng. Tiố ằ ụ ậ ở ộ ếp đó người nhận thông điệp tính:
c’ = cs(mod q) Trong đó c’ = cs =
Do b i: rs mod q = 1 và i = rwi mod q ở Kéo theo is wirs wi (mod q) T ừ đó
c’
T ng c a m i s wổ ủ ọ ố i là bé hơn q do đó: cũng vậy trong khoảng [0, q 1]. –
Và như vậy người nh n ph i gi i bài toán t ng s các t p h p con: ậ ả ả ổ ố ậ ợ c’
48
Bài toán này giải được vì w là một dãy siêu tăng. Chẳng h n l y ph n t lạ ấ ầ ử ớn nhất trong w g i là wk. Nọ ếu wk > c’, thì k = 0, n u wk c, thì ế k = 1. Sau đó trừ k >< wk vào cho c’và lặ ại cho các bước cho đến khi tìm đươc p l i.
Ví d cho mụ ột dãy siêu tăng:
w = {2, 7, 11, 21, 42, 89, 180, 354}
giả ử đấy là cơ sở ủ s c a m t khóa riêng, s dộ ử ụng nó để tính tổn g:
w = 706
Chọn m t s q lộ ố ớn hơn tổng s trên, ch ng h n l y: q =881 ố ẳ ạ ấ
L i ch n m t s r n m trong kho ng [1, q] và nguyên t cùng nhau ạ ọ ộ ố ằ ả ố v i q: r = 588 ớ
Khóa riêng bây gi g m q, w và r. ờ ồ
Để tính ra m t khóa công khai, hãy sinh ra m t dãy ộ ộ b ng cách ằ nhân mỗi phầ ửn t trong w với r mod q
= {295, 592, 301, 14, 28, 353, 120, 236}
B i vì ở
2 * 588 mod 888 = 295
7 * 588 mod 888 = 592
11 * 588 mod 888 = 301
21 * 588 mod 888 = 14
42 * 588 mod 888 = 28
89 * 588 mod 888 = 353
180 * 588 mod 888 = 120
354 * 588 mod 888 = 236 Dãy t o nên khóa công khai. ạ