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 toá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 toá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 toán mật mã ở chế độ ECB không an toà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 toá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 toà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 toà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 toán mật mã khối ở chế độ CBC 4.2.2.2 Giải thuật DES (Data Encryption Standard)
Thuật toá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 toá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 toà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 toán DES cho trên hình 4.4.
Plaintext block (64 bits) Key (64 bits) Khởi tạo hoán vị Bỏ parity (56 bits)
Round 1 Round 2
Round 16 Đảo khởi tạo hoán vị Ciphertexxt block (64 bits)
Hình 4.4: Sơ đồ thuật toá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 hoán vị bởi phép hoá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 hoán vị đảo RP (Reversed Permulation) và tạo thành khối ciphertext. Thực chất các hoán vị này không là tăng tính an toà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. Li-1 Ri-1 Ki Dịch Dịch Li Ri Ki-1 32 32 32 32 48 48 56 56 S-Box (Thay thế) Hoán vị mở rộng P-Box (Hoán vị) Hoán vị nén Khóa Khóa 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:
- Hoá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 hoá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à hoá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 hoán vị dịch để tạo thành Ci và Di. Sau khi hoá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 toàn. Số lượng các khóa bí mật cần thiết khi sử dụng một thuật toá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.
Computer Computer Computer Computer Computer A B C D F E KAF, KBF, KCF, KDF, KEF KAB, KAC, KAD, KAE, KAF. KAB, KBC, KBD, KBE, KBF. KAE, KBE, KCE, KDE, KEF. KAC, KBC, KCD, KCE, KCF. KAD, KBD, KCD, KDE, KDF.
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 toá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 toà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 toán mật mã mới đáp ứng được những yêu cầu an toàn dữ liệu ngày càng cao. Trong số các thuật toá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 toá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 toán RC5.
- Twofish (Bruce Schneier): thực hiện mạng Fiestel 16 vòng, cải tiến thuật toán Blowfish.
- Serpent (Ross Anderson/ Eli Biham/ Lars Knudsen): Thực hiện mạng hoán vị thay thế 32 vòng.
- Rijndael (Joan Daemen/ Vincent Rijimen): Thực hiện mạng hoán vị thay thế cải tiến 10 vòng.
Trong 5 thuật toá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 toá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ộ.
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
Hình 4.7: Mật mã luồng
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 toàn bộ lịch sử của mật mã khóa. Những thuật toán công khai đều dựa trên những hàm toán học hơn là những nhóm thay thế và hoá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
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
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 toàn để truyền khóa bảo mật.
Các yêu cầu của mật mã khóa công khai:
Công việc tính toá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 toá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 toá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 toá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 toá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 toá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 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 toá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 toán mật mã RSA. Thực tế, để thực hiện được các thuật toán với kích thước khóa lớn đòi hỏi một lượng tính toán rất lớn liên quan đến vấn đề lý thuyết số như thuật toán Euclide để tìm USCLN của hai số nguyên hay thuật toá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 toán trao đổi khóa Diffie-Hellman
Thuật toá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
nguyên lớn ban đầu: P nguyên lớn ban đầu: P