SM4-GCM (Galois/Counter Mode)¶
1. Khái niệm & mục tiêu¶
SM4-GCM kết hợp block cipher SM4 (GB/T 32907-2016, bắt buộc trong WAPI) với AEAD GCM. Mục tiêu: đáp ứng yêu cầu tuân thủ chuẩn Trung Quốc, đồng thời thêm xác thực và song song hóa thay vì dùng CBC/ECB.
2. Toán học, công thức¶
- SM4: 32 vòng unbalanced Feistel; mỗi vòng dùng S-box 8x8 và tuyến tính L() trên \(GF(2^{32})\).
- GCM: CTR + GHASH trên \(GF(2^{128})\); tag = \(E_K(J_0) \oplus \text{GHASH}(AAD, C)\).
- Key duy nhất 128 bit; dễ triển khai phần cứng và phần mềm nhẹ.
3. Cách hoạt động¶
- Nonce 96-bit sinh ngẫu nhiên; tạo counter \(J_0\).
- SM4-CTR tạo keystream; XOR plaintext → ciphertext.
- GHASH(AAD, ciphertext) → tag 16 byte; giải mã chỉ khi tag khớp.
4. Cấu trúc dữ liệu¶
- Key: 128 bit (cố định).
- Nonce: 96 bit (12 byte) duy nhất per-key.
- Tag: 128 bit (16 byte).
- Block: 128 bit.
5. So sánh với AES-GCM¶
| Đặc điểm | SM4-GCM | AES-GCM |
|---|---|---|
| Chuẩn | GB/T 32907 (CN), WAPI | FIPS 197, toàn cầu |
| Hiệu năng HW nội địa | Tốt (chip TPM/TCM hỗ trợ) | Rất tốt với AES-NI |
| Độ dài key | 128 bit cố định | 128/192/256 |
6. Luồng dữ liệu (Sequence Diagram)¶
sequenceDiagram
participant Sender
participant SM4_GCM
participant Receiver
Sender->>SM4_GCM: Key, Nonce, Plaintext, AAD
SM4_GCM->>SM4_GCM: CTR Encrypt -> Ciphertext
SM4_GCM->>SM4_GCM: GHASH(AAD, Ciphertext) -> Tag
SM4_GCM->>Receiver: Nonce + Ciphertext + Tag
Note right of Receiver: Decryption
Receiver->>SM4_GCM: Key, Nonce, Ciphertext, Tag, AAD
SM4_GCM->>SM4_GCM: GHASH(AAD, Ciphertext) -> Calculated Tag
alt Tag Match
SM4_GCM->>SM4_GCM: CTR Decrypt -> Plaintext
SM4_GCM->>Receiver: Plaintext
else Tag Mismatch
SM4_GCM-->>Receiver: ERROR (Auth Failed)
end Hold "Alt" / "Option" to enable pan & zoom
7. Sai lầm triển khai phổ biến¶
- Nonce reuse: dùng lại nonce với cùng key → rò rỉ keystream và giả mạo.
- Không kiểm tag trước giải mã: dễ bị tấn công bit-flip trả về rác.
- Sai padding độ dài trong GHASH: quên thêm trường length 64-bit cho AAD/ciphertext.
- Dùng CBC/ECB thay vì GCM: mất xác thực, dễ tấn công hoán vị block.
8. Threat Model¶
- Tamper trên đĩa: sửa ciphertext → tag sai → giải mã bị từ chối.
- Nonce collision: RNG kém hoặc counter lỗi.
- Side-channel: triển khai bảng S-box phải constant-time (tránh cache timing).
9. Biện pháp giảm thiểu¶
- Nonce 96-bit duy nhất; lưu counter hoặc dùng CSPRNG chất lượng cao.
- Kiểm tra tag hằng thời gian trước khi xử lý plaintext.
- Đưa metadata (filename, version, policy) vào AAD; cân nhắc chống replay.
- Nếu mã hóa khối lượng lớn, cân nhắc xoay key để giảm rủi ro nonce collision.
10. Test Vectors¶
- Bộ vector công khai: GM/T 0002-2012 test set, RFC 8998 Appendix A (SM4 suite), và NIST CAVP (SM4-GCM) nếu có.
- Khuyến nghị tự sinh vector bằng OpenSSL (bản có SM4) hoặc Botan và lưu vào tests của FileVault.
11. Ví dụ code (OpenSSL CLI)¶
| Bash | |
|---|---|
12. Checklist bảo mật¶
- Nonce 96-bit duy nhất; không reuse.
- Tag 128-bit; so sánh hằng thời gian.
- Metadata vào AAD; chống replay nếu cần.
- Dùng thư viện được kiểm toán (OpenSSL/Botan) thay vì tự cài đặt.
- Kiểm thử bằng vector GM/T hoặc nội bộ sau mỗi thay đổi.
13. Hạn chế (nếu có)¶
- Khóa cố định 128-bit — không có tùy chọn độ dài lớn hơn như AES; không tự động cung cấp forward secrecy (phải kết hợp với KDF/EPHEMERAL keys).
- Rủi ro nếu reuse nonce hoặc cắt tag (truncated tag) → mất bảo mật/khả năng bị tấn công giả mạo.
- Giới hạn thực tế về lượng dữ liệu xử lý trên một cặp key/nonce (xem NIST SP 800-38D); vượt ngưỡng giảm an toàn.
- Vấn đề hiện thực: side-channel (S-box, table lookups), lỗi lập trình GHASH (padding/length) hoặc so sánh tag không hằng thời gian.
- Hỗ trợ phần cứng/driver có thể khác nhau theo nền tảng—tại một số môi trường ngoài Trung Quốc, SM4 HW acceleration ít phổ biến.
14. Ứng dụng¶
- Mã hóa file/volume và lưu trữ bảo mật (FileVault, secure backups).
- Giao thức mạng: TLS/DTLS/IPsec/SSH extensions khi cần chuẩn SM4 cho môi trường CN hoặc tương thích WAPI.
- Mã hóa endpoint/firmware, messaging và containers trong hệ sinh thái yêu cầu chuẩn Trung Quốc.
- Tích hợp TPM/TCM và thiết bị nhúng có hỗ trợ SM4 để tăng hiệu năng phần cứng.
15. Nguồn tham khảo¶
- GB/T 32907-2016 — SM4 standard (Trung Quốc).
- GM/T 0002-2012 — bộ test vectors SM4.
- NIST SP 800-38D — Galois/Counter Mode (GCM) specification.
- RFC 8998 — SM4 suite (tham khảo triển khai/profiles).
- NIST CAVP — kiểm thử và test vectors cho thuật toán khối/AEAD.
- OpenSSL, Botan documentation — ví dụ CLI/API cho SM4-GCM.
- Tài liệu nội bộ/whitepapers về WAPI và triển khai SM4 trên TPM/TCM.
(Add hoặc tham chiếu chính xác các link/tài liệu nội bộ theo chính sách dự án.)