Hàm băm mật mã và mã xác thực thông điệp (MAC) đóng vai trò then chốt trong hạ tầng đường hầm mạng an toàn. Trong khi các thuật toán mã hóa đối xứng bảo vệ nội dung dữ liệu chuyển tiếp, hàm băm mật mã chịu trách nhiệm thiết lập độ tin cậy phiên, ràng buộc danh tính tạm thời, bảo vệ tính toàn vẹn của biên bản đàm phán và kiểm tra tính hợp lệ của từng gói tin trước khi thực thi các phép toán bất đối xứng tốn kém. Suốt nhiều thập kỷ, các giao thức truyền thống như IPsec và OpenVPN chủ yếu phụ thuộc vào họ SHA-2 (SHA-256 và SHA-512) theo tiêu chuẩn NIST FIPS 180-4. Dẫu vậy, khi vận hành bằng phần mềm trên các bộ định tuyến nhúng 32-bit và phần cứng tiêu thụ điện năng thấp, SHA-256 bộc lộ nhiều điểm nghẽn về hiệu năng vi kiến trúc.

Giao thức WireGuard đã loại bỏ hoàn toàn các cấu trúc băm truyền thống để chuyển sang BLAKE2s, được định chuẩn trong RFC 7693. Cùng với Curve25519 và ChaCha20-Poly1305, BLAKE2s mang lại độ an toàn tương đương SHA-256 và SHA-3 nhưng tiết kiệm chu kỳ xung nhịp xử lý của CPU rõ rệt. Nhờ tích hợp chế độ băm có khóa tự nhiên vào khuôn khổ bắt tay Noise_IKpsk2 và cơ chế phòng vệ từ chối dịch vụ (DoS) không lưu trạng thái, WireGuard đạt được sự tinh gọn về mặt thuật toán lẫn khả năng kháng phân tích kênh phụ.

Hạn chế của SHA-256 và lỗ hổng tấn công mở rộng độ dài

Để hiểu rõ lý do kỹ thuật đằng sau việc lựa chọn BLAKE2s, cần phân tích những rào cản cố hữu của các thuật toán băm kinh điển như SHA-256:

  1. Cấu trúc Merkle-Damgård: Các thuật toán băm truyền thống chia nhỏ dữ liệu đầu vào thành các khối có kích thước cố định (512 bit đối với SHA-256) và đưa qua hàm nén lặp lại. Vector trạng thái nội bộ của vòng nén cuối cùng được sử dụng trực tiếp làm giá trị băm xuất ra ngoài.
  2. Nguy cơ tấn công mở rộng độ dài (Length Extension Attacks): Do ngõ ra của SHA-256 phản ánh nguyên vẹn trạng thái nội bộ của bộ nén, kẻ tấn công khi biết giá trị băm $H(M)$ và độ dài của thông điệp $M$ có thể tự ý nối thêm dữ liệu $M'$ phía sau và tính toán chính xác giá trị băm hợp lệ $H(M \mathbin{\Vert} \text{pad} \mathbin{\Vert} M')$ mà không cần biết khóa bí mật hay nội dung gốc của $M$. Vì vậy, việc áp dụng cơ chế xác thực đơn giản dạng tiền tố $H(\text{Key} \mathbin{\Vert} \text{Message})$ hoàn toàn mất an toàn.
  3. Chi phí xử lý phức tạp của HMAC: Nhằm khắc phục điểm yếu mở rộng độ dài, giới mật mã học buộc phải xây dựng cơ chế HMAC (RFC 2104). HMAC đòi hỏi hai lượt băm lồng nhau:

$$\text{HMAC}(K, M) = H\big((K \oplus \text{opad}) \mathbin{\Vert} H((K \oplus \text{ipad}) \mathbin{\Vert} M)\big)$$

Cơ chế này hóa giải triệt để rủi ro mở rộng độ dài, nhưng lại buộc hệ thống xử lý hai khối nén khởi tạo riêng biệt (vùng đệm ipad và opad) cho từng nhãn xác thực. Đối với các gói tin bắt tay có kích thước nhỏ, quy trình hai lượt này tạo ra gánh nặng tính toán đáng kể cho nhân hệ điều hành.

Kiến trúc BLAKE2s: ARX 32-bit và khuôn khổ HAIFA

Được phát triển bởi Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn và Christian Winnerlein, BLAKE2s tối ưu hóa việc tính toán giá trị băm trên bộ xử lý 32-bit, hỗ trợ độ dài ngõ ra tùy biến lên đến 256 bit từ các khối thông điệp 512 bit.

Mô hình HAIFA và khả năng kháng mở rộng độ dài từ gốc

BLAKE2s không đi theo mô hình Merkle-Damgård thuần túy mà ứng dụng khung lặp HAIFA (HAsh Iterative FrAmework). Cấu trúc này đưa thêm siêu dữ liệu tường minh vào từng khối nén:

  • Bộ đếm offset byte ($t_0, t_1$): Giá trị nguyên 64-bit theo dõi lũy kế số lượng byte dữ liệu thực đã được nạp tính đến khối hiện tại.
  • Cờ khối kết thúc ($f_0, f_1$): Từ nhị phân chuyên dụng nhận giá trị 0xFFFFFFFF duy nhất trong chu kỳ nén khối cuối cùng của chuỗi thông điệp.

