Việc băm message được thực hiện như sau[7]:
1- Thực hiện việc đệm tương tự như việc đệm trong HAIFA. Có nghĩa là việc đệm được thực hiện sao cho chiểu dài của message được xử lý có độ dài là bội số của 512 bit. Trước tiên nó được đệm thêm bit 1 tiếp theo là các bit 0, bít cuối cùng được đệm là bit 1, tiếp theo là 64 bít diễn tả chiều dài message. Ta có thể mô tả quá trình đệm như công thức sau:
mm||10000...01<leng>64
2- Để sử lý việc lặp message được đệm được tách thành các block 0
m , .. N1
m , mà mỗi block này có chiều dài 512 bit. Đặt i
l là số lượng bít thực sự của message gốc(có nghĩa là không tính các bít đệm)có trong block mi, điều đó có nghĩa là
chúng ta đã loại bỏ các bít được thêm vào. Ví dụ nếu chiều dài của message gốc là 600 bit, sau khi thực hiện việc đệm chúng ta có hai khối với l0
=512, l1
=600. Một trường hợp đặc biệt xảy ra là khi block message không chứa bít nào của message gốc, ví dụ một message có chiều dài 1020 bít sau khi thực hiện việc đệm chúng ta có ba khối với 0
l =512, 1
l =1020, 2
l =0. Tổng quát hóa ta có trong trường hợp nếu message block không chứa những bít của message gốc chúng ta đặt counter = 0, điều này đảm bảo rằng nếu ij, thì kéo theo li lj.
3- Slat được lựa chọn bởi người dùng và được đặt là NULL khi salt không có yêu cầu (s0=s1=s2=s3=0), thực hiện việc băm message như sau.
0
h IV
for (i=0; i<N; i++) 1 i h compress( i h , i m , s, i l ) return N h
Nhận xét về bảo mật của BLAKE-256.
Tấn công bằng cách mở rộng chiều dài là kiểu tấn công giả mạo của MAC (chúng ta sẽ tìm hiểu sau) theo hình thức Hk (m) hoặc Hk(m||k), k được sử dụng như IV hoặc là message được thêm vào message gốc. Attacker có thể áp dụng khi H là hàm băm lặp cho trước h = Hk (m), m, xác định rõ dữ liệu đệm p, tính v’=Hk (m’) với m’ bất kỳ, sau đó v’=Hk (m||p||m’) và do đó attacker giả mạo MAC với message=m||p||m’.
Tấn công theo kiểu mở rộng không được áp dụng với BLAKE vì chiều dài của message được băm trước đó đối với hàm băm.
Ví dụ, giả sử chúng ta có message m có chiều dài 1020 bít, sau khi thực hiện việc đệm chúng ta có ba khối 0
m , 1
m , 2
m chaining variable cuối cùng sẽ được tính 3
h =
compress( 2
h , 2
m ,0) bởi vì biến counter là 512, 1020, 0. Bây giờ giả sử chúng ta mở rộng message 3
m , sau đó chúng ta thực hiện việc băm 0
m || 1
m || 2
m || 3
m và sau đó chaining variable giữa 2
m , 3
m sẽ được băm như sau compress( 2
h , 2
m ,1024) là hoàn toàn khác compress( 2
h , 2
m ,0) . Do đó BLAKE-256 đã loại trừ được tấn công bằng cách mở rộng message. Đến năm 2012 người ta sẽ tổ chức cuộc thi và chọn ra ứng cử viên cuối cùng làm thuật toán băm SHA-3. Tuy nhiên hiện nay trong java-sdk 6 người ta đã cài đặt hàm băm SHA-3 bằng nhiều kỹ thuật băm khác nhau, có nghĩa là trong
java-sdk 6 có nhiều phiên bản hàm băm SHA-3 khác nhau.
Một số ví dụ về BLAKE-256
Ví dụ 1: One-block message (đây là ví dụ về việc băm chuỗi rỗng): IV:
0x6A09E667 0xBB67AE85 0x3C6EF372 0xA54FF53A 0x510E527F 0x9B05688C 0x1F83D9AB 0x5BE0CD19 Message sau khi đệm:
0x00800000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000000
0x00000000 0x00000000 0x00000000 0x00000000 0x00000000 0x00000001 0x00000000 0x00000008. Salt và counter được khởi tạo như sau:
0x00000000 0x00000000 0x00000000 0x00000000 0x00000008 0x00000000.
Trạng thái khởi tạo của v như sau:
0x6A09E667 0xBB67AE85 0x3C6EF372 0xA54FF53A 0x510E527F 0x9B05688C 0x1F83D9AB 0x5BE0CD19 0x243F6A88 0x85A308D3 0x13198A2E 0x03707344 0xA409382A 0x299F31D8 0x082EFA98 0xEC4E6C89
Trạng thái của v sau vòng: 0
0xe78b8dfe 0x150054e7 0xcabc8992 0xd15e8984 0x0669df2a 0x084e66e3 0xa516c4b3 0x339ded5b 0x26051fb7 0x09d18b27 0x3a2e8fa8 0x488c6059 0x13e513e6 0xb37ed53e 0x16cac7b9 0x75af6df6
Trạng thái của v sau vòng: 1
0x9de875fd 0x8286272e 0xadd20174 0xf1b0f1b7 0x37a1a6d3 0xcf90583a 0xb67e00d2 0x943a1f4f 0xe5294126 0x43bd06bf 0xb81ecba2 0x6af5ceaf 0x4feb3a1f 0x0d6ca73c 0x5ee50b3e 0xdc88df91
Trạng thái của v sau vòng: 2
0xd8ab7516 0xdfe624ce 0x9ec6e314 0x92d2cd24 0x668c57c0 0xca7f8894 0x0965eafc 0xfce462d9 0xe9387962 0x6e1ea5a3 0x56954fa0 0xb9a91faf 0x89505ef9 0xe795b789 0x6e7da9c3 0x4f50f8b3
Trạng thái của v sau vòng: 3
0x62917576 0xb0a6737a 0xf09985ae 0xfe684aca 0x45a1b50e 0x1bd33c21 0x0c4deb96 0xa3eed3fa 0x5a14ee9c 0xc4910c4f 0xbdb850f7 0x018dc0ee 0x70c3f792 0xacb6724e 0xbcbc0045 0xea8068e8
Trạng thái của v sau vòng: 4
0x5af61049 0xfd4a2adc 0x5c1dbbd8 0x5ba19232 0x9a685791 0x2b3dd795 0xa84df8d6 0xa1d50a83 0xe3c8d94a 0x86ccc20a 0xb4000ca4 0x596ac140 0x9d159377 0xa6374ffa 0xf00c4787 0x767ce962
Trạng thái của v sau vòng: 5
0x351d0da8 0x8ac4de95 0xbf541fac 0x48777a5d 0x73f9fbb2 0x18551910 0x2eca0c94 0x580b976e
0x41407ac2 0x40f748fc 0x46c35eea 0x77e1eb16 0x11160c7e 0x4e5e7cb4 0x25b72200 0x96cdbba0
Trạng thái của v sau vòng: 6
0x2698f0fa 0xfcc23635 0x6c1d5564 0x0fb301e7 0xb93f1e57 0x1168ffa7 0x9c73a8ec 0x297ef8ef 0xbffb6297 0xc0ab1c3a 0xc59f22f5 0x94999758 0xb7919d7c 0x9ef6b563 0x11e23fc7 0x094e4754
Trạng thái của v sau vòng: 7
0x793ec24c 0x0cdc3b34 0xecf11f09 0x7f8a04eb 0xd4c5cf33 0x6972f209 0x28f5811f 0x0cef5de5 0xe956dd3a 0x7111394e 0x7e4d10ac 0x21289447 0x8695513c 0x5ba6223a 0x5b17536a 0xf42def69
Trạng thái của v sau vòng: 8
0x312dc532 0x2d400724 0x26c80441 0x3d6efc38 0xfd2d1241 0xaaf754da 0x1a5ebbf9 0x85253327 0x1dac36a8 0x40e7d4f5 0x1c1a3f8c 0x3cb2ae35 0xf5d4fbe6 0x6371fb3a 0x5ee3f851 0xf96fa40d
Trạng thái của v sau vòng: 9
0xbc04b9a6 0xc340c7ac 0x4aa36daa 0xfdb53079 0x0d85d1be 0x14500fcd 0xe8a133e1 0x788f54ae 0x07eec484 0x0505399d 0x837ccc3f 0x19ad3ee7 0x9d3fa079 0xfa1c772a 0xf0dfd074 0x5c25729f
Trạng thái của v sau vòng: 10
0x4622b8c0 0x6e9195bb 0x275c2e05 0xc1efd0f0 0xcf01f277 0x319dfcbe 0xbf4a41ff 0x1d9ea582 0x6dffdda0 0x98daeeef 0x3595f81b 0xf208a0f7 0x969f9c1d 0x7fc79d47 0x0e5b84d7 0x3056fa70
Trạng thái của v sau vòng: 11
0xe6073ff0 0x59f3ceee 0x4133ea62 0x7d8beae3 0xdd924621 0x2d6d959f 0xf1ffcb6b 0x80563b2e 0xfae7638d 0xe333eaec 0xfb137d84 0x117d2ba4 0x4995a507 0xe1cf7328 0x52a84053 0x76271853
Trạng thái của v sau vòng: 12
0x629a7e00 0x34f23075 0x67c352c0 0xd2974433 0x995786aa 0xd8fd93f6 0xafb8d92e 0xb245f200 0xe2e20e87 0xa7aaa509 0x492070a9 0x2f16175b 0x19552e9b 0x5d95ca10 0x112fd23c 0xed89c121
Trạng thái của v sau vòng: 13
0xf201e161 0x06b69682 0xb290a439 0x232a0956 0x1ce6d791 0xbace48a4 0x761dd447 0xd40ff618 0xd7a1d95f 0x0f298ad4 0x8e03e31d 0x69d958c8 --- Kết quả cuối cùng
0x0CE8D4EF 0x4DD7CD8D 0x62DFDED9 0xD4EDB0A7 0x74AE6A41 0x929A74DA 0x23109E8F 0x11139C87
Ví dụ 2: Khi ta băm văn bản”Bo mon Cong nghe phan mem, Khoa Cong nghe
thong tin, Truong Dai hoc Cong nghe - DHQG HN”.
Trước tiên chúng ta hãy băm chuỗi trên bằng hàm băm SHA-3 (BLAKE-256). Quá trình băm như sau:
Kết quả như sau: