Các thuật toán mã hoá khoá bí mật hiện nay đƣợc phát triển dựa trên nền tảng của hệ mã hóa cổ điển. Thuật toán có nhiều tên gọi khác nhau nhƣ thuật toán khóa bí mật, thuật toán khóa đơn giản hay thuật toán một khóa. Các thuật toán cổ điển sử dụng cùng một khóa cho mã hóa và giải mã nên yêu cầu phải có sự thoả thuận trƣớc giữa ngƣời gửi và ngƣời nhận về việc sử dụng khóa và khóa này phải đƣợc giữ bí mật
Hình 2.3: Mô hình thuật toán khoá bí mật a) Thuật toán DES và TripleDES:
DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ liệu) là một phƣơng pháp mật mã hóa đƣợc FIPS (Tiêu chuẩn xử lý thông tin Liên bang Hoa Kỳ) [12] chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này
Reytuyiofgjhkjj ghghghugh fg Fgghgjhjjhjhj cvcvrègh bvvcsFgyoipk, hjmccxbvbssds dsdsxcczxxzxv cbvcvcbvvcccz xcxcxcxc Reytuyiofgjhkjj ghghghugh fg Fgghgjhjjhjhj cvcvrègh
plaintext ciphertext plaintext
18
đƣợc sử dụng rộng rãi trên phạm vi thế giới. Ngay từ đầu, thuật toán của nó đã gây ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa tƣơng đối ngắn, và các nghi ngờ về cửa sau để cơ quan An ninh quốc gia Hoa Kỳ (NSA) có thể bẻ khóa. Do đó, DES đã đƣợc giới nghiên cứu xem xét rất kỹ lƣỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối (block cipher) và các phƣơng pháp thám mã tƣơng ứng.
Hiện nay DES đƣợc xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chƣa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn. Thuật toán đƣợc tin tƣởng là an toàn trong thực tiễn có dạng Triple DES (thực hiện DES ba lần), mặc dù trên lý thuyết phƣơng pháp này vẫn có thể bị phá. Gần đây DES đã đƣợc thay thế bằng AES (Advanced Encryption Standard, hay tiêu chuẩn mã hóa tiên tiến).
Trong một số tài liệu, ngƣời ta phân biệt giữa DES (là một tiêu chuẩn) và thuật toán DEA (Data Encryption Algorithm, hay thuật toán mã hóa dữ liệu) - thuật toán dùng trong chuẩn DES.
Lịch sử phát triển :
Khởi nguyên của thuật toán đã có từ đầu thập niên 1970. Vào năm 1972, sau khi tiến hành nghiên cứu về nhu cầu an toàn máy tính của chính phủ Hoa Kỳ, Cục Tiêu chuẩn Liên bang Hoa Kỳ (National Bureau of Standard - NBS), hiện nay đã đổi tên thành Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (National Institute of Standards and Technology - NIST), đã nhận ra nhu cầu về một tiêu chuẩn của chính phủ dùng để mật mã hóa các thông tin mật/nhạy cảm. Vào ngày 15 tháng 5 năm 1973, sau khi tham khảo với NSA, NBS đƣa ra kêu gọi thiết kế một thuật toán mã hóa có thể đáp ứng đƣợc các tiêu chuẩn nghiêm ngặt. Tuy nhiên không có đề xuất nào đáp ứng đƣợc yêu cầu đề ra. Ngày 27 tháng 8 năm 1974, NBS đƣa ra kêu gọi lần thứ hai. Lần này công ty IBM đã đƣa ra một đề xuất có thể chấp nhận đƣợc. Đề xuất này đƣợc phát triển trong những năm 1973-1974 dựa trên một thuật toán đã
19
có từ trƣớc - thuật toán mật mã Lucifer của Horst Feistel. Đội ngũ tại công ty IBM liên quan tới quá trình thiết kế bao gồm: Feistel, Walter Tuchman, Don Coppersmith, Alan Konheim, Carl Meyer, Mike Matyas, Roy Adler, Edna Grossman, Bill Notz, Lynn Smith và Bryant Tuckerman. Các chế độ họat động của DES
Có bốn chế độ làm việc đã đuợc phát triển cho DES - Chế độ sách mã điện tử (ECB).
- Chế độ phản hồi mã (CFB).
- Chế độ liên kết khối mã (CBC – Cipher Block Chaining). - Chế độ phản hồi đầu ra (OFB).
Nhận xét: Hạn chế của DES, đó chính là kích thƣớc của không gian khóa 256 là quá nhỏ để đảm bảo an toàn thật sự. DES đã trải qua nhiều năm đánh giá và ―tấn công‖ và đƣợc xem là an toàn. Chỉ vào tháng 7/1997 DES bị tấn công thành công bởi nhiều máy tính nối qua Internet, nhƣng ngay cả những kẻ tấn công cũng cho rằng DES vẫn an toàn đối với nhiều ứng dụng.
b) TripleDES
TripleDES một biến thể an toàn hơn của DES còn đƣợc gọi là DESede hay 3DES. TripleDES có tính bảo mật cao hơn DES do sử dụng 3 vòng DES với các khóa khác nhau. Vòng đầu tiên và vòng thứ ba là vòng mã hóa, vòng thứ hai là vòng giải mã. DESede có thể dùng hai hoặc ba khóa có độ dài 56, 112 hoặc 168. nếu dùng hai khóa thì khóa đầu tiên đƣợc dùng cho vòng thứ nhất và vòng thứ ba, khóa thứ hai dùng cho vòng thứ hai.
- Thuật toán
Triple DES sử dụng một "bó chìa khóa" đó bao gồm ba DES phím, K 1, K 2, K 3, mỗi 56 bit (không bao gồm các bit chẵn lẻ ). Các thuật toán mã hóa là:
ciphertext = E K3 (D K2 (E K1 (plaintext)))
Tức là, DES mã hóa với K1, DES giải mã với K2, sau đó mã hóa DES với K3. Giải mã là ngƣợc lại:
20
plaintext = D K1 (E K2 (D K3 (ciphertext))) Tức là, giải mã với K3, mã hóa với K2, sau đó giải mã với K1.
Mỗi mã hóa ba mã hóa một khối 64 bit dữ liệu.
Trong mỗi trƣờng hợp hoạt động giữa là đảo ngƣợc của ngƣời đầu tiên và cuối cùng. Điều này cải thiện sức mạnh của thuật toán khi sử dụng tùy chọn keying 2, và cung cấp khả năng tƣơng thích ngƣợc với DES với tùy chọn 3 khóa.
3DES Mã hóa với ba khóa 56 bit (Mã hóa với hai khóa 56 bit ( 112 bit)) NGƢỜI GỬI
Bƣớc 1: Mã hóa plaintext bằng khóa thứ nhất
Bƣớc 2: Mã hóa văn bản đƣợc tạo ra ở bƣớc 1 bằng khóa thứ hai
Bƣớc 3: Mã hóa văn bản đƣợc tạo ra ở bƣớc 2 bằng khóa thứ ba, tạo ra bản mã gửi cho ngƣời nhận.
NGƢỜI NHẬN
Bƣớc 1: Giải mã bản mã với khóa thứ ba
Bƣớc 2: Giải mã văn bản đƣợc tạo ra ở bƣớc 1 bằng khóa thứ hai
Bƣớc 3: Giải mã văn bản đƣợc tạo ra ở bƣớc 2 bằng khóa thứ nhất, tạo ra bản gốc do ngƣời gửi gửi tới.
3DES Mã hóa với hai khóa 56 bit: Mã hóa với một khóa 56 bit NGƢỜI GỬI
Bƣớc 1: Mã hóa plaintext bằng khóa thứ nhất
Bƣớc 2: Giải mã văn bản đƣợc tạo ra ở bƣớc 1 bằng khóa thứ hai
Bƣớc 3: Mã hóa văn bản đƣợc tạo ra ở bƣớc 2 bằng khóa thứ nhất, tạo ra bản mã gửi cho ngƣời nhận.
NGƢỜI NHẬN
Bƣớc 1: Giải mã bản mã với khóa thứ nhất
Bƣớc 2: Mã hóa văn bản đƣợc tạo ra ở bƣớc 1 bằng khóa thứ hai
Bƣớc 3: Giải mã văn bản đƣợc tạo ra ở bƣớc 2 bằng khóa thứ nhất, tạo ra bản gốc do ngƣời gửi gửi tới.
21
Mặc dù 3DES có tính bảo mật cao hơn DES, nhƣng thực tế ít đƣợc sử dụng vì để tạo ra đƣợc bản mã phải chạy ba lần DES, chiếm nhiều bộ nhớ nên tốc độ chậm.
c) AES – Advanced Encrypt Standard:
Từ những nhƣợc điểm của DES và Triple DES, tháng 9/1997 Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ (NIST) chính thức kêu gọi hƣởng ứng cuộc thi xây dựng thuật toán cho AES.
Từ tháng 8/1998 đến 5/2000 sau hai vòng thi chọn ra đƣợc năm phƣơng án vào chung kết, với sự chọn lựa tỉ mỉ cả năm thuật toán từ mọi phƣơng diện, ban tổ chức đã chọn Rijndael làm thuật toán cho AES. Rijndael đƣợc phát triển bởi Joan Daemen và Vincent Rijman. Rijndael cho phép độ dài của khóa là 128, 192, và 256. Block của thuật toán này là có kích thƣớc 128, 192, 256.
Các tính năng của AES nhƣ sau
Symmetric mật mã khối đối xứng chính
dữ liệu 128-bit, các phím 128/192/256-bit
Mạnh hơn và nhanh hơn so với Triple-DES
Cung cấp các đặc điểm kỹ thuật đầy đủ và chi tiết thiết kế
Phần mềm thực hiện đƣợc trong C và Java
d) Blowfish:
Năm 1993 Bruce Schneier phát triển Blowfish là thuật toán mã hóa khối. Blowfish có tốc độ nhanh có tính bảo mật cao hơn DES. Độ dài khóa cũng lớn hơn rất nhiều so với DES, 3DES có thể lên tới 448 bit.
Thuật toán Blowfish cũng mã hóa từng block 64 bit gồm hai phần: Phần phát triển khóa và phần mã hóa dữ liệu
Phát triển khóa: chuyển một khóa có độ dài lớn nhất 448 bit thành một mảng khóa con tổng cộng 4168 byte.
Mã hóa dữ liệu: đƣợc thực hiện qua 16 vòng.
d) IDEA – International Data Encryption Algorithm
22
IDEA là một giải thuật mã hóa khóa mật theo khối đƣợc phát triển bởi Viện công nghệ Swiss Federal. Nó dùng khóa 128 bit so với khóa 56 bit của DES và mã hóa một khối 64 bit tại mỗi thời điểm. Giải thuật đƣợc phép sử dụng tự do, và không đòi hỏi bản quyền. Nó đƣợc hiện thực trong PGP (Pretty Good Privacy), một công cụ mã hóa thƣờng đƣợc dùng trong các chƣơng trình e-mail.
IDEA đang đƣợc toàn xã hội thừa nhận và đƣợc xem nhƣ một sự chọn lựa tốt hơn cả DES (Data Encrytion Standard). Tốc độ mã hóa cao, và nó đƣợc hiện thực trên các chíp có thể mã hóa ở tốc độ 177 Mbits/sec. Giải thuật đƣợc xem là phù hợp cho thƣơng mại điện tử và có thể áp dụng cho toàn thế giới
e) PBE ( Password – Based Encryption)
PBE – là thuật toán dùng password nhƣ một khóa. PBE dùng kết hợp giữa hashing và một thuật toán trong hệ mã hóa khóa bí mật. Password đƣợc hash dùng thuật toán Message digest SHA-1. Bản hash này đƣợc dùng nhƣ một khóa thông thƣờng trong hệ mã hóa khóa bí mật.
- Password: Mật khẩu, là một hay nhiều từ mà ngƣời dùng phải biết để đƣợc cấp quyền truy cập.
- Key Derivation Function: Là một hàm hash đƣợc thiết kế sao cho khóa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển. Hàm này đƣợc thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số ngẫu nhiên để tạo ra một khóa có độ an toàn cao hơn. Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là iteration.
Ví dụ một mật khẩu là "pandoras B0x", cùng với salt là "230391827", đi qua hàm hash SHA-1 1000 lần cho kết quả là một khóa có độ dài 160 bit nhƣ sau: 3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dƣới dạng số thập lục phân).
- Hàm Hash (hash function) là hàm một chiều mà nếu đƣa một lƣợng dữ liệu bất kỳ qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
- Hai tính chất quan trọng của hàm này là:
23
• Tính duy nhất: Xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.
- Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: Chƣơng trình chống xâm nhập so sánh giá trị hash của một file với giá trị trƣớc đó để kiểm tra xem file đó có bị ai đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp đƣợc gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trƣớc và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất.
• Tạo khóa từ mật khẩu. • Tạo chữ kí điện tử.
SHA-1 và MD5 là hai hàm hash thông dụng nhất và đƣợc sử dụng trong rất nhiều hệ thống bảo mật.
Hình 2.4: Sơ đồ mã hóa PBE ban đầu
PBE không có tính bảo mật cao nhƣ các thuật toán khóa nhị phân (nhƣ 3DES, Blowfish…) Đặc trƣng của PBE là sử dụng bộ kí tự ASCII. Với password có độ dài khoảng 6 kí tự thì không gian khóa khoảng 266
(tƣơng đƣơng 228). Nhằm nâng cao khả năng bảo mật ngƣời ta đã sử dụng thêm hai yếu tố là salt và iteration trƣớc khi mã hóa. Salt là một giá trị ngẫu nhiên đƣợc gắn vào password trƣớc khi
Password Password Message Digest Message Digest Hash Hash Symmetric Cipher Symmetric Cipher ciphertext Plaintext
24
hash tạo ra khóa mã hóa dữ liệu. Iteration quy định số lần salt và password đƣợc hash.
Hình 2.5: Sơ đồ mã hóa PBE khi thêm salt
Hình 2.6: Sơ đồ giải mã PBE
Các thành phần dùng trong thuật toán
- Salt: Là một giá trị đƣợc lấy ngẫu nhiên đƣợc gắn vào password trƣớc khi hash, làm không gian khóa tăng thêm so với password ban đầu.
Plaintext Message Plaintext Message Password Password PBE Cipher PBE Cipher New salt New salt Ciphertext Ciphertext Salt Salt Ciphertext Ciphertext Encrypted Data Encrypted Data BASE64 Encode BASE64 Encode BASE64 Encode BASE64 Encode Ciphertext Ciphertext Password Password PBE Cipher PBE Cipher Salt Salt Ciphertext Ciphertext Encrypted Data Encrypted Data Salt Salt Ciphertext Ciphertext BASE64 Encode BASE64 Encode BASE64 Encode BASE64 Encode
25 Plain text Plain text Cipher text Cipher text Plain text Plain text Cipher text Cipher text Khóa công khai (Kp) Khóa bí mật (Ks) Plain text Plain text Salt đƣợc lƣu trữ cùng với dữ liệu đã đƣợc mã hóa. Mỗi lần mã hóa một mẩu (piece) dữ liệu, một salt mới đƣợc tạo ra. Khi giải mã salt sẽ đƣợc lọc ra từ dữ liệu đã đƣợc mã hóa. Dùng salt này gắn với password để giải mã
- Iteration count số lần hash password + salt. - BASE64 encoding
Dùng BASE64 để hiển thị dữ liệu theo chuẩn ASCII. Dữ liệu dạng nhị phân thƣờng đƣợc lƣu trữ dƣới dạng byte (8 bit). Chuẩn ASCII thì chỉ có 7 bit. Do đó muốn hiển thị dạng nhị phân của ASCII thì phải bỏ đi ít nhất một bit trên một byte.