Hình 2.4: Sơ đồ một vòng lặp MD5
Có bốn hàm phi tuyến, mỗi hàm này đƣợc sử dụng cho mỗi vòng:
F(X,Y,Z ) = (X and Y) or ((not X) and Z) G(X,Y,Z ) = ((X and Z) or (Y and (not Z))) H(X,Y,Z ) = X xor Y xor Z
I(X,Y,Z ) = Y xor (X or (not Z)).
Những hàm này đƣợc thiết kế sao cho các bit tƣơng ƣ́ng của X, Y và Z là đô ̣c lâ ̣p và không ƣu tiên , và mỗi bit của kết quả cũng đô ̣c lâ ̣p và ngang b ằng nhau.
Nếu Mj là mô ̣t biểu diễn của khối con thƣ́ j (j = 16) và <<<s là phép di ̣ch trái của s bit, thì các vòng lă ̣p có thể biểu diễn nhƣ sau:
FF(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + F(b,c,d) + Mj + ti) <<< s) GG(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + G(b,c,d) + Mj + ti) <<< s) HH(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + H(b,c,d) + Mj + ti) <<< s) II(a,b,c,d,Mj,s,ti) được biểu diễn a = b + ((a + I(b,c,d) + Mj + ti) <<< s).
Những hằng số ti đƣợc cho ̣n theo quy luâ ̣t sau : ở bƣớc thƣ́ i giá tri ̣ t i là phần nguyên của 232*abs(sin(i)), trong đó i = [0..63] đƣợc tính theo radian.
Sau tất cả những bƣớc này a, b, c và d lần lƣợt đƣợc cô ̣ng với A, B, C và D để cho kết quả đầu ra , và thuật toán tiếp tục với khối d ữ liê ̣u 512 bit tiếp theo cho đến hết bƣ́c điê ̣n . Đầu ra cuối cùng là một khối 128 bit của A, B, C và D, đây chính là hàm Băm nhâ ̣n đƣợc.
- Tính bảo mật trong MD5:
Ron Rivest đã phác hoa ̣ những cải tiến của MD5 so với MD4 nhƣ sau:
- Vòng thƣ́ 4 đƣợc thêm vào (còn MD4 chỉ có 3 vòng).
- Mỗi bƣớc đƣợc cô ̣ng thêm mô ̣t hằng số duy nhất.
- Hàm G ở vòng 2 thay đổi tƣ̀ ((X and Y) or (X and Z) or (Y and Z))
thành ((X and Z) or (Y and (not Z))) nhằm giảm tính đối xƣ́ng của G (giảm tính tuyến tính).
- Mỗi bƣớc đƣợc cô ̣ng kết quả của bƣ ớc trƣớc nó, làm các quá trình có tính liên kết, phụ thuộc lẫn nhau.
- Viê ̣c các khối con bi ̣ thay đổi khi vào vòng 2 và vòng 3 làm cho khuôn dạng cấu trúc vòng lặp thay đổi theo.
- Số lƣợng lƣợng bit di ̣ch trái của mỗi vòng đƣợc tối ƣu và các bƣớc di ̣ch ở mỗi vòng là khác nhau.
Năm 1993, den Boer và Bosselaers đã tìm ra đu ̣ng đô ̣ trong viê ̣c sử dụng hàm nén (vòng 2 và 3) của MD5. Điều này phá v ỡ quy luâ ̣t thiết kế MD 5 là
chống la ̣i sƣ̣ đu ̣ng đô ̣, nhƣng MD5 vẫn là hàm Băm đƣ ợc sử dụng rô ̣ng rãi hiê ̣n nay.
* Hàm băm SHA (Secure Hash Algorithm)
Năm 1995, tổ chƣ́c NIST cùng NSA đã thiết kế ra thuâ ̣t toán hàm Băm an toàn (SHA) sử dụng cho chuẩn ch ữ ký điện t ử DSS. SHA đƣợc thiết k ế dƣ̣a trên những nguyên tắc của MD4/MD5, tạo ra 160 bit giá trị Băm.
- Miêu tả SHA:
Cũng giống với MD5, bƣ́c điê ̣n đƣợc cô ̣ng thêm mô ̣t bit 1 và các bit 0 ở cuối bƣ́c điê ̣n để bƣ́c điê ̣n có thể chia hết cho 512. SHA sử du ̣ng 5 thanh ghi dịch: A = 0x67452301 B = 0xefcdab89 C = 0x98badcfe D = 0x10325476 E = 0xc3d2e1f0
Bƣ́c điê ̣n đƣợc chia ra thành nhi ều khối 512 bit. Ta cũng đă ̣t là a , b, c, d và e thay cho A, B, C, D và E đối với khối 512 bit đầu tiên của bƣ́c điê ̣n. SHA có bốn vòng lă ̣p chính với m ỗi vòng thƣ̣c hiê ̣n 20 lần biến đổi: bao gồm thƣ̣c hiê ̣n với mô ̣t hàm phi tuyến của 3 trong 5 giá trị a , b, c, d và e ; sau đó cũng đƣợc cô ̣ng và di ̣ch nhƣ trong MD5.
SHA xác lâ ̣p bốn hàm phi tuyến nhƣ sau:
ft(X,Y,Z) = (X and Y) or ((not X) and Z) với 0 ≤ t ≤ 19 ft(X,Y,Z) = X xor Y xor Z với 20 ≤ t ≤ 39
ft(X,Y,Z) = (X and Y) or (X and Z) or (Y and Z) với 40 ≤ t ≤ 59 ft(X,Y,Z) = X xor Y xor Z với 60 ≤ t ≤ 79.
Bốn hằng số sử dụng trong thuật toán là:
Kt = 31/2 /4 = 0x6ed9eba1 với 20 ≤ t ≤ 39 Kt = 51/2 /4 = 0x8f1bbcdc với 40 ≤ t ≤ 59 Kt = 101/2 /4 = 0xca62c1d6 với 60 ≤ t ≤ 79.
Các khối bức điện đƣ ợc mở rô ̣ng tƣ̀ 16 khối con 32 bit (M0 đến M15) thành 80 khối con 32 bit (W0 đến W 79) bằng viê ̣c s ử dụng thuật toán m ở rô ̣ng:
Wt = Mt với 0 ≤ t ≤ 15
Wt = (Wt-3 xor Wt-8 xor Wt-14 xor Wt-16) với 16 ≤ t ≤ 79.
Ta có thể mô tả một vòng lặp SHA nhƣ hình sau:
Hình 2.5: Sơ đồ một vòng lặp của SHA
Nếu go ̣i Wt là biểu diễn của khối con thƣ́ t của bƣ́c điê ̣n đƣ ợc mở rô ̣ng, và <<<s là biểu diễn di ̣ch trái s bit, thì vòng lă ̣p chính của SHA nhƣ sau:
a = A, b = B, c = C, D = D, e = E, for t = 0 to 79 { TEMP = (a <<< 5) + ft(b, c, d) + e +Wt + Kt, e = d, d = c,
c = b <<< 30, b = a,
a = TEMP, }
A = A + a, B = B + b, C = C + c, D = D + d, E = E + e,
Thuâ ̣t toán tiếp tu ̣c với khối 512 bit tiếp theo cho tới khi hết bƣ́c điê ̣n , và kết quả sau cùng trong 5 thanh ghi A, B, C, D và E chính là hàm Băm SHA
160 bit.
- Tính bảo mật trong SHA:
Để hiểu rõ hơn v ề tính bảo mật của SHA , ta hãy so sánh SHA với MD 5 để có thể tìm ra những điểm khác nhau của hai hàm Băm này:
- MD5 và SHA đ ều cô ̣ng thêm các bit “ giả” để ta ̣o thành nh ững khối chia hết cho 512 bit, nhƣng SHA sử dụng cùng một hàm phi tuyến f cho cả bốn vòng.
- MD5 sử dụng mỗi hằng số duy nhất cho m ỗi bƣớc biến đổi , SHA sử dụng mỗi hằng số cho mỗi vòng biến đổi, hằng số di ̣ch này là mô ̣t s ố nguyên tố đối với đô ̣ lớn của từ (giống với MD4).
- Trong hàm phi tuyến thƣ́ 2 của MD5 có sƣ̣ cải tiến so với MD 4, SHA thì sử dụng lại hàm phi tuyến của MD 4, tƣ́c (X and Y) or (X and Z) or (Y and Z).
- Trong MD5 với mỗi bƣớc đƣợc cô ̣ng kết quả của bƣ ớc trƣớc đó. Sƣ̣ khác biệt đối với SHA là cột thứ 5 đƣợc cô ̣ng (không phải b , c hay d như trong MD5), điều này làm cho phƣơng pháp tấn công của Boer-Bosselaers đối với SHA bi ̣ thất ba ̣i (den Boer và Bosselaers là hai người đã phá thành công 2 vòng cuối trong MD4).
Cho đến nay, chƣa có mô ̣t công bố nào đƣ ợc đƣa ra trong viê ̣c tấn công SHA, bởi vì đô ̣ dài của hàm Băm SHA là 160 bit, nó có thể chống la ̣i phƣơng pháp tấn công bằng vét ca ̣n tốt hơn so với hàm Băm MD5 128 bit [3].
2.7. Chữ ký điện tử 2.7.1. Tổng quan 2.7.1. Tổng quan
Trong cuộc sống hàng ngày, ta cần dùng chữ ký để xác nhận các văn bản tài liệu nào đó và có thể dùng con dấu với giá trị pháp lý cao hơn đi kèm với chữ ký.
Cùng với sự phát triển nhanh chóng của công nghệ thông tin, các văn bản tài liệu đƣợc lƣu dƣới dạng số, dễ dàng đƣợc sao chép, sửa đổi. Nếu ta sử dụng hình thức chữ ký truyền thống nhƣ trên sẽ rất dễ dàng bị giả mạo chữ ký. Vậy làm sao để có thể ký vào các văn bản, tài liệu số nhƣ vậy?
Câu trả lời đó là sử dụng chữ ký điện tử! Chữ ký điện tử đi kèm với các thông tin chủ sở hữu và một số thông tin cần thiết khác sẽ trở thành Chứng thƣ điện tử.
Chữ ký điện tử (tiếng Anh: electronic signature) là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video...) nhằm mục đích xác định ngƣời chủ của dữ liệu đó.
Một sơ đồ chữ ký điê ̣n tƣ̉ là bộ 5 (P, A, K, S, V) thoả mãn các điều kiện dƣới đây:
a) P là tập hữu hạn các bức điện (thông điê ̣p, bản rõ) có thể. b) A là tập hữu hạn các chữ ký có thể.
c) K là tập không gian khoá (tập hữu hạn các khoá có thể).
d) Với mỗi khoá K € k tồn tại một thuật toán ký SigK € S và một thuật toán xác minh VerK € V. Mỗi Sigk: P → A và verK: P x A → {TRUE, FALSE}
là những hàm sao cho mỗi bức điện x € P và mỗi chữ ký y € A thoả mãn phƣơng trình dƣới đây:
True nếu y = sig(x) Ver (x, y) = False nếuy ≠ sig(x).
Với mỗi K € k, hàm SigK và VerK là các hàm đa thức thời gian . Hàm VerK sẽ là hàm công khai còn hàm SigK là bí mật . Không thể dễ dàng tính toán để giả mạo chữ ký của B trên bức điện x, nghĩa là với x cho trƣớc
chỉ có B mới có thể tính đƣợc y để Ver(x, y) = TRUE. Mô ̣t sơ đồ chữ ký không thể an toàn vô điều kiê ̣n vì mô ̣t ngƣời C nào đó có thể kiểm tra tất cả chữ số y trên bƣ́c điê ̣n x nhờ dùng thuâ ̣t toán Ver() công khai cho tới khi anh ta tìm thấy chữ ký đúng . Vì thế, nếu có đủ thời gian , C luôn có thể giả ma ̣o chữ ký của B. Nhƣ vâ ̣y mu ̣c đích của chúng ta là tìm các sơ đồ chữ ký điê ̣n tử an toàn về mă ̣t tính toán [3].
Chữ ký điện tử đƣợc sử dụng trong các giao dịch điện tử. Xuất phát từ thực tế, chữ ký điện tử cũng cần đảm bảo các chức năng: Xác định đƣợc ngƣời chủ của một dữ liệu nào đó ví dụ văn bản, ảnh, video, ... dữ liệu đó có bị thay đổi hay không.
Hai khái niệm chữ ký số (digital signature) và chữ ký điện tử thƣờng đƣợc dùng thay thế cho nhau mặc dù chúng không hoàn toàn có cùng nghĩa. Chữ ký số chỉ là một tập con của chữ ký điện tử (chữ ký điện tử bao hàm chữ ký số).
Một chữ ký điện tử sẽ là một chữ ký số nếu nó sử dụng một phƣơng pháp mã hóa nào đó để đảm bảo tính toàn vẹn (thông tin) và tính xác minh. Ví dụ nhƣ một bản dự thảo hợp đồng soạn bởi bên bán hàng gửi bằng email tới ngƣời mua sau khi đƣợc ký (điện tử). [3]
Một văn bản đƣợc ký có thể đƣợc mã hóa khi gửi nhƣng điều này không bắt buộc. Việc đảm bảo tính bí mật và tính toàn vẹn của dữ liệu có thể đƣợc tiến hành độc lập.
2.7.2. Quy trình sử dụng chữ ký điện tử
Chữ ký điện tử hoạt động dựa trên hệ thống mã hóa khóa công khai. Hệ thống mã hóa này gồm hai khóa, khóa bí mật và khóa công khai. Mỗi chủ thể có một cặp khóa nhƣ vậy, chủ thể đó sẽ giữ khóa bí mật, còn khóa công khai của chủ thể sẽ đƣợc công khai cho mọi ngƣời để bất kỳ ai cũng có thể biết. Nguyên tắc của hệ thống mã hóa khóa công khai đó là, nếu mã hóa bằng khóa bí mật thì chỉ khóa công khai mới giải mã đúng thông tin đƣợc, và ngƣợc lại, nếu mã hóa bằng khóa công khai, thì chỉ có khóa bí mật mới giải mã đúng đƣợc.
Ngoài ra, chữ ký còn đảm bảo phát giác đƣợc bất kỳ sự thay đổi nào trên dữ liệu đã đƣợc “ký”. Để ký lên một văn bản, phần mềm ký sẽ nghiền (crunch down) dữ liệu để gói gọn bằng một vài dòng, đƣợc gọi là thông báo tóm tắt, bằng một tiến trình đƣợc gọi là “kỹ thuật băm”, rồi tạo thành chữ ký điện tử. Cuối cùng, phần mềm ký tên sẽ gắn chữ ký điện tử này vào văn bản.
Ví dụ: Giả sử bên A có tài liệu P cần ký. Bên A sẽ thực hiện băm văn bản thành một bản tóm lƣợc X, sau đó dùng khóa bí mật của mình ký lên bản tóm lƣợc X để đƣợc văn bản chữ ký điện tử Y, sau đó gửi tài liệu P kèm theo chữ ký Y cho A.
Giả sử B muốn xác nhận tài liệu P là của A, với chữ ký là bản mã Y. Bên B sẽ dùng khóa công khai của A để xác nhận chữ ký Y của A ký trên văn bản P gửi có đúng hay không, nếu xác nhận đúng thì chữ ký Y chính là A ký trên văn bản P, ngƣợc lại thì không phải hoặc bản ký đã đƣợc thay đổi.
Một số trƣờng hợp xảy ra với chữ ký điện tử, cũng giống nhƣ các trƣờng hợp xảy ra với chữ ký truyền thống. Ví dụ: Khi tài liệu TL của A bị thay đổi (dù chỉ một ký tự, một dấu chấm, hay một ký hiệu bất kỳ), khi B xác nhận, anh ta sẽ thấy bản giải mã khác với tài liệu TL của anh A. B sẽ kết luận rằng tài liệu đó đã bị thay đổi, không phải là tài liệu anh A đã ký.
Trƣờng hợp khác, nếu A để lộ khóa bí mật, nghĩa là văn bản tài liệu của A có thể ký bởi ngƣời khác có khóa bí mật của A. Khi một ai đó xác nhận tài liệu đƣợc cho là của A ký, chữ ký vẫn là hợp lệ, mặc dù không phải chính A ký. Nhƣ vậy, chữ ký của A sẽ không còn giá trị pháp lý nữa. Do đó, việc giữ khóa bí mật là tuyệt đối quan trọng trong hệ thống chữ ký điện tử.
Trong trƣờng hợp ví dụ trên, A có một cặp khóa để có thể ký trên văn bản, tài liệu số. Tƣơng tự nhƣ vậy, B hay bất cứ ai sử dụng chữ ký điện tử, đều có một cặp khóa nhƣ vậy. Khóa bí mật đƣợc giữ riêng, còn khóa công khai đƣợc đƣa ra công cộng. Vậy vấn đề đặt ra là làm thế nào để biết một khóa công khai thuộc về A, B hay một ngƣời nào đó?
Hơn nữa, giả sử trong môi trƣờng giao dịch trên Internet, cần sự tin cậy cao, A muốn giao dịch với một nhân vật X. X và A cần trao đổi thông tin cá nhân cho nhau, các thông tin đó gồm họ tên, địa chỉ, số điện thoại, email…
Vậy làm sao để A có thể chắc chắn rằng mình đang giao dịch với nhân vật X chứ không phải là ai khác giả mạo X? Chứng chỉ số đƣợc tạo ra để giải quyết vấn đề này! Chứng chỉ số có cơ chế để xác nhận thông tin chính xác về các đối tƣợng sử dụng chứng chỉ số. Thông tin giữa A và X sẽ đƣợc xác nhận bằng một bên trung gian mà A và X tin tƣởng.
Bên trung gian đó là nhà cung cấp chứng chỉ số CA (Certificate Authority). CA có một chứng chỉ số của riêng mình, CA sẽ cấp chứng chỉ số cho A và X cũng nhƣ những đối tƣợng khác.
Trở lại vấn đề trên, A và X sẽ có cách kiểm tra thông tin của nhau dựa trên chứng chỉ số nhƣ sau: khi A giao dịch với X, họ sẽ chuyển chứng chỉ số cho nhau, đồng thời họ cũng có chứng chỉ số của CA, phần mềm tại máy tính của A có cơ chế để kiểm tra chứng chỉ số của X có hợp lệ không, phần mềm sẽ kết hợp chứng chỉ số của nhà cung cấp CA và chứng chỉ của X để thông báo cho A về tính xác minh của đối tƣợng X.
Nếu phần mềm kiểm tra và thấy chứng chỉ của X là phù hợp với chứng chỉ CA, thì A có thể tin tƣởng vào X.
Cơ chế chữ ký điện tử và chứng chỉ số sử dụng các thuật toán mã hóa đảm bảo không thể giả mạo CA để cấp chứng chỉ không hợp pháp, mọi chứng chỉ giả mạo đều có thể dễ dàng bị phát hiện.
Trở lại với việc ký văn bản, tài liệu, khóa bí mật sẽ dùng để ký các văn bản, tài liệu của chủ sở hữu. Nhƣ đã đề cập trong ví dụ ở trên, giả sử A muốn gửi một văn bản kèm với chữ ký của mình trên văn bản đó, A sẽ dùng khóa bí mật để mã hóa thu đƣợc bản mã văn bản, bản mã đó chính là chữ ký điện tử của A trên văn bản.
Khi A gửi văn bản và chữ ký, để ngƣời khác có thể xác nhận văn bản của mình với thông tin đầy đủ về chủ sở hữu, A sẽ gửi cả chứng chỉ của mình đi kèm với văn bản.
Giả sử X nhận đƣợc văn bản A gửi kèm với chứng chỉ, khi đó X có thể dễ dàng xác nhận tính hợp pháp của văn bản đó.
a. Rivest Shamir Adleman (RSA)
- Sơ lƣợc về các khái niệm toán học dùng trong RSA. * Số nguyên tố (prime)
Số nguyên tố là những số nguyên chỉ chia chẵn đƣợc cho 1 và cho chính nó.
Ví dụ : 2, 3, 5, 7, 11, 13, 17, 23...
* Khái niệm nguyên tố cùng nhau (relatively prime or coprime).
Với hai số nguyên dƣơng a và b. Ta ký hiệu UCLN(a,b): Ƣớc chung lớn nhất của a và b.
Để đơn giản ta ký hiệu UCLN(a,b) = (a,b) Ví dụ :
(4,6)=2 (5,6)=1
Hai số a và b gọi là nguyên tố cùng nhau khi (a,b)=1