2.2.1 Các loại hàm băm BLAKE2
Họ BLAKE2 bao gồm hai thuật toán chính:
- BLAKE2b được tối ưu hóa cho các nền tảng 64 bit - bao gồm cả NEON- enableARMs - và tạo ra các thông báo có kích thước bất kỳ từ 1 đến 64 byte.
- BLAKE2s được tối ưu hóa cho các nền tảng 8 đến 32 bit và tạo ra các tiêu chuẩn có kích thước từ 1 đến 32 byte.
Cả hai đều được thiết kế để cung cấp bảo mật tương tự như chức năng lý tưởng tạo ra các tiêu chuẩn có cùng độ dài. Mỗi cái có thể di động với bất kỳ CPU nào, nhưng có thể nhanh hơn gấp đôi khi được sử dụng trên kích thước CPU được tối ưu hóa; ví dụ: trên Tegra 2 (SoC 32-bit dựa trên ARMv7) BLAKE2s được mong đợi sẽ nhanh hơn khoảng gấp đôi so với BLAKE2b, trong khi trên AMD A10-5800K (64-bit, vi kiến trúc Piledriver), BLAKE2b dự kiến sẽ nhanh hơn nhanh hơn 1,5 lần so với BLAKE2s.
2.2.2 Các vòng của hàm băm Blake2b và Blake2s
BLAKE2b thực hiện 12 vòng và BLAKE2s thực hiện vòng hiệp, so với 16 và 14 tương ứng với BLAKE. Dựa trên phân tích bảo mật được thực hiện cho đến nay, và dựa trên các giả định hợp lý về tiến trình trong tương lai, không chắc vòng 16 và 14 an toàn hơn vòng 12 và 10. Hồi tưởng rằng lần nộp BLAKE ban đầu lần lượt có 14 và 10 vòng, và sự gia tăng sau đó được thúc đẩy bởi tốc độ cao của
BLAKE (tức là, nó có thể đủ thêm một vài vòng vì lợi ích của sự bảo thủ), đúng hơn hơn là bằng kết quả phân tích mật mã.
Sự thay đổi này giúp tăng tốc độ trực tiếp tương ứng khoảng 25% và 29% trên các đầu vào dài. Tốc độ trên các đầu vào ngắn cũng cải thiện đáng kể, mặc dù với tỷ lệ thấp hơn, do chi phí khởi tạo và hoàn thiện.
BLAKE là một thuật toán được gọi là ARX, tức là nó dựa trên một chuỗi các hàm xors, các phép bổ sung mô-đun và các phép quay từ.
Chức năng cốt lõi của BLAKE-512 thực hiện bốn phép quay từ 64 bit lần lượt là 32, 25, 16 và 11 bit. BLAKE2b thay thế 25 bằng 24 và 11 bằng 63:
BLAKE2 đệm khối dữ liệu cuối cùng nếu và chỉ khi cần thiết, với byte trống. Nếu độ dài dữ liệu là bội số của độ dài khối, thì không có byte đệm nào được thêm vào. Điều này ngụ ý rằng nếu độ dài thông báo là bội số của độ dài khối thì không có byte đệm nào được thêm vào. Do đó, phần đệm không bao gồm độ dài thông báo, như trong BLAKE, MD5 hoặc SHA-2.
Do đó, BLAKE2s hỗ trợ băm dữ liệu có kích thước tối đa là - 1 byte, tức là gần 16 exbibyte (lượng bộ nhớ được xử lý bởi bộ xử lý 64 bit). Giới hạn trên của BLAKE2b là - 1 byte phải là đủ cho bất kỳ ai.
Trong khi BLAKE sử dụng 8 hằng số từ làm IV cộng với 16 hằng số từ để sử dụng trong chức năng nén, BLAKE2 sử dụng tổng cộng 8 hằng số từ, thay vì 24. Điều này giúp tiết kiệm 128 byte ROM và 128 byte RAM trong triển khai BLAKE2b và 64 byte ROM và 64 byte RAM trong quá trình triển khai BLAKE2s.Giai đoạn khởi tạo chức năng nén được sửa đổi thành:
Lưu ý sự ra đời của cờ kết thúc f0 và f1, thay cho bộ đếm dự phòng của BLAKE.
Các hàm G của BLAKE2b (trái) và BLAKE2s (phải) được định nghĩa là:
Việc bỏ qua các hằng số trong G sẽ đưa ra một thuật toán tương tự như phiên bản đồ chơi BLAZE (chưa đóng gói )1. Các hằng số trong G ban đầu nhằm mục đích đảm bảo việc lan truyền sớm các hành vi mang, nhưng hóa ra các lợi ích (nếu có) không đáng bị phạt về hiệu suất, theo quan sát của một số nhà phân tích mật mã. Thay đổi này tiết kiệm hai xor và hai tải trên mỗi G, nghĩa là, 16% tổng số lệnh số học (cộng và xor).
2.2.3 Bộ đếm theo byte
Bộ đếm t đếm byte chứ không phải bit. Điều này đơn giản hóa việc triển khai và giảm nguy cơ lỗi, vì các ứng dụng đích đo lường khối lượng dữ liệu theo byte chứ không phải bit.
Lưu ý rằng BLAKE hỗ trợ các thông báo có kích thước bit tùy ý nhằm mục đích duy nhất là tuân thủ các yêu cầu của NIST. Tuy nhiên, như đã thảo luận trong danh sách gửi thư SHA-3, không có bằng chứng về nhu cầu thực tế để hỗ trợ điều này. Theo quan sát trong những tháng đầu tiên của cuộc thi, sự hỗ trợ của các kích thước bit tùy ý là nguồn gốc của một số lỗi trong triển khai tham chiếu (bao gồm cả lỗi của BLAKE).
2.2.4 Khối tham số
Khối tham số của BLAKE2 được phân loại với IV trước khi xử lý khối dữ liệu đầu tiên. Nó mã hóa các tham số để băm cây an toàn, cũng như độ dài khóa (ở chế độ có khóa) và độ dài thông báo.
- Độ dài byte số (1 byte): một số nguyên trong [1, 64] cho BLAKE2b, trong [1, 32] cho BLAKE2s
- Độ dài byte khóa (1 byte): một số nguyên trong [0, 64] cho BLAKE2b, trong [0, 32] cho BLAKE2s (đặt thành 0 nếu không sử dụng khóa)
- Salt (16 hoặc 8 byte): một chuỗi 16 byte tùy ý cho BLAKE2b và 8 byte cho BLAKE2s (được đặt thành all-NULL theo mặc định)
- Cá nhân hóa (16 hoặc 8 byte): một chuỗi 16 byte tùy ý cho BLAKE2b và 8 byte cho BLAKE2s (được đặt thành all-NULL theo mặc định)
Thông số của hàm băm cây :
- Fanout (1 byte): một số nguyên trong [0, 255] (đặt thành 0 nếu không giới hạn và chỉ 1 trong chế độ tuần tự)
- Độ sâu tối đa (1 byte): một số nguyên trong [1, 255] (được đặt thành 255 nếu không giới hạn và chỉ thành 1 trong chế độ tuần tự)
Bảng 1. 1 Cấu trúc khối tham số BLAKE2b (hiệu số theo byte)
- Độ dài byte tối đa của lá (4 byte): một số nguyên trong [0, 232 −1], có nghĩa là, tối đa 4 GiB (đặt thành 0 nếu không giới hạn hoặc ở chế độ tuần tự)
- Độ lệch nút (8 hoặc 6 byte): một số nguyên trong [0, 264 - 1] cho BLAKE2b và trong [0, 248 - 1] cho BLAKE2s (đặt thành 0 cho đầu tiên, ngoài cùng bên trái, lá hoặc ở chế độ tuần tự)
- Độ sâu nút (1 byte): một số nguyên trong [0, 255] (được đặt thành 0 cho các lá hoặc ở chế độ tuần tự)
- Độ dài byte băm bên trong (1 byte): một số nguyên trong [0, 64] cho BLAKE2b và trong [0, 32] cho BLAKE2s (đặt thành 0 ở chế độ tuần tự)
Đây là 50 byte tổng cộng cho BLAKE2b và 32 byte cho BLAKE2s. Bất kỳ byte nào còn lại được dành riêng cho việc sử dụng trong tương lai và / hoặc ứng dụng cụ thể, và là NULL. Các giá trị kéo dài hơn một byte được viết bằng little- endian. Lưu ý rằng băm cây có thể được khóa, trong trường hợp này, các bản sao của lá sẽ băm khóa theo sau là một số byte bằng (nhiều nhất) chiều dài tối đa của lá.
Bảng 1. 2: Cấu trúc khối tham số BLAKE2s (hiệu số theo byte)
Ứng dụng chính của BLAKE2 có khóa là mã xác thực tin nhắn (MAC): BLAKE2 có thể được sử dụng một cách an toàn trong chế độ tiền tố-MAC, nhờ thuộc tính không thể nhận biết được kế thừa từ BLAKE [13]. Prefix-MAC nhanh hơn HMAC, vì nó lưu ít nhất một lệnh gọi đến hàm nén. BLAKE2 có khóa cũng có thể được sử dụng để khởi tạo các PRF, ví dụ như trong sơ đồ băm mật khẩu PBKDF2.