Mời các bạn tiếp tục tới với phần thứ tư của loạt bài Hệ thống mật mã. Trong phần này, chúng ta sẽ tìm hiểu về Confidentiality - Mã hóa. Phần này gồm có các nội dung:
- Encryption (mã hóa)
- Data Encryption Standard (DES)
- 3DES
- Advanced Encryption Standard (AES)
- Alternate Encryption Algorithms (các thuật toán mã hóa thay thế)
- Diffie-Hellman Key Exchange (thuật toán trao đổi khóa DH)
Các thuật ngữ trong bài:
- Secret key: khóa bí mật (chỉ cấp cho bên truyền và bên nhận)
- Symmetric keys: khóa đối xứng
- Asymmetric keys: khóa bất đối xứng
- Block ciphers: mã hóa khối
- Stream ciphers: mã hóa dòng
- Block size: kích thước khối dữ liệu
- Input data: dữ liệu đầu vào
- Output data: dữ liệu đầu ra
1. Encryption
Kỹ thuật mã hóa có thể cung cấp tính năng bí mật cho cả 7 layers trong mô hình OSI bằng cách kết hợp với các công cụ hoặc giao thức, như sau:
- Các thiết bị độc quyền đảm bảo an toàn tại tầng 2 (Data Link)
- Các giao thức đảm bảo an toàn cho tầng 3 (Network) như IP Security …
- Các giao thức như SSL hoặc TLS đảm bảo tính bí mật tại tầng 5 (Session)
- Bảo mật email, database … tại tầng 7 (Application)
Có 2 phương pháp đảm bảo an toàn dữ liệu khi sử dụng các phương thức mã hóa. Đó là: bảo vệ bản thân thuật toán (algorithm) , và bảo vệ bằng khóa (keys).Với phương pháp bảo vệ bằng keys, có 2 loại thuật toán mã hóa căn bản là: đối xứng (symmetric) và bất đối xứng (asymmetric).
Thuật toán mã hóa đối xứng sử dụng một khóa chung, còn gọi là secret key, để mã hóa và giải mã. Khóa này cần chia sẻ trước (pre-shared) cho bên truyền và bên nhận. Vì secret key được bảo vệ bởi sender và receiver nên có thể chọn thuật toán mã hóa sử dụng key với độ dài ngắn hơn và làm cho việc tính toán nhanh hơn. Thông thường, thuật toán đối xứng tính toán đơn giản hơn thuật toán bất đối xứng và có thể tăng tốc bằng phần cứng chuyên dụng.
Nếu cần mã hóa lượng dữ liệu lớn, người ta chọn thuật toán đối xứng. Thách thức khi sử dụng thuật toán đối xứng là việc quản lý khóa. Secret key cần được trao đổi bằng kênh an toàn cho sender và receiver trước khi truyền dữ liệu.
Thuật toán bất đối xứng sử dụng các khóa khác nhau để mã hóa và giải mã và không dùng đến pre-shared key. Vì cả 2 bên truyền và nhận không có shared secret key nên cần dùng khóa có độ dài rất lớn để ngăn chặn attackers. Các thuật toán này tiêu tốn nhiều tài nguyên và tính toán chậm. Trong thực tế, thuật toán bất đối xứng thường tính toán chậm hơn hàng trăm hoặc hàng nghìn lần so với thuật toán đối xứng.
Các thuật toán mã hóa đối xứng phổ biến là DES, 3DES, AES, Software Encryption Algorithm (SEAL), và Rivest ciphers (RC) series. Ngoài ra còn có Blowfish, Twofish, Threefish, và Serpent…
Kỹ thuật phổ biến sử dụng trong mã hóa đối xứng là block ciphers (mã hóa khối) và stream ciphers (mã hóa dòng).
- Block ciphers: phương pháp này mã hóa một khối dữ liệu gốc (plaintext) có độ dài cố định thành một khối dữ liệu đã mã hóa (ciphertext) có kích thước thông thường là 64 hoặc 128 bits. Block size là ám chỉ đến lượng dữ liệu được mã hóa tại một thời điểm. Nếu input data nhỏ hơn block size thì thuật toán sẽ thêm vào các bit giả. Phương pháp này thường cho kết quả đầu ra có kích thước lớn hơn so với dữ liệu gốc đầu vào.
- Stream Ciphers: phương pháp này mã hóa từng bit một của dữ liệu gốc và có tốc độ nhanh hơn so với block ciphers. Stream ciphers không làm tăng kích thước của dữ liệu.
Có 2 tiêu chí chính khi chọn thuật toán mã hóa là:
- Được cộng đồng bảo mật tin cậy
- Thuật toán đủ an toàn với brute-force attacks
2. Data Encryption Standard (DES)
DES thường sử dụng kỹ thuật block ciphers (và cũng có thể sử dụng mã stream ciphers). Thuật toán thực hiện trình tự đơn giản là hoán vị và thay thế data bits với một encryption key.
DES sử dụng 2 chế độ block ciphers chuẩn là: Electronic Code Book (ECB) hoặc Cipher Block Chaining (CBC).
Cả 2 chế độ này đều dùng phép toán logic XOR.
Với ECB, nếu plaintext blocks giống nhau thì ciphertext blocks cũng như nhau. Do đó, attckers có thể phán đoán tính chất tương tự hoặc khác biệt của dữ liệu trên kênh truyền.
Với CBC, mỗi 64-bit plaintext block thực hiện phép XOR với ciphertext block trước sau đó tiếp tục mã hóa với DES key. Nếu plaintext blocks giống nhau thì kết quả có thể vẫn khác nhau.
3. 3DES
3DES sử dụng thuật toán DES 3 lần với 3 key khác nhau để mã hóa plaintext blocks. Thuật toán này rất tin cậy vì attacker gần như là không thể tấn công brute-force. Tuy nhiên, 3DES tiêu tốn khá nhiều tài nguyên.
4. Advanced Encryption Standard (AES)
AES sử dụng thuật toán Rijndael, do Joan Daemen và Vincent Rijmen phát triển. Rijndael là thuật toán lặp và sử dụng block và key có độ dài thay đổi. Để có được kết quả cuối cùng, input block khởi tạo và cipher key bị biến đổi nhiều vòng.
Một khóa 128, 192 hoặc 256 bits có thể được sử dụng để mã hóa các data blocks có kích thước 128, 192 hoặc 256 bits. Rijndael được thiết kế để dễ dàng tăng kích thước block hoặc key theo bội số của 32 bits và việc sử dụng tài nguyên tính toán cũng được tối ưu hóa.
AES hiệu quả hơn so với DES và 3DES, nhất là trong môi trường yêu cầu thông lượng cao, độ trễ thấp và đặc biệt là nếu chỉ sử dụng phần mềm để thực thi mã hóa.
5. Các thuật toán mã hóa thay thế
Software-optimized Encryption Algorithm (SEAL) là một thuật toán thay thế cho DES, 3DES và AES. Đây là thuật toán mã hóa dòng và sử dụng khóa có độ dài 160 bits. SEAL cũng sử dụng ít tài nguyên khi tính toán.
RC là thuật toán sử dụng rộng rãi trong nhiều ứng dụng mạng vì tốc độ tốt và cho phép dùng khóa có độ dài thay đổi. Thuật toán RC được sử dụng rộng rãi gồm có RC2, RC4, RC5 và RC6.
6. Diffie-Hellman Key Exchange
Hiện nay, DH là thuật toán hiện đại nhất về trao đổi khóa tự động và là một trong những giao thức sử dụng phổ biến nhất trong hệ thống mạng. DH không phải là một cơ chế mã hóa và không được sử dụng để mã hóa dữ liệu.
Thay vì thế, nó là một phương thức trao đổi an toàn các khóa dùng cho mã hóa dữ liệu. Trong hệ thống khóa đối xứng, hai bên truyền và nhận phải sử dụng khóa chung. Việc bảo mật cho hoạt động trao đổi khóa này luôn là một thách thức.
Hoạt động này đã được tự động hóa và đảm bảo an toàn bởi thuật toán DH. Thuật toán này cho phép bên sender và receiver có thể tạo ra một shared secret key mà không cần phải trao đổi trước.
DH thường được sử dụng khi trao đổi dữ liệu bằng IPsec VPN, SSL/TLS, hoặc SSH.
Thuật toán DH có các bước xử lý như sau:
Như vậy là chúng ta đã kết thúc phần 4, hẹn gặp lại các bạn ở phần thứ 5.