Hàm nén nhận 4 tham số độc lập: vector trạng thái 256-bit $h$, khối dữ liệu 512-bit $m$, bộ đếm offset byte $t$ và cờ kết thúc $f$. Do khối cuối cùng áp dụng mặt nạ đảo bit vào ma trận nén, giá trị băm xuất ra không thể bị tận dụng làm trạng thái trung gian để tiếp tục nối dữ liệu. Khả năng tấn công mở rộng độ dài bị triệt tiêu từ cấp cấu trúc, cho phép BLAKE2s đóng vai trò hàm giả ngẫu nhiên (PRF) và mã MAC an toàn mà không cần thêm lớp bọc phức tạp.

Ma trận trạng thái 4x4 và hoán vị Quarter-Round

BLAKE2s khởi tạo ma trận làm việc nội bộ gồm 16 từ $v_0 \dots v_{15}$, mỗi từ có kích thước 32 bit (tổng cộng 512 bit). Tám từ hàng trên nhận giá trị xâu chuỗi $h_0 \dots h_7$, trong khi tám từ hàng dưới nhận vector khởi tạo tiêu chuẩn (IV), kết hợp với bộ đếm offset và cờ hoàn tất:

Chỉ số hàng Cột 0 Cột 1 Cột 2 Cột 3
Hàng 0 $h_0$ $h_1$ $h_2$ $h_3$
Hàng 1 $h_4$ $h_5$ $h_6$ $h_7$
Hàng 2 $IV_0$ $IV_1$ $IV_2$ $IV_3$
Hàng 3 $IV_4 \oplus t_0$ $IV_5 \oplus t_1$ $IV_6 \oplus f_0$ $IV_7 \oplus f_1$

Quá trình xáo trộn dựa trên hàm $G$, thừa hưởng từ lõi hoán vị ChaCha. Hoạt động trên 4 từ trạng thái và 2 từ thông điệp, hàm $G(a, b, c, d, x, y)$ thực thi thuần túy các phép toán ARX (Addition modulo $2^{32}$, Rotation bit vòng và XOR):

$$a \leftarrow a + b + x; \quad d \leftarrow (d \oplus a) \lll 16;$$ $$c \leftarrow c + d; \quad b \leftarrow (b \oplus c) \lll 12;$$ $$a \leftarrow a + b + y; \quad d \leftarrow (d \oplus a) \lll 8;$$ $$c \leftarrow c + d; \quad b \leftarrow (b \oplus c) \lll 7;$$

BLAKE2s thực hiện 10 vòng xáo trộn. Mỗi vòng áp dụng 4 phép biến đổi cột song song luân phiên với 4 phép biến đổi đường chéo, rút các từ dữ liệu theo bảng hoán vị cố định $\sigma_0 \dots \sigma_9$. Toàn bộ phép toán chạy thẳng trên khối số học luận lý (ALU) mà không truy cập bảng tra bộ nhớ hay rẽ nhánh điều kiện, mang lại khả năng miễn nhiễm hoàn toàn trước các cuộc tấn công kênh phụ thời gian bộ đệm (cache-timing).

Chế độ băm có khóa tự nhiên: Tạo MAC đơn lượt không cần HMAC

Một cải tiến mang tính bước ngoặt của BLAKE2s là chế độ băm có khóa tự nhiên (Keyed Mode). Khi được cung cấp khóa bí mật (lên đến 32 byte), thuật toán chèn thông số độ dài khóa vào khối cấu hình ban đầu, đặt khóa trực tiếp vào khối thông điệp 512-bit đầu tiên và đệm đầy bằng các giá trị zero.

Dữ liệu tiếp theo được nạp qua các khối nén thông thường. Cơ chế một lượt (single-pass) này mang lại lợi ích kỹ thuật rõ rệt:

  • Bảo đảm an toàn MAC chặt chẽ: BLAKE2s có khóa hoạt động như một hàm PRF an toàn mà không cần vòng lặp đệm ipad/opad của HMAC.
  • Tiết kiệm vùng nhớ cấp phát: Quá trình xử lý khóa diễn ra cùng luồng với dữ liệu, loại bỏ chi phí chuyển đổi ngữ cảnh bộ nhớ.
  • Giảm phân nửa chu kỳ xử lý: Với các thông điệp ngắn như tiêu đề gói tin hoặc token xác thực cookie, thuật toán hoàn tất kiểm tra chỉ trong 1 chu kỳ nén đơn lẻ thay vì phải triệu gọi nhiều hàm băm liên tiếp như HMAC-SHA256.

Các vị trí then chốt của BLAKE2s trong WireGuard

Giao thức WireGuard ứng dụng BLAKE2s xuyên suốt mọi giai đoạn đàm phán kết nối, ràng buộc trạng thái và phòng vệ tải:

1. Băm biên bản bắt tay Noise_IKpsk2

