Tùy thuộc vào cách thức chuyển các khối plaintext đầu vào thành các khối ciphertext đầu ra mà các thuật tốn mật mã khối được phân loại theo các chế độ làm việc khác nhau, trong đĩ cĩ ECB, CBC và OFB.
Chế độ sách mã điện tử ECB (Electronic Code Book Mode):đối với thuật tốn mật mã khối ECB, một khối plaintext đầu vào được ánh xạ tĩnh thành một khối ciphertext đầu ra. Với những nguồn tài nguyên bộ nhớ hưu hạn, cĩ thể xây dựng một bảng tra cứu (loopup table) hay danh sách mã điện tử (Electronic Code Book) để ánh xạ ngược một khối ciphertexxt về dạng plaintext tương ứng.
Hình 4.2: Chếđộ chính sách mã điện tử ECB
Như vậy, các thuật tốn mật mã ở chếđộ ECB khơng an tồn đối với những tấn cơng kiểu phát lại (replay attacks), trong đĩ kẻ tấn cơng lưu lại khối ciphertext (cĩ khả
năng chứa thơng tin mật) để cĩ thể giải mã ở những thời điểm sau đĩ.
Chế độ chuỗi khỗi mật mã CBC (Cipher Block Chaining Mode) để ngăn chặn các tấn cơng kiểu phát lại, các thuật tốn mật mã khối hiện nay thường hoạt động ở chế độ CBC. Mỗi khối plaintext được XOR với khối ciphertext trước đĩ rồi mới thực hiện mật mã. Như vậy các khối plaintext giống nhau xuất hiện trong cùng một bản tin sẽ tạo thành các khối ciphertext khác nhau.
Tại phía thu, mỗi ciphertext sau khi thực hiện giải mã sẽ được XOR với khối ciphertext thu được trước đĩ để nhận được khố plaintext tương ứng. Nếu một lỗi bit xảy ra thì sẽ làm sai tồn bộ khối plaintext tương ứng, cùng với một lỗi bit trong khối plaintext kế tiếp. Như vậy ảnh hưởng của lỗi chỉ giới hạn trong hai khối plaintext mà thơi.
Bất cứ bản tin được mật mã CBC nào cũng phải được khởi tạo bởi một véc tơ
IV (Initialization Vector). IV được truyền qua kênh khơng an tồn ở thời điểm bắt đầu của phiên truyền dẫn. Để tránh các tấn cơng kiểu lặp lại, giá trị IV chỉ sử dụng một lần.
Điều này cĩ thể thực hiện được bằng cách gán giá trị ngẫu nhiên những tăng đơn thuần cho IV. P1 P2 P3 E E E C1 C2 C3 C1 C2 C3 D D D P1 P2 P3
Hình 4.3: Thuật tốn mật mã khối ở chếđộ CBC 4.2.2.2 Giải thuật DES (Data Encryption Standard)
Thuật tốn DES được đưa ra vào năm 1977 tại Mỹ và đã được sử dụng rất rộng rãi. Nĩ cịn là cơ sởđể xây dựng một thuật tốn tiên tiến hơn là 3DES. Hiện nay, DES vẫn được sử dụng cho những ứng dụng khơng địi hỏi tính an tồn cao, và khi chuẩn mật mã dữ liệu mới là AES chưa chính thức thay thế nĩ. DES mã hĩa các khối dữ liệu 64 bit với khĩa 56 bit. Sơđồ thuật tốn DES cho trên hình 4.4.
Hình 4.4: Sơđồ thuật tốn DES P1 P2 P3 E E E IV C2 C3 C1 C2 C3 D D D P1 P2 P3
Phía phát Phía thu
C1
Trước hết 64 bit T đưa vào được hốn vị bởi phép hốn vị khởi tạo IP (Initial Permutation), khơng phụ thuộc vào khĩa T0 = IP(T). Sau khi thực hiện 16 vịng lặp, dữ
liệu được đi qua các bước hốn vị đảo RP (Reversed Permulation) và tạo thành khối ciphertext. Thực chất các hốn vị này khơng là tăng tính an tồn DES.
Trung tâm của mỗi vịng lặp xử lý DES là mạng Fiestel (được đặt theo tên của một nhà khoa hoc tại IBM). Hoạt động của mạng Fiestel được diễn tả như sau:
T =L0R0 với L0 = t1 …t32, R0 = t33 …t64.
Xét ở vịng lặp thức i (0<i<16): Li = Ri-1, Ri = Li-1⊕ F(Ri-1, Ki) trong đĩ ⊕ là phép cộng XOR và Ki là khĩa 48 bit. Ở vịng lặp cuối cùng các nhánh trái và phải khơng đổi chỗ chi nhau, vì vậy input của IP-1 là R16L16. Trong đĩ hàm F được thể hiện là khối hộp đen.
Hình 4.5: Mạng Fiestel
a) Hoạt động của khối hộp đen
Khá phức tạp, trong đĩ nĩ gồm cĩ các khối chức năng và nhiệm vụ như sau:
- Hốn vị mở rộng: Mở rộng Ri-1 32 bít đầu vào thành khối 48 bít. Hoạt
động mở rộng này dựa vào một bảng định trước để lựa chọn các bít đầu ra. Sau đĩ các bít sau hốn vị mở rộng được XOR với khĩa Ki.
- S-box: Kết quả sau khi XOR được chia thành 8 khối 6 bít từ B1 tới B6. Mỗi khối Bj sau đĩ được đưa vào một hàm Sj. Hàm Sj này sẽ trả lại các khối 6 bit thành khối 4 bit theo bảng định trước.
- P-Box: Các khối 4 bit sau khi được trả lại sẽ kết hợp với nhau thành khối 32 bít đầu ra của hộp đen.
b) Hoạt động tính khĩa:
Khĩa input ban đầu là một khối 64 bít, sau khi bỏđi 8 bít parity và hốn vị 56 bít cịn lại theo một trật tự nhất định. DES tạo ra 16 khĩa, mỗi khĩa cĩ chiều dài 48 bit từ một khĩa input 56 bit, dùng cho 16 vịng lặp. Tại mỗi vịng lặp, khĩa Ki-1 được chia thành hai phần là Ci-1 và Di-1. Sau đĩ các bit của hai thành phần Ci-1 và Di-1 được hốn vị
dịch để tạo thành Ci và Di. Sau khi hốn vị, Ci bỏ qua các bít 9, 18, 22, 25 tạo thành nữa trái của KI (24 bit) và Di bỏ qua các bít 35, 38, 43, 54 tạo ra nữa phải của Ki (24 bít). Ghép nữa trái và nữa phải tạo ra khĩa Ki 48 bít.
c) Giải mã: Quá trình giải mã thực hiện các bước này theo thứ tự ngược lại.
d) Phân phối khĩa
Nhược điểm lớn nhất của các hệ thống mật mã khĩa đối xứng là vấn đề phân phối các khĩa bí mật thơng qua kênh khơng an tồn. Số lượng các khĩa bí mật cần thiết khi sử dụng một thuật tốn mật mã khĩa đối xứng với n đối tác tham gia sẽ là
2 / ) 1 ( 2 =n n−
Cn . Cĩ thể thấy việc phân phối các khĩa bí mật sẽ trở nên hết sức khĩ khăn khi số lượng đối tác tham gia trao đổi thơng tin lớn. Hình 4.6 chỉ ra việc phân phối khĩa trong hệ thống mật mã khĩa đối xứng.
Hình 4.6: Phân phối khĩa trong hệ thống mật mã khĩa đối xứng 4.2.2.3 Giới thiệu AES (Advanced Encryption Standard)
Thuật tốn DES với khĩa 56 bit đã được phát triển cách đây gẩn 28 năm, và hiện khơng cịn phù hợp với những ứng dụng địi hỏ tính an tồn dữ liệu cao (đặc biệt
các ứng dụng về quân sự, hoặc thương mại điện tử). Đây là lý do cần phát triển các thuật tốn mật mã mới đáp ứng được những yêu cầu an tồn dữ liệu ngày càng cao. Trong số các thuật tốn mới được phát triển gần đây cĩ 3DES (Triple DES) với khĩa cơng khai 168 bít và đặc biệt là AES. Năm 1997, NIST (US National Institute of Standards and Technology) đã tổ chức lựa chọn những thuật tốn sau:
- MARS (IBM): Cải tiến mạng Fiestel, thực hiện 32 vịng và dựa trên cấu trúc kết hợp của DES.
- RC6 (RSA): Thực hiện mạng Fiestel 20 vịng, cải tiến thuật tốn RC5. - Twofish (Bruce Schneier): thực hiện mạng Fiestel 16 vịng, cải tiến thuật tốn Blowfish.
- Serpent (Ross Anderson/ Eli Biham/ Lars Knudsen): Thực hiện mạng hốn vị thay thế 32 vịng.
- Rijndael (Joan Daemen/ Vincent Rijimen): Thực hiện mạng hốn vị
thay thế cải tiến 10 vịng.
Trong 5 thuật tốn trên, NIST đã chọn Rijindael cho chuẩn AES vào năm 2000. Trong tương lai, AES sẽ là chuẩn mật mã khối đối xứng và sẽ được thực hiện trên cả phần cứng lẫn phần mềm. AES sẽđược thiết kếđể cĩ thể tăng độ dài khĩa khi cần thiết. Độ
dài khối dữ liệu của AES là n = 128 bít, cịn độ dài khĩa k = 128, 192, 256 bit.
4.2.2.4Thuật tốn mật mã luồng (stream cipher)
Mật mã luồng dựa trên một bộ tạo luồng khĩa (key stream generator) để tạo nên một chuỗi số giả ngẫu nhiên (pseudo-random sequence) khởi tạo bởi một khĩa bí mật (secret key). Chuỗi khĩa được XOR với chuỗi bit plaintext. Tại phía thu, một bộ tạo khĩa giống hệt khởi tọa bởi cùng một khĩa bí mật được đồng bộ với chuỗi ciphertext
đầu vào. Phía thu phục hồi plaintext bằng cách XOR chuỗi ciphertext với chuỗi khĩa
đã đồng bộ.
Hình 4.7: Mật mã luồng
Khĩa
Bộ tạo chuỗi giả ngẫu nhiên
Luồng bit Plaintext Luồng bit ciphertext Luồng bit plaintext 1 1 1 1 1 1 Luồng bít giả ngẫu nhiên 1 0 0 1 1 0 Luồng bit ciphertext 0 1 1 0 0 1
4.2.3 Hệ thống mật mã khĩa cơng khai
4.2.3.1 Giới thiệu và lý thuyết về mã khĩa cơng khai
Hệ thống mật mã khĩa cơng khai cịn được gọi là hệ thống mật mã khĩa khơng
đối xứng, vì theo như cĩ chế mật mã này thì khĩa được dùng để mã hĩa gĩi tin và khĩa được dùng để giải mã là khác nhau. Sự phát triển của mật mã khĩa cơng khai cĩ ý nghĩa rất lớn và tạo ra một cuộc cách mạng trong tồn bộ lịch sử của mật mã khĩa. Những thuật tốn cơng khai đều dựa trên những hàm tốn học hơn là những nhĩm thay thế và hốn vị trong mật mã khĩa cổ điển. Trong hệ thống mật mã khĩa cơng khai thì mỗi đối tác tham gia sẽ sở hữu một cặp khĩa duy nhất, bao gồm một khĩa bí mật (được lưu bí mật bởi đối tác) và một khĩa cơng khai tương ứng (được phát trong các thư mục cơng cộng). Hai khĩa này cĩ quan hệ với nhau để đảm bảo rằng khĩa cơng khai thực hiện chức năng mã hĩa và khĩa bí mật thực hiện chức năng giải mã.
Các bước cần thiết trong quá trình mã hĩa khĩa cơng khai:
• Một hệ thống cuối trong mạng tạo ra một cặp khĩa để dùng cho mã hĩa và giải mã đoạn tin mà nĩ sẽ nhận.
• Mỗi hệ thống cơng bố rộng rãi khĩa mã hĩa bằng cách đặt khĩa vào một thanh ghi hay một file cơng khai. Đây là khĩa cơng khai, khĩa cịn lại được giữ riêng.
• Nếu A muốn gửi một đoạn tin tới B thì A sẽ mã hĩa đoạn tin bằng khĩa cơng khai của B.
• Khi B nhận được đoạn tin mã hĩa, nĩ giải mã bằng khĩa bí mật của mình. Khơng một người nào khác cĩ thể giải mã đoạn tin mã này bởi vì chỉ minh B biết khĩa bí mật đĩ thơi.
Hình 4.8: Sơđồ mã khĩa cơng khai
Với cách tiếp cận này, tất cả những người tham gia cĩ thể truy xuất khĩa cơng khai. Khĩa bí mật được tạo ra bởi từng các nhân, vì vậy khơng bao giờđược phân bố.
Ở bất kì thời điểm nào, hệ thống cũng cĩ thể chuyển đổi cặp khĩa đểđảm bảo tính bảo mật mà khơng cần sử dụng kênh thơng tin an tồn để truyền khĩa bảo mật.
Khĩa cơng khai
Đoạn tin Khĩa bí mật Đoạn tin được mật mã Đoạn tin User A Giải thuật mã hĩa Giải thuật giải mã User B Kênh truyền
Các yêu cầu của mật mã khĩa cơng khai:
Cơng việc tính tốn thì dễ dàng cho người nhận B: tạo cặp khĩa cơng khai KU và khĩa bí mật KR.
Cơng việc tính tốn thì dễ dàng cho người nhận A: biết khĩa cơng khai và
đoạn tin cần mã hĩa M, để tạo mật mã tương ứng C=EKub(M).
Cơng việc tính tốn dễ dàng cho người nhận B để thực hiện giải mã: sử
dụng khĩa bí mật để giải mã đoạn tin mã hĩa C, khơi phục lại đoạn tin ban đầu.
M = DKRb(C) = DKRb[EKUb(M)]
Cơng việc tính tốn khơng thể thấy trước đối với địch thủ biết khĩa cơng khai KUb để xác định khĩa bí mật KRb.
Cơng việc tính tốn khơng thể thấy trước đối với địch thủ biết khĩa cơng khai KUb và đoạn tin mật mã C để khơi phục đoạn tin ban đầu M.
Chức năng mã hĩa và giải mã cĩ thểđược áp dụng theo thứ tự:
M = DKRb[EKUb(M)] M = EKUb[DKRb(M)]
Cĩ thể nhận thấy rằng việc tính Y = f(X) thì dễ dàng trong khi tính X=f-1(Y) là khơng thể thấy trước. Nĩi chung từ “dễ dàng” được xác định bởi 1 bài tốn là nĩ cĩ thể được giải quyết trong thời gian nhất định (nĩ phụ thuộc vào chiều dài input). Nếu chiều dài input là n bít thì thời gian để tính hàm đĩ tỉ lệ với na . Để đảm bảo tính bảo mật thì phải sử dụng khĩa cĩ kích thước đủ lớn (thường trên 100 chữ số thập phân). Ví dụ kích thước khĩa và thời gian bẻ khĩa (MIPS tính theo năm) trong các giải thuật RSA/DSS và ECC như sau.
Bảng 4.2: Thời gian bẻ khĩa trong giải thuật RSSA/DSS và ECC.
RSA ECC MIPS (năm)
512 768 1024 106 132 160 104 108 1012
4.2.3.2 Hệ thống mật mã khĩa cơng khai RSA
RSA do Rivest, Shamir và Adleman phát triển năm 1977. Sơđồ RSA là sơđồ
mã hĩa từng khối, với mỗi khối cĩ giá trị nhỏ hơn n. Việc mã hĩa và giải mã theo hình thức sau, cho khối văn bản M và khối bảo mật C:
C = Me mod n
M = Cd mod n = (Me)d mod n = Mde mod n
Cả người gửi và nhận phải biết giá trị n, người gửi biết e và chỉ cĩ người nhận biết d. Cho nên đây là giải thuật mã hĩa với khĩa cơng khai KU = [e,n] và khĩa bí mật KR = [d,n]. Vì giải thuật này thỏa giải thuật mã khĩa cơng khai nên các yêu cầu sau phải được đáp ứng:
Cĩ thể tìm thấy giá trị d, e, n để: M = Mde mod n với mọi M<n hay khơng?
Một cách tương đối dễ dàng tính Me và Cd với mọi M<n hay khơng?
Khơng thể xác định d khi biết e và n.
Theo lý thuyết Euler: cho 2 số nguyên p và q, 2 số nguyên n và m (n=p*q, 0<m<n) và số nguyên k. Ta cĩ:
mk0(n)+1mod n= mk(p-1)(q-1)+1 mod n= m mod n 0(n)=0(pq)=(p-1)(q-1)
Do đĩ:
Nếu: de = k0(n) + 1 và gcd(0(n),e)=1 (gcd: ước số chung lớn nhất) Thì: de mod 0(n) = 1 và d mod 0(n) = e-1
Sơđồ RSA:
• Giả sử user A đã cơng bố khĩa cơng khai e của nĩ và user B muốn gửi
đoạn tin M tới A. Khi đĩ B tính C=Me mod n và truyền C. Khi nhận được đoạn tin C này, user A giải mã bằng cách tính Cd mod n. Cĩ thể thấy rằng M=Cd mod n vì:
de mod 0(n) = 1 hay de = k0(n)+1
→ Mk0(n)+1mod n = Mk(p-1)(q-1)+1mod n=M mod n=(Mde mod n) modn=Mde mod n Cd mod n = (Me)dmod n = Mde mod n = M
Cĩ thể tĩm tắt giải thuật RSA như bảng sau:
Bảng 4.3: Tĩm tắt giải thuật RSA và độ phức tạp
Tạo khĩa Độ phức tạp
Tạo 2 số nguyên tố lớn p và q Tính n = p*q, 0(n) = (p-1)*(q-1)
Chọn 1 số ngẫu nhiên 1<e<0(n): gcd (0(n),e) = 1 Tính d: d=e-1mod 0(n) (giải thuật Euclidean mở rộng) Khĩa cơng khai KU=[e,n]
Khĩa bí mật KR=[d,n]
0((log n)2) 0(log(0(n))2) 0((log n)3)
Ví dụ về quá trình mật mã và giải mã của thuật tốn RSA: Chọn p = 3, q = 11. Khi đĩ ta cĩ n = pq = 33 và (p-1)(q-1) = 20 = 2*5*5. Giá trị e được chọn phải quan hệ
nguyên tố với 20 , nghĩa là khơng chứa các ước số 2,5 và e < 20. Ta chọn e = 3, d = 7. Khi đĩ ta cĩ: Phía mật mã: Giả sử cĩ bản tin: M = {10, 9, 5, 20} → M3={1000, 729, 125, 8000} và C=M3 mod 33={10, 3, 26, 14}. Phía giải mã: C7 ={107, 2187, 267, 147} M=C7 mod 33{10, 9, 5, 20}
Kích thước khĩa RSA: tùy thuộc vào tính bảo mật và thời gian sống của khĩa mà khĩa cĩ chiều dài thích hợp:
• Loại Export: : 512 bít. • Loại Personnal : 768 bit. • Loại Commercial : 1024 bit. • Loại Militery : 2048 bit.
Trên đây là những nội dung chính của thuật tốn mật mã RSA. Thực tế, để thực hiện được các thuật tốn với kích thước khĩa lớn địi hỏi một lượng tính tốn rất lớn liên quan đến vấn đề lý thuyết số như thuật tốn Euclide để tìm USCLN của hai số
nguyên hay thuật tốn Miller-Rabin để kiểm tra tính nguyên tố của các số tự nhiên này.
4.2.4 Thuật tốn trao đổi khĩa Diffie-Hellman
Thuật tốn Diffie-Hellman cho phép hai bên trao đổi với nhau một khĩa bí mật chung. Các bước thực hiện như sau:
Bảng 4.4: Các bước thực hiện để trao đổi khĩa Diffie Hellman
Bên A Mạng Bên B Đồng ý với bên B về sử dụng số nguyên lớn ban đầu: P → ← Đồng ý với bên A về sử dụng số nguyên lớn ban đầu: P Đồng ý về số nguyên làm nhiệm vụ tạo khĩa: G → ← Đồng ý về số nguyên làm nhiệm vụ tạo khĩa: G Chọn lọc số bí mật: A → ← Chọn lọc số bí mật: B
Tính số cơng cộng: X=GAmod P Tính số cơng cộng: Y=GBmod P Gửi số X tới bên B X→ ←Y Gửi số X tới bên B Bây giờđã biết: P, G, A, X, Y Bây giờđã biết: P, G, B, X, Y
Tính KA=YAmod P Tính KB=XBmod P
Bây giờ đã cĩ khĩa bảo mật chia