NỘI DUNG
Kết thúc Phần 6, coi như bạn đã duyệt qua hết một lượt các món ăn chơi liên quan đến Cryptography rồi đấy. Và bây giờ là lúc để bạn xem xét tổng thể việc sử dụng các thành phần trên thực tế sẽ như thế nào.
Câu trả lời ngắn gọn là khi sử dụng kết hợp các yếu tố nói trên lại, bạn sẽ có được một thứ với tên gọi khá ngầu là Cipher Suites. Như vậy, trong kỳ này, tôi sẽ làm rõ xem cụ thể Cipher Suites là cái gì. Ngoài ra, tôi cũng sẽ xem xét kỹ cái khái niệm này thông qua một người quen cũ đã từng gặp đó là Transportation Layer Security (TLS).
#1 Các mảnh ghép của Cipher Suites
#1.1 Cipher Suites là gì?
Nói tổng quát thì Cipher Suites là nhóm các algorithm được sử dụng để triển phần handshake (bắt tay) và vấn đề encryption/decryption sau đó. Thông thường, Cipher Suites sẽ bao gồm các yếu tố:
- Key Exchange Algorithms
- Authentication/Digital Signature Algorithm
- Bulk Encryption Algorithms
- Message Authentication Code Algorithms
Góc trợ giúp:
- Phần encryption/decryption thì tôi nghĩ tương đối rõ rồi. Đối với cái handshake, bạn có thể tạm thời hình dung nó đúng nghĩa đen là bắt tay xã giao, giới thiệu bản thân và phương án làm việc với nhau. Tôi sẽ nói kỹ hơn nội dung này ở Mục 2.
- Nếu bạn quên thì TLS (hay SSL/TLS) là ông được sử dụng trong HTTPS và cũng xuất hiện trong quá trình cấu hình OpenVPN;
Xét cụ thể đối với một ví dụ của TLS 1.2 Cipher Suite như sau:
- Key Exchange Algorithms: Đây là thuật toán trao đổi khóa với đại diện như RSA, DH, …. Trong ví dụ trên bạn thấy nó đang dùng ECDHE. Bạn có thể xem kỹ hơn ở nội dung Giải ngố Cryptography – Phần 3: Đảm bảo Confidentiality với Encryption và Diffie-Hellman Key Exchange Protocol
- Authentication/Digital Signature Algorithm: Đây là thuật toán chữ ký số/ xác thực với đại diện như RSA, ECDSA,… Trong ví dụ trên bạn thấy nó đang dùng ECDSA. Bạn có thể xem kỹ hơn ở nội dung Giải ngố Cryptography – Phần 5: Elliptic Curve Cryptography (ECC) và ứng dụng trong Blockchain.
Giải ngố Cryptography – Phần 5: Elliptic Curve Cryptography (ECC) và ứng dụng trong Blockchain
- Bulk Encryption Algorithms: Đây là thuật toán mã hóa đối xứng (Symmetric Encryption) được sử dụng chính trong quá trình mã hóa với đại diện nổi bật là AES. Trong ví dụ trên bạn thấy nó đang dùng AES_128_GCM. Với Block Ciphers, Encryption Algorithms sẽ đi kèm với thông tin về Cipher Modes (trong ví dụ trên thì nó là cái GCM, tôi sẽ đề cập vấn đề này ngay bên dưới để tránh đâm ngang hông đứt mạch câu chuyện đang trình bày). Bạn có thể xem kỹ hơn ở nội dung Giải ngố Cryptography – Phần 6: Symmetric Encryption và bí mật về sức mạnh của Advanced Encryption Standard (AES).
- Message Authentication Code Algorithms: Đây là thuật toán Hashing phụ vụ cho việc đảm bảo Intergrity với đại diện nổi bật là SHA-256. Bạn có thể xem kỹ hơn ở nội dung Giải ngố Cryptography – Phần 2: Đảm bảo Integrity với Hashing Algorithm.
Giải ngố Cryptography – Phần 2: Đảm bảo Integrity với Hashing Algorithm
#1.2 Cipher Modes là gì?
Với Symmetric Encryption, bạn sẽ có 2 dạng là Stream Cipher và Block Cipher. Và với Block Cipher, bạn có thể gặp với nhiều mode of operation (hiểu đơn giản là chế độ vận hành):
- Electronic Codebook (ECB): ông này đơn giản nhất, sử dụng 1 key, đã dính phốt và banh, nên hiển nhiên không nên sử dụng;
- Cipher Block Chaining (CBC): phổ biến với Symmmetric Block Cipher. Đại ca này dùng Initialization Vector (IV) để tăng độ ngẫu nhiên khi mã hóa block đầu sau đó kết hợp các block sau với block trước đó dùng XOR nên có thể bị pipeline delay, giảm hiệu quả;
- Conter (CTM): chuyển Block Cipher sang Stream Cipher bằng cách kết hợp IV với Counter rồi dùng làm key mã hóa các plaintext block. Giải pháp này cho phép xử lý song song nên tốc độ sẽ nhanh mà không làm giảm độ bảo mật nên CTM được sử dụng phổ biến;
- Galois/Counter Mode (GCM): kết hợp CTM với Galois mode (cung cấp data authencity/integrity và confidentiality). Như vậy ngoài mã hóa GCM còn sử dụng Hashing cho Integrity.
Góc trợ giúp:
- 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ó khác nhau hay không – nếu khác thì ra 1 (True) – không giống thì ra 0 (False)”;
- IV cung cấp giá trị ban đầu cho thuật toán. IV có thể là số ngẫu nhiên hoặc “giả” ngẫu nhiên (Random and pseudo-random numbers) có kích thước cố định để hỗ trợ việc tạo encryption key ngẫu nhiên. Lý tưởng thì IV nên đủ lớn để tránh việc bị sử dụng lại dẫn đến sản sinh ra cùng 1 encryption key.
- Random and pseudo-random numbers: Máy tính không thực sự có thể sinh ra một số ngẫu nhiên mà sẽ sử dụng một số kỹ thuật để tạo số “giả” ngẫu nhiên – nghĩa là có vẻ ngẫu nhiên nhưng vẫn phải dựa trên deterministic algorithm (nói dễ hiểu là có thể lập lại quá trình này nếu biết rõ thông tin input).
#2 TLS Cipher Suites
Đến đây tôi nghĩ chắc bạn đã hình dung sơ bộ được cái thằng Cipher Suites rồi. Tuy nhiên, để cho rõ ràng hơn, trong mục này tôi sẽ bàn thêm một số chi tiết với ông thần TLS.
Với TLS, cụ thể Handshake là quá trình client và server thống nhất về Cipher Suite sẽ được sử dụng để tạo kết nối bảo mật. Ví dụ với TLS 1.2, quá trình Handshake được tóm lược như sau:
- Client và server xác định Cipher Suite được hỗ trợ bởi cả 2 phía;
- Server gửi Certificate và Public Key cho client;
- Client xác thực Certificate và Digital Signature;
- 2 bên triển Key Exchange Protocol để tạo Symmetric Sesion Keys;
- Quá trình mã hóa bắt đầu và HMAC được dùng để bảo đảm quá trình Handshake không bị can thiệp.
Từ đầu đến giờ có một chỗ hơi lấn cấn đó là việc tôi không chỉ sử dụng SSL/TLS như mọi khi mà còn xen kẽ dùng TLS 1.2 và TLS 1.3. Trong phần bên dưới, tôi sẽ bới móc cái vấn đề này ra để bàn kỹ thêm.
#2.1 SSL/TLS – cuộc đời và sự nghiệp
Tôi nhớ đã có lần nói về nguồn gốc của SLL bắt nguồn từ ông Netscape ở đâu đó rồi. Nhưng để khỏi mắc công lục lại, bạn có thể theo theo dõi “cuộc đời và sự nghiệp” của SSL/TLS như sau.
Góc trợ giúp: Chữ Deprecated bên trên hàm ý là version đó đã banh rồi, tốt nhất là không nên dùng nữa
Mấy cái chuyện xưa cũ với ông Netscape hồi thập niên 90 thế kỉ trước (nghe xa xăm vãi!) bạn đọc cho vui thôi, vấn đề quan trọng là “Hiện giờ thiên hạ chúng nó đang xài cái gì?”. Nếu nhìn vào dòng lịch sử trên bạn chắc cũng đoán được 2 ông đang ngồi mâm trên là TLS 1.2 và TLS 1.3 (mấy ông còn lại đã bị liệt vào dạng nên tránh xa rồi).
Theo các nguồn đáng tin cậy từ cộng đồng mạng, hiện tại TLS 1.2 vẫn chiếm thị phần vượt trội. Điều này một phần là do các hệ thống cũ chưa thể chuyển một phát lên ngay TLS 1.3 được. Tuy nhiên, tôi nghĩ ngày TLS 1.3 vượt mặt đàn anh TLS 1.2 chắc cũng không còn xa.
#2.2 TLS 1.2 vs TLS 1.3
Thực tế nếu muốn so sánh đối chiếu kỹ TLS 1.2 và TLS 1.3, chắc tôi phải phải lê thê trong ít nhất vài phần nữa. Tuy nhiên, vì chủ đề chính hôm nay là Cipher Suite nên tôi xin phép chỉ tập trung đề cập về vấn đề này khi xem xét TLS 1.2 và TLS 1.3. Để dễ hình dung bạn xem lại ví dụ sau.
TLS 1.2 Cipher Suite bao gồm 4 thành phần:
Do RSA Key Exchange có vấn đề với Oracle Padding Attack và vì Perfect Forward Secrecy là bắt buộc với TLS 1.3, Cipher Suites mặc định sẽ sử dụng dòng họ nhà Ephemeral Diffie-Hellman làm Key Exchange và Signature Algorithm nên nó được ghi rút gọn lại còn 2 thành phần với ví dụ như sau.
Chỗ này bạn cần đặc biệt lưu ý là TLS 1.3 “được ghi rút gọn lại còn 2 thành phần”, khác hoàn toàn với việc chỉ sử dụng 2 thành phần nhé (thực tế nó vẫn dùng 4 như TLS 1.2). Liên quan đến phần so sánh chi tiết TLS 1.2 và TLS 1.3 tôi thấy cũng khá hay nhưng thôi xin hẹn lại vào kì tới vậy.
1 thought on “Giải ngố Cryptography – Phần 7: 4 yếu tố quan trọng của Cipher Suites và ứng dụng trong Transportation Layer Security (TLS)”