Sequence Key (Sequence Number / Session Sequence) là gì?
Trong bảo mật mạng, Sequence Key thường chỉ Sequence Number (Số thứ tự gói tin/phiên) – một giá trị số tăng dần (monotonically increasing) được gán cho từng gói tin hoặc bản ghi trong một phiên giao tiếp an toàn (secure session). Mục đích: ngăn chặn Replay Attack (tấn công phát lại) và đảm bảo tính thứ tự (ordering) của luồng dữ liệu.
Vai trò cốt lõi
- Anti-Replay (Chống phát lại): Receiver duy trì cửa sổ trượt (sliding window) của các sequence number đã nhận. Gói tin có sequence number ≤ window thấp nhất hoặc đã có trong window → drop (loại bỏ).
- Reordering / Loss Detection: Phát hiện gói tin mất, đến sai thứ tự → yêu cầu retransmit (TCP) hoặc xử lý theo logic ứng dụng (DTLS, QUIC, IPsec).
- Key Derivation / Key Rotation: Sequence number đôi khi dùng làm input cho KDF (Key Derivation Function) để sinh khóa phiên con (per-record key) – ví dụ: TLS 1.3 record layer, IPsec ESP.
- State Synchronization: Đồng bộ trạng thái giữa sender/receiver trong stateful protocol (TCP, IPsec SA, TLS record layer, SSH, DTLS, QUIC).
Ứng dụng trong các giao thức bảo mật chính
| Giao thức | Cơ chế Sequence Number | Kích thước | Chống Replay |
|---|---|---|---|
| IPsec ESP (RFC 4303) | 32-bit Sequence Number (mỗi SA). Sender tăng 1 mỗi gói. Receiver: sliding window 64-bit (mặc định). | 32-bit (mở rộng 64-bit ESN - Extended Sequence Number) | Anti-replay window (default 64 packets). |
| TLS 1.2 / 1.3 Record Layer | Implicit 64-bit sequence number (mỗi direction, mỗi epoch). Không truyền trên dây (implicit). Dùng cho AEAD nonce construction. | 64-bit (implicit) | Receiver track window, drop duplicate/old. |
| DTLS 1.2 / 1.3 | Explicit 16-bit epoch + 48-bit sequence number (trên dây). Xử lý reorder/loss do UDP. | 64-bit (epoch+seq) | Sliding window, bitmap. |
| SSH (RFC 4253) | 32-bit packet sequence number mỗi direction. Dùng trong MAC calculation (Encrypt-then-MAC). | 32-bit | Drop nếu seq không tăng dần. |
| QUIC (RFC 9000) | Packet Number (PN) 62-bit (variable-length encoding). Mỗi packet space (Initial, Handshake, 0-RTT, 1-RTT) có PN riêng. | 62-bit | ACK frame xác nhận PN nhận được, drop duplicate. |
| SRTP (RFC 3710) | 48-bit rollover counter (ROC) + 16-bit sequence number = 64-bit index. Dùng cho key derivation (AES-GCM, AES-CM). | 64-bit | Replay list / bitmap. |
Sequence Key vs Session Key vs Master Key
- Master Key (MK): Khóa gốc (từ key exchange: DH, ECDH, RSA, PSK) – dùng để derive các khóa khác.
- Session Key / Traffic Key: Khóa mã hóa/xác thực cho một phiên (derive từ MK + nonces).
- Sequence Number (Sequence Key): KHÔNG PHẢI KHÓA MÃ HÓA – là counter công khai (hoặc implicit) dùng để đảm bảo tính tươi (freshness) và trật tự, đầu vào cho nonce/IV construction.
Lỗ hổng liên quan đến Sequence Number
- Sequence Number Wraparound: 32-bit SN hết giá trị sau 4 tỷ gói tin (IPsec) → cần Extended Sequence Number (ESN 64-bit) cho high-speed link.
- Replay Window quá lớn / không kiểm tra: Cho phép gói tin cũ được chấp nhận.
- IV/Nonce reuse do Sequence Number reset: Nếu session resume/rekey không reset sequence đúng cách → nonce reuse → catastrophic failure cho AES-GCM/ChaCha20-Poly1305.
- Side-channel timing attack trên sequence number check.
Best Practice triển khai
- Luôn bật Anti-Replay (IPsec: `replay-window`, TLS/DTLS: built-in).
- Dùng Extended Sequence Number (ESN) cho IPsec high-throughput (>1Gbps sustained).
- Đảm bảo Key Rotation / Rekey trước khi sequence number wraparound (IPsec: rekey dựa trên time/volume).
- Triển khai Constant-time sequence check để tránh timing side-channel.
- Audit log: ghi nhận sequence gap lớn (potential attack/loss).
Kết luận
Sequence Key (Sequence Number) không phải khóa bí mật mà là counter công khai/implicit đóng vai trò then chốt trong chống Replay Attack, đảm bảo thứ tự gói tin, và xây dựng nonce/IV cho AEAD. Mọi giao thức bảo mật hiện đại (IPsec, TLS 1.3, DTLS, SSH, QUIC, SRTP, WireGuard) đều tích hợp cơ chế sequence number + sliding window anti-replay. Triển khai đúng: bật anti-replay, dùng ESN khi cần, quản trị rekey trước wraparound, constant-time check.