NỘI DUNG
Kết thúc Phần 5, tôi nghĩ chắc đã đủ các nội dung cơ bản về Asymmetric Encryption. Kỳ này tôi sẽ chuyển sang đại ca Symmetric Encryption.
Và trước khi đâm đầu vô đống Symmetric Encryption, tôi xin phép nhắc lại cái thông tin quan trọng về Symmetric Encryption và Asymmetric Encryption để bạn tiện theo dõi.
Thông số | Symmetric Encryption | Asymmetric Encryption |
Sử dụng | Mã hóa và giải mã với cùng 1 Key (khóa) | Mã hóa và giải mã với 2 Key khác nhau (Public Key và Private Key)
Bảo mật thông tin: Mã hóa bằng Public Key, giải mã bằng Private Key Chữ ký số: Mã hóa bằng Private Key, giải mã bằng Public Key |
Tốc độ | Nhanh hơn Asymmetric Encryption | Chậm hơn Symmetric Encryption |
Ưu điểm | Xử lý nhanh, ít tốn tài nguyên nên thuận tiện cho việc mã hóa lượng lớn thông tin | Giải quyết vấn đề bảo mật trong “key exchange” (trao đổi khóa) của Symmetric Encryption dựa trên Diffie-Hellman (DH) key exchange algorithm |
Nhược điểm | “Key exchange” là tử huyệt của Symmetric Encryption vì không có cách nào để bảo đảm vấn đề bảo mật khi trao đổi khóa (lựa chọn giải pháp face-to-face giao khóa tận tay có tồn tại trên lý thuyết chứ làm thực tế thì bốc sh*t!) | Tốn nhiều tài nguyên và thời gian để xử lý hơn Symmetric Encryption. Do vậy thường chỉ dùng ở đoạn trao đổi khóa, sau đó thì hệ thống sẽ chuyển Symmetric Encryption với cái khóa mới được trao đổi cho nhanh, bổ rẻ |
Đại diện | Advanced Encryption Standard (AES) | Rivest–Shamir–Adleman (RSA)
Elliptic Curve Cryptography (ECC) |
Và bạn cũng nên nhớ lại: “… Asymetric Encryption sẽ được sử dụng trước để hỗ trợ quá trình trao đổi khóa của Symetric Encryption. Sau đó Symetric Encryption key này sẽ được sẽ được sử dụng cho các quá trình mã hóa tiếp theo…” để hình dung vì sao lại phải thò ra cái ông Symmetric Encryption khi đã có Asymmetric Encryption.
OK, tôi sẽ đi vào phần tóm lược các thể loại Symetric Encryption Algorithm trước và sau đó “soi kèo” một đại diện ưu tú là Advanced Encryption Standard (AES) để nắm được bí mật về sức mạnh của thuật toán này là gì.
#1 Kính thưa các thể loại Symmetric Encryption Algorithm
Thực tế có thể có khá nhiều loại Symetric Encryption Algorithm, tuy nhiên, tôi nghĩ về cơ bản có mấy đại diện quan trọng như sau.
Algorithm | Cipher block | Key size |
RC4 | Stream cipher | 40 – 2048 bit |
DES | 64 bit | 56 bit |
3DES | 64 bit | 56, 112, 168 bit |
Blowfish | 64 bit | 32 – 448 bit |
Twofish | 128 bit | 128, 192, 256 bit |
AES | 128 bit | 128, 192, 256 bit |
Góc trợ giúp:
– Stream Cipher: Mã hóa dữ liệu theo từng bit (hoặc byte);
– Block Cipher: Mã hóa dữ liệu theo từng Block với size cụ thể ví dụ như 64 hoặc 128 bit;
– Cipher block: Là kích thước của block dữ liệu được mã hóa. Tùy thuộc vào Algorithm (thuật toán), kích thước Cipher block có thể khác nhau;
– Key size: Là kích thước của Encryption Key. Tùy thuộc vào Algorithm, Key size có thể khác nhau. Nguyên lý chung thì key size mã hóa càng lớn thì năng lực mã hóa càng mạnh.
Thông tin về các algorithm được tóm lược như sau:
- RC4: Đây là phiên bản phổ biến của Rivest Cipher thuộc dạng Symmetric Stream Cipher với Key size 40 – 2048 bit. RC4 ngày xưa từng là lựa chọn chuẩn “cmn” mực cho SSL/TLS trong mã hóa kết nối HTTPS. Tuy nhiên đã xuất hiện thông tin NSA có thể crack RC4 từ năm 2013 nên RC4 hiện đang phải nhường ghế nóng cho AES;
- Data Encryption Standard (DES): Đây là dạng Symmetric Block Cipher mã hóa theo Cipher block 64 bit. Với Key size tương đối nhỏ nên DES hiện không còn được khuyến nghị sử dụng nữa;
- 3DES (Triple DES): Đây cũng là dạng Symmetric Block Cipher cải tiến từ DES. Về cơ bản, nó sử dụng DES algoritm qua “three passes” (3 chặng – nên ở đây mới thọt ra chữ Triple) với nhiều khóa để mã hóa dữ liệu theo Cipher block 64 bit. Dù cũng được công nhận là đối thủ mạnh nhưng ông này lại bị đánh giá không hiệu quả bằng AES. 3DES có thể sử dụng các Key size 56, 112, 168 bit;
- Blowfish và Twofish: Blowfish thuộc dạng Symmetric Block Cipher mạnh mã hóa theo Cipher block 64 bit hiện vẫn đang được sử dụng rộng rãi với Key zise 32 – 448 bit. Khi so sánh về tốc độ với AES-256, Blowfish có thể chiến thắng vì dùng mã hóa theo Cipher block 64 bit thay vì 128 bit của AES. Twofish là họ hàng với Blowfish nhưng mã hóa theo Cipher block 128 bit với Key zise 128, 192 và 256 bit. Tôi nghĩ tên gọi Twofish (“2 con cá”) chắc để ám chỉ là nó tốt hơn Blowfish (“1 con cá”) thôi vì thực tế 2 vị này dùng phương pháp mã hóa khác nhau. Ngoài ra, tác giả của thuật toán Bruce Schneier cũng có khuyến nghị nên dẹp mịa cái Blowfish và thay bằng Twofish rồi. Nếu bạn search thêm có thể sẽ thấy Threefish nữa nhưng cái đó tôi xin đề cập trong một diễn biến khác!
- AES: Cuối cùng, đây hiển cũng là dạng Symmetric Block Cipher mã hóa dữ liệu theo Cipher block 128 bit. AES được NIST đánh giá là giải pháp tốt nhất trong danh sách nhiều đối thủ nặng ký như 3DES và Twofish. AES có thể sử dụng các Key size 128, 192, 256 bit. Vì quá trình encrypt và decrypt “one pass” (một chặng) nên khá nhanh và hiệu quả hơn so với 3DES nhưng AES vẫn duy trì được Confidentiality ở mức cao.
Góc trợ giúp: Nếu muốn biết thêm SSL/TLS, bạn bơi vào đây nhé Giải ngố WWW – Phần 3: HTTPS có gì ngon hơn HTTP
#2 Giả mã bí mật về sức mạnh của AES
Trước hết về tổng thể, quá trình Encryption và Decryption được tóm lược như sau.
Góc trợ giúp: Bạn đừng phát hoảng với cái đám “quái vật” ở trên. Tôi sẽ lần lượt giới thiệu và “giết thịt” từng em trong các nội dung tiếp theo
Nếu bạn để ý kỹ sẽ thấy thật ra sẽ chỉ có 4 điểm mấu chốt được lập đi lập lại qua nhiều Round (kiểu như vòng lặp) để chuyển từ Plaintext thành Ciphertext. 4 điểm này bao gồm:
- Add round key
- Substitute bytes
- Shift rows
- Mix columns
Do vậy, nếu bạn có thể nắm rõ 4 điểm này thì xem như đã “bắt thóp” được ông AES rồi đấy.
#2.1 Add round key
Trong bước này, mỗi byte dữ liệu của Plaintext sẽ XOR với một byte tương ứng trong Subkey Ki tương ứng.
Góc trợ giúp:
– Cái ma trận [a0,0-a3,3] tương ứng 128 bit Cipher block của AES. Mỗi thành phần a trong ma trận có size là 1 byte (8 bits) nên 16 thành phần x 8 bits = 128 bits;
– Cái Plaintext ban đầu sẽ bị chặt ra thành nhiều “cục” cùng kích thước 128 bit Cipher block như trên;
– Ngoài cái Add round key xuất hiện trong 10 Round chính như hình minh họa trên, bạn sẽ thấy có thọt ra một ông Add round key ban đầu với K0 = w[0,3] hay ma trận [k0,0-k3,3]. Về nguyên lý, công việc Add round key là tương tự nhau nên bạn nắm một cái thôi là được rồi;
– XOR là logic operation dùng trong một số dạng mã hóa, với ý tưởng “so sánh xem 2 đầu vào có giống nhau hay không – nếu giống thì ra 1 (True) – không giống thì ra 0 (False)”. Phép toán cụ thể như sau:
- 1 XOR 1 = 1
- 0 XOR 0 = 1
- 0 XOR 1 = 0
#2.2 Substitute bytes
Trong bước này, mỗi byte dữ liệu tiếp tục được thay thế bằng một byte theo bảng tra.
Cụ thể, mỗi byte dữ liệu (8 bits) sẽ được chia làm 2 phần 4 bits (gọi là Nibble), 4 bits đầu sẽ tương ứng với Row Index và 4 bits sau sẽ tương ứng với Column Index trong bảng tra AES S-box.
#2.3 Shift rows
Trong bước này, các byte dữ liệu trong mỗi dòng sẽ di chuyển sang trái với mức độ tùy theo vị trí dòng:
- Dòng 0: Không di chuyển
- Dòng 1: Sang trái 1 ô
- Dòng 2: Sang trái 2 ô
- Dòng 3: Sang trái 3 ô
#2.4 Mix columns
Trong bước này, một ma trận Maximum Distance Separable (MDS) sẽ được sử dụng để nhân với ma trận dữ liệu tương ứng 128 bit Cipher block của AES.
Góc trợ giúp:
– Ma trận MDS được sử dụng nhằm mục tiêu “Diffusion” trong Block Cipher
– Diffusion có nghĩ là khi Plaintext có thay đổi nhỏ thì Ciphertext sẽ có thay đổi lớn.
Việc nhân 2 ma trận thế nào thì thôi bạn tra Google giúp cái nhé, đến đoạn này tôi bắt đầu thấm mệt rồi. Đến đây về cơ bản bạn đã có thể “xử đẹp” thằng AES rồi đấy. Hẹn gặp lại bạn trong nội dung kỳ tới.
2 thoughts on “Giải ngố Cryptography – Phần 6: Symmetric Encryption và bí mật về sức mạnh của Advanced Encryption Standard (AES)”