Trong quá trình đàm phán bắt tay, hai đầu cuối phải đảm bảo không kẻ thứ ba nào có thể can thiệp làm sai lệch khóa công khai tạm thời, nhãn thời gian hoặc khóa chia sẻ trước (PSK). WireGuard duy trì hai biến mã hóa liên tục:

  • Chaining Key ($ck$): Được cập nhật sau mỗi lượt trao đổi khóa thông qua hàm dẫn xuất khóa HKDF xây dựng trên BLAKE2s.
  • Handshake Hash ($h$): Giá trị băm tích lũy được cập nhật bằng công thức $h \leftarrow \text{BLAKE2s}(h \mathbin{\Vert} \text{dữ liệu})$. Mọi khóa công khai truyền đi và tham số mã hóa đều được cuộn vào $h$, đảm bảo cả hai phía có cùng một bản ghi đàm phán đồng nhất và không thể bị sửa đổi.

2. Hệ thống phòng vệ DoS không lưu trạng thái qua hai cấp MAC

Các bộ định tuyến ở biên mạng thường xuyên phải đối mặt với các đợt bắn phá gói tin nhằm làm cạn kiệt bộ nhớ và CPU. WireGuard bảo vệ điểm nút bằng cách gắn thêm hai trường MAC 16-byte vào từng gói tin bắt tay khởi tạo và phản hồi:

  • MAC1: Nhãn MAC có khóa 128-bit tính toán trên phần đầu gói tin, sử dụng khóa công khai của bên nhận làm khóa bí mật:

$$\text{MAC1} = \text{BLAKE2s-128}\big(\text{Hash}(\text{PublicKey bên nhận}), \text{msg}_{0..k}\big)$$

Giá trị này chứng minh gói tin được gửi đích danh cho máy chủ hiện tại, cho phép nhân hệ điều hành loại bỏ ngay các gói tin rác giả mạo mà chưa cần cấp phát bất kỳ khối bộ nhớ nào.

  • MAC2: Khi máy chủ chịu tải kết nối quá lớn, hệ thống sẽ từ chối thực hiện phép nhân vô hướng Curve25519 tốn kém trừ khi bên gửi gửi kèm một cookie hợp lệ. Máy chủ gửi phản hồi mang thông tin cookie được mã hóa. Phía gửi sẽ truyền lại gói bắt tay kèm theo MAC2 được tính trên toàn bộ nội dung gói tin (bao gồm cả MAC1), sử dụng cookie làm khóa bí mật:

$$\text{MAC2} = \text{BLAKE2s-128}\big(\text{Cookie}, \text{msg}_{0..k+16}\big)$$

Nhờ tốc độ xử lý tính bằng micro-giây của BLAKE2s, máy chủ WireGuard có thể thẩm định tính hợp lệ của yêu cầu mà không phải lưu trạng thái phiên, vô hiệu hóa nguy cơ tấn công từ chối dịch vụ diện rộng.

Tối ưu hóa SIMD và kiến trúc triển khai trong RiceGuard

Cấu trúc ma trận của BLAKE2s tương thích hoàn hảo với các tập lệnh vector hiện đại. Các kiến trúc SIMD như ARM NEON, Intel AVX2 và AVX-512 cho phép xử lý song song 4 phép biến đổi Quarter-Round trong một chu kỳ lệnh duy nhất. Trên các nhân vi xử lý máy chủ hiện đại, BLAKE2s đạt thông lượng vượt trội, chỉ mất chưa đầy 3 chu kỳ xung nhịp cho mỗi byte dữ liệu.

Trong kiến trúc mạng của RiceGuard, các tác vụ tính toán băm mật mã tuân thủ nghiêm ngặt các nguyên tắc kỹ thuật an toàn:

  • Điều phối hàng đợi nhân (Kernel Queue Offloading): Các phép tính xác thực bắt tay được phân phối đồng đều qua các lõi CPU bằng cơ chế hàng đợi xử lý ngầm, ngăn chặn hiện tượng tắc nghẽn gói tin trong các khung giờ cao điểm.
  • So sánh MAC thời gian hằng số: Khi xác minh các nhãn MAC1 và MAC2, hệ thống sử dụng hàm crypto_memneq, so sánh toàn bộ 16 byte bất kể vị trí sai lệch nhằm triệt tiêu hoàn toàn rò rỉ thời gian.
  • Tẩy xóa bộ nhớ nhạy cảm: Khóa xâu chuỗi, các giá trị băm trung gian và token cookie tạm thời được xóa sạch khỏi bộ nhớ RAM ngay sau khi tính toán bằng memzero_explicit, ngăn ngừa nguy cơ dữ liệu mật tồn lưu trong các vùng đệm hoặc dòng cache CPU.

Sự hòa quyện giữa cấu trúc ARX 32-bit linh hoạt, khả năng miễn nhiễm tấn công mở rộng độ dài và chế độ băm có khóa một lượt đưa BLAKE2s trở thành một nền tảng mật mã vững chắc cho các mạng riêng ảo tốc độ cao.

Tải VPNRice