2.2.1. Khái niệm hệ mật mã RSA
Khái niệm hệ mật mã RSA đã được ra đời năm 1976 bởi các tác giả R.RivetsK,A.Shamir , và L.Adleman. Hệ mã hóa này dựa trên cơ sở của hai bài toán
1. Bài toán Logarith rời rạc
2. Bài toán phân tích thành thừa số
Trong hệ mã hóa RSA các bản rõ, các bản mã và các khóa (public key và private key) là thuộc tập số nguyên ZN ={1,…,N-1}. Trong đó tập ZN với N =pxq là các số nguyên tố khác nhau cùng với phép cộng, phép nhân mođun N tạo ra mođun số học N
Khóa mã hóa EKB là cặp số nguyên (N, KB) và khóa giải mã DkB là cặp số nguyên (N, kB), các số là rất lớn, số N có thể lên tới hàng trăm chữ số
Các phương pháp mã hóa và giải mã hóa là rất dễ dàng.
Công việc mã hóa là sự biến đổi bản rõ P (Plaintext) thành bản mã C (ciphertext) dựa trên cặp khóa công khai KB và bản rõ P theo công thức sau đây
C = EKB(P) = pKB (mod N) (1)
Công việc giảI ma là sự biến đổi ngược lại bản mã C thành bản rõ P dựa trên cặp khóa bí mật kB , mođun N theo công thức sau :
P =DkB(C) =CkB (mod N) (2)
Dễ thấy rằng, bản rõ ban đầu cần được biến đổi một cách thích hợp thành bản mã, sau đó để có thể tái tạo lại bản rõ ban đầu từ chính bản mã đó:
P =DkB (EKB(P)) (3)
Thay thế (1) vào (2) ta có: ( PKB)kB =P (mod N) (4)
Ta thấy N =pxq với p, q là số nguyên tố. Trong toán học đã chứng minh được rằng, nếu N là số nguyên tố thì công thức (4) sẽ có lời giải khi và chỉ khi:
KB.kB 1 (mod (N)) (5)
Trong đó (N) =LCM(p-1, q-1 ).
(Lest Common Multiple) là bội số chung nhỏ nhất.
Nói một cách khác, đầu tiên người nhận B lựa chọn một khóa công khai KB một cách ngẫu nhiên. Khi đó khóa bí mật kB được tính ra bằng công thức (5). Điều này hoàn toàn tính được vì khi B biết được cặp số nguyên tố (p, q) thì sẽ tính được (N).
Ví dụ:
N=11413=101x113, (N) =100x112 =11200 =26 x52 x7. KB phải chọn sao cho không chia hết cho 2,5,7. Chọn, chẳng hạn KB =3533 khi đó kB =KB-1
=6579mod11200. Và ta có khóa công khai là (N,KB)=(11413,3533) khóa bí mật là 6759. Phép lập mã và giải mã là
EKB(P) =PKB (mod N) =P3533 (mod 11413) DkB(C) =CkB (mod N) =C6579 (mod 11413) Chẳng hạn với PC =9726, ta có C =5761
2.2.2. Độ an toàn của RSA
Một nhận định chung là tất cả các cuộc tấn công giải mã đều mang mục đích không tốt. Tính bảo mật của RSA chủ yếu dựa vào việc giữ bí mật khóa giải mã hay giữ bí mật các thừa số p, q của N. Ta thử xét một vài phương thức tấn công điển hình của kẻ địch nhằm giải mã trong thuật toán này (nhằm xâm phạm tới các yếu tố bí mật đó).
Trường hợp 1: chúng ta xét đếnơtrường hợp khi kẻ địch nào đó biết được mođun N, khóa công khai KB và bản tin mã hóa C, khi đó kể địch sẽ tìm ra bản tin gốc (Plaintext) như thế nào. Để làm được điều đó kẻ địch thường tấn côngvào hệ thống mật mã bằng hai phương thức sau đây:
Phương thức thứ nhất: Trước tiên dựa vào phân tích thừa số mô đun N. Tiếp theo sau chúng sẽ tìm cách tính toán ra hai số nguyên tố p và q, và có khả năng thành công khi đó sẽ tính được (N) + (p-1) (q-1) và khoá bí mật KB. Ta thấy N cần phải là tích của hai số nguyên tố, vì nếu N là tích của hai số nguyên tố thì thuật toán phân tích thừa số đơn giản cần tối đa N1/2 bước, bởi vì có một số nguyên tố nhỏ hơn N1/2. Mặt khác, nếu N là tích của n số nguyên tố, thì thuật toán phân tích thừa số đơn giản cần tối đa N1/n bước.
Phương thức thứ hai: Phương thức tấn công thứ hai vào hệ mã hóa RSA là có thể khởi đầu bằng cách giải quyết trường hợp thích hợp của bài toán logarit rời rạc. Trường hợp này kẻ địch đã có trong tay bản mã C và khóa công khai KB tức là có cặp (KB, C).
Trường hợp 2: Chúng ta xét trường hợp khi kẻ địch nào đó biết được mođun N và (N), khi đó kẻ địch sẽ tìm ra bản tin gốc (Plaintext) bằng cách sau: Biết (N) thì có thể tính p, q theo hệ phương trình:
P * q = N, (p -1) (q-1) = (N)
Do đó p và q là nghiệm của phương trình bậc hai: x 2 - (n - (N) +1 ) + n = 0.
Ví dụ: n = 84773093, và biết (N) = 84754668. Giải phương trình bậc hai tương ứng ta sẽ được hai nghiệm p = 9539 và q = 8887.
2.2.3. Một số tính chất của hệ RSA
Trong các hệ mật mã RSA, một bản tin có thể được mã hóa trong thời thời gian tuyến tính.
Đối với các bản tin dài, độ dài của các số được dùng cho các khóa có thể được coi như là hằng. Tương tự như vậy, nâng một số lên lũy thừa được thực hiện trong thời gian hằng. Thực ra tham số này che giấu nhiều chi tiết cài đặt có liên quan đến việc tính toán với các con số dài, chi phí của các phép toán thực sự là một yếu tố ngăn cản sự phổ biến ứng dụng của phương pháp này. Phần quan trọng nhất của việc tính toán có liên quan đến việc mã hoá bản tin. Nhưng chắc chắn là sẽ không có hệ mã hoá nào hết nếu không tính ra được các khóa của chúng là các số lớn.
Các khóa cho hệ mã hóa RSA có thể được tạo ra mà không phải tính toán quá nhiều.
Một lần nữa, ta lại nói đến các phương pháp kiểm tra số nguyên tố. Mỗi số nguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiên lớn, sau đó kiểm tra các số kế tiếp cho tới khi tìm được một số nguyên tố. Một phương pháp đơn giản thực hiện một phép tính trên một con số ngẫu nhiên, với xác suất 1/2 sẽ chứng minh rằng số được kiểm tra không phải nguyên tố. Bước cuối cùng là tính p dựa vào thuật toán Euclid.
Như phần trên đã trình bày trong hệ mã hóa công khai thì khóa giải mã (Privatekey) KB và các thừa số p, q là được giữ bí mật và sự thành công của phương pháp là tuỳ thuộc vào kẻ địch có khả năng tìm ra được giá trị của KB hay không nếu cho trước N và KB. Rất khó có thể tìm ra được KB từ KB, cần biết về p và q. Như
vậy cần phân tích N ra thành thừa số để tính p và q. Nhưng việc phân tích ra thừa số là một việc làm tốn rất nhiều thời gian, với kỹ thuật hiện đại ngày nay thì cần tới hàng triệu năm để phân tích một số có 200 chữ số ra thừa số.
Độ an toàn của thuật toán RSA dựa trên cơ sở những khó khăn của việc xác định các thừa số nguyên tố của một số lớn. Bảng dưới đây cho biết các thời gian dự đoán, giả sử rằng mỗi phép toán thực hiện trong một micro giây.
Bảng 2.1. Thời gian dự đoán thực hiện phép tính
Số các chữ số trong Thời gian phân tích số được phân tích 50 4 giờ 75 104 giờ 100 74 năm 200 4.000.000 năm 300 5 * 1015 năm 500 4 *1025 năm 2.2.4. Ứng dụng của RSA
Hệ mã hóa RSA được ứng dụng rộng rãi chủ yếu cho web và các chương trình email. Ngày nay, RSA còn được sử dụng rộng rãi trong các công nghệ bảo mật sử dụng cho thương mại điện tử (ví dụ như công nghệ bảo mật SSL).
2.2.5. Ưu nhược điểm của mật mã khóa công khai
Vấn đề còn tồn đọng của hệ mật mã khoá đối xứng được giải quyết nhờ hệ mật mã khoá công khai. Chính ưu điểm này đã thu hút nhiều trí tuệ vào việc đề xuất, đánh giá các hệ mật mã công khai. Nhưng do bản thân các hệ mật mã khoá công khai đều dựa vào các giả thiết liên quan đến các bài toán khó nên đa số các hệ mật mã này đều có tốc độ mã dịch không nhanh lắm. Chính nhược điểm này làm cho các hệ mật mã khoá công khai khó được dùng một cách độc lập.
Một vấn đề nữa nảy sinh khi sử dụng các hệ mật mã khóa công khai là việc xác thực mà trong mô hình hệ mật mã đối xứng không đặt ra. Do các khoá mã côngkhai được công bố một cách công khai trên mạng cho nên việc đảm bảo rằng “khoá được công bố có đúng là của đối tượng cần liên lạc hay không?” là một kẽ hở
có thể bị lợi dụng. Vấn đề xác thực này được giải quyết cũng chính bằng các hệ mật mã khoá công khai. Nhiều thủ tục xác thực đã được nghiên cứu và sử dụng như Kerberos, X.509… Một ưu điểm nữa của các hệ mật mã khoá công khai là các ứng dụng của nó trong lĩnh vực chữ ký số, cùng với các kết quả về hàm băm, thủ tục ký để bảo đảm tính toàn vẹn của một văn bản được giải quyết.
2.3. Secure Socket Layer (SSL) 2.3.1. Giới thiệu SSL 2.3.1. Giới thiệu SSL
SSL (Secure Socket Layer) là giao thức đa mục đích được thiết kế để tạo ra các giao tiếp giữa hai chương trình ứng dụng trên một cổng định trước (socket 443) nhằm mã hoá toàn bộ thông tin đi/đến, được sử dụng trong giao dịch điện tử như truyền số liệu thẻ tín dụng, mật khẩu, số bí mật cá nhân (PIN) trên Internet.
Được phát triển bởi Netscape, ngày nay giao thức Secure Socket Layer (SSL) đã được sử dụng rộng rãi trên World Wide Web trong việc xác thực và mã hoá thông tin giữa client và server. Tổ chức IETF (Internet Engineering Task Force) đã chuẩn hoá SSL và đặt lại tên là TLS (Transport Layer Security). Mặc dù là có sự thay đổi về tên nhưng TSL chỉlà một phiên bản mới của SSL. Phiên bản TSL 1.0 tương đương với phiên bản SSL 3.1. Tuy nhiên SSL là thuật ngữ được sử dụng rộng rãi hơn. SSL được thiết kếnhưlà một giao thức riêng cho vấn đềbảo mật có thể hỗ trợ cho rất nhiều ứng dụng. Giao thức SSL hoạt động bên trên TCP/IP và bên dưới các giao thức ứng dụng tầng cao hơn như là HTTP (Hyper Text Transport Protocol), IMAP (Internet Messaging Access Protocol) và FTP (File Transport Protocol). Trong khi SSL có thể sử dụng để hỗ trợ các giao dịch an toàn cho rất nhiều ứng dụng khác nhau trên Internet, thì hiện nay SSL được sửdụng chính cho các giao dịch trên Web.
2.3.2. Cơ chế mã hóa của SSL
Giao thức SSL dựa trên hai nhóm con giao thức là giao thức “bắt tay” (handshake protocol) và giao thức “bản ghi” (record protocol). Giao thức bắt tay xác định các tham số giao dịch giữa hai đối tượng có nhu cầu trao đổi thông tin hoặc dữ liệu, còn giao thức bản ghi xác định khuôn dạng cho tiến hành mã hoá và truyền tin hai chiều giữa hai đối tượng đó. Khi hai ứng dụng máy tính, thí dụgiữa
một trình duyệt web và máy chủ web, làm việc với nhau, máy chủ và máy khách sẽ trao đổi “lời chào” (hello) dưới dạng các thông điệp cho nhau với xuất phát đầu tiên chủ động từ máy chủ, đồng thời xác định các chuẩn về thuật toán mã hoá và nén số liệu có thể được áp dụng giữa hai ứng dụng. Ngoài ra, các ứng dụng còn trao đổi “số nhận dạng/khoá theo phiên” (session ID, session key) duy nhất cho lần làm việc đó. Sau đó ứng dụng khách (trình duyệt) yêu cầu có chứng chỉ điện tử (digital certificate) xác thực của ứng dụng chủ(web server).
Chứng chỉ điện tử thường được xác nhận rộng rãi bởi một cơquan trung gian (Thẩm quyền xác nhận CA - Certificate Authority) như RSA Data Sercurity hay VeriSign Inc., một dạng tổ chức độc lập, trung lập và có uy tín. Các tổ chức này cung cấp dịch vụ”xác nhận” số nhận dạng của một công ty và phát hành chứng chỉ duy nhất cho công ty đó như là bằng chứng nhận dạng (identity) cho các giao dịch trên mạng, ở đây là các máy chủ webserver.
Sau khi kiểm tra chứng chỉ điện tử của máy chủ (sử dụng thuật toán mật mã công khai, như RSA tại trình máy trạm), ứng dụng máy trạm sử dụng các thông tin trong chứng chỉ điện tử để mã hoá thông điệp gửi lại máy chủ mà chỉ có máy chủ đó có thể giải mã. Trên cơ sở đó, hai ứng dụng trao đổi khoá chính (master key) - khoá bí mật hay khoá đối xứng - để làm cơ sở cho việc mã hoá luồng thông tin/dữ liệu qua lại giữa hai ứng dụng chủ khách. Toàn bộ cấp độ bảo mật và an toàn của thông tin/dữ liệu phụ thuộc vào một số tham số:
Số nhận dạng theo phiên làm việc ngẫu nhiên;
Cấp độ bảo mật của các thuật toán bảo mật áp dụng cho SSL;
Độ dài của khoá chính (key length) sử dụng cho lược đồ mã hoá thông tin. Có thể tóm tắt cơ chế của SSL như sau:
- Client phát sinh 1 Session Key ngẫu nhiên khi truy cập đến Server - Client yêu cầu Server gởi Certificate (gồm Public Key của Server) - Client kiểm tra tính hợp lệ của Certificate
- Nếu Certificate của Server hợp lệ, Client mã hóa Session Key bằng Public Key của Server
- Client gởi Session Key đã mã hóa cho Server
- Server giải mã Session Key đã được mã hóa bằng Private Key
- Các thông tin trao đổi giữa server và client sẽ được mã hóa và giải mã bằng Session Key
Hiện nay, khi public một web site lên internet, để áp dụng cơ chế mã hóa SSL chúng ta phải thuê SSL Certificate cho Web Server từ các tổ chức cung cấp Digital Certificate như: Verisign, CyberTrust, EnTrust…
2.3.3. Các thuật toán mã hóa trong SSL
Các thuật toán mã hoá và xác thực của SSL được sử dụng bao gồm (phiên bản 3.0):
- DES - chuẩn mã hoá dữ liệu (ra đời năm 1977), phát minh và sử dụng của chính phủ Mỹ;
- DSA - thuật toán chữ ký điện tử, chuẩn xác thực điện tử, phát minh và sử dụng của chính phủ Mỹ;
- KEA - thuật toán trao đổi khoá, phát minh và sử dụng của chính phủ M ỹ; - MD5 - thuật toán tạo giá trị”bǎm” (message digest), phát minh bởi Rivest; - RC2, RC4 - mã hoá Rivest, phát triển bởi công ty RSA Data Security; - RSA - thuật toán khoá công khai, cho mã hoá và xác thực, phát triển bởi Rivest, Shamir và Adleman;
- RSA key exchange - thuật toán trao đổi khoá cho SSL dựa trên thuật toán RSA;
- SHA-1 - thuật toán hàm băm an toàn, phát triển và sử dụng bởi chính phủ Mỹ;
- SKIPJACK - thuật toán khoá đối xứng phân loại được thực hiện trong phần cứng Fortezza, sử dụng bởi chính phủ Mỹ;
– Triple-DES - mã hoá DES ba lần.
2.4. Hàm băm (Cryptographic hash function) 2.4.1. Giới thiệu hàm băm 2.4.1. Giới thiệu hàm băm
Trong ngành mật mã học, một hàm băm mật mã học (tiếng Anh: Cryptographic hash function) là một hàm băm với một số tính chất bảo mật nhất định để phù hợp việc sử dụng trong nhiều ứng dụng bảo mật thông tin đa dạng, chẳng hạn như chứng thực (authentication) và kiểm tra tính nguyên vẹn của thông điệp (message integrity). Một hàm băm nhận đầu vào là một xâu ký tự dài (hay thông điệp) có độ dài tùy ý và tạo ra kết quả là một xâu ký tự có độ dài cố định, đôi khi được gọi là tóm tắt thông điệp (message digest) hoặc chữ ký số (digital fingerprint).
Nói rộng, một hàm băm phải hoạt động càng giống với một hàm ngẫu nhiên càng tốt, trong khi vẫn có tính chất đơn định và tính toán có hiệu quả. Một hàm băm mật mã học được coi là không an toàn nếu một trong các việc sau là khả thi về mặt tính toán:
- Cho một tóm tắt (digest), tìm một thông điệp (chưa biết) khớp với tóm tắt đó - Tìm các “xung đột băm” (hash collision), trong đó hai thông điệp khác nhau có tóm tắt trùng nhau. Nếu có thể thực hiện một trong hai việc trên, một người có thể tấn công bằng cách dùng các cách trên để thay một thông điệp không được xác nhận (unauthorized message) vào chỗ của một thông điệp được xác nhận.
2.4.2. Ứng dụng của hàm băm
Hình 2.4: Ví dụ hàm băm
Một ứng dụng điển hình của một hàm băm mật mã học như sau: Alice đưa cho Bob một câu đố khó và tuyên bố rằng cô ấy đã giải được rồi. Bob muốn tự giải, nhưng cũng muốn chắc chắn là Alice đúng là đã giải được. Do đó, Alice viết đáp án, gắn thêm một nonce ngẫu nhiên, tính giá trịbăm của nó, và đưa kết quả băm cho Bob (trong khi vẫn giữ bí mật đáp án và nonce). Bằng cách này, khi Bob tự giải xong, Alice có thể chứng minh rằng cô đã có đáp án từ trước bằng cách đưa nonce cho Bob. Trong thực tiễn, Alice và Bob thường là các chương trình máy tính, và bí