MÃ HÓA CÔNG KHAI VÀ QUY TRÌNH ỨNG DỤNG CÁC THUẬT TOÁN MÃ HÓA CÔNG KHAI TRONG GIAO DỊCH ĐIỆN TỬ

Một phần của tài liệu Hệ mật khóa ông khai và an ninh giao dịh điện tử, an toàn thư tín điện tử (Trang 37 - 66)

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ó phi đượ ạc t o v i mộớ t khóa bí mật nào đó hay không.

Tha thu n khóa: Cho phép thi t lậ ế ập khóa để trao đổi thông tin m t gia 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 ọ ộ ố ngu 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 đểgii 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 hoc 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 ằ ẻ nhn thực người dùng trong SSL).

Các giao th c truy n thông an toàn dùng k ứ ề ỹ thut 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. Thut 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

Chn 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.

Chn 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 gc (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 tha E r i chia cho N l y s ồ ấ ố dư.

Bình gửi thông điệp mã hóa C cho An.

 Gii 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ử ngu 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 vic 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 trkhả 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.

Chn 2 s nguyên t : p = 61 = (111101)2 ; q = 53 = (11011)2 (hy ố ố 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 ộ ố ngu 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. Thut 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.

 Gii 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.

Gii 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 tn g:

 w = 706

Chn 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 mi phầ ửn t trong w vi 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.  ạ

Một phần của tài liệu Hệ mật khóa ông khai và an ninh giao dịh điện tử, an toàn thư tín điện tử (Trang 37 - 66)

Tải bản đầy đủ (PDF)

(80 trang)