BLAKE (хеш-функція)BLAKE — криптографічна хеш-функція, в розробці якої брали участь Жан-Філіп Омассон (Jean-Philippe Aumasson), Лука Хенцен (Luca Henzen), Віллі Майєр (Willi Meier), Рафаель Фан (Raphael C.-W. Phan). Існують два варіанти хеш-функції: BLAKE-256 і BLAKE-512. ІсторіяВперше BLAKE була представлена на конкурсі криптографічних алгоритмів, який проводився Національним інститутом стандартів і технологій США BLAKE стала одним з п'яти фіналістів конкурсу. КриптостійкістьХеш-функція BLAKE побудована з трьох раніше вивчених компонентів:
Швидкодія і реалізаціяШвидкодія на двох різних процесорах:
Можливість реалізації на різних мікроконтролерах:
Швидкодія на FPGA: На FPGA Xilinx Virtex 5, BLAKE-256 реалізується на 56 комірках і може досягати пропускної здатності більш ніж в 160 Мбіт/с, а BLAKE-512 — на 108 комірках зі швидкістю до 270 Мбіт/с. Швидкодія на ASIC: На 180 nm ASIC, BLAKE-256 може бути реалізована на 13.5 kGE. На 90 nm ASIC, BLAKE-256 реалізована на 38 kGE і може досягати продуктивності в 10 Гбіт/с, а BLAKE-512 — на 79 kGE і зі швидкістю 15 Гбіт/с[2]. АлгоритмРозглянемо алгоритм BLAKE-256[3] BLAKE-256 оперує з 32-бітними словами і повертає 32-байтний хеш. КонстантиІснують початкові константи, т.н. INITIAL VALUES (IV): IV0 = 6A09E667 IV1 = BB67AE85 IV2 = 3C6EF372 IV3 = A54FF53A IV4 = 510E527F IV5 = 9B05688C IV6 = 1F83D9AB IV7 = 5BE0CD19 16 констант (Перші цифри числа пі): c0 = 243F6A88 c1 = 85A308D3 c2 = 13198A2E c3 = 03707344 c4 = A4093822 c5 = 299F31D0 c6 = 082EFA98 c7 = EC4E6C89 c8 = 452821E6 c9 = 38D01377 c10 = BE5466CF c11 = 34E90C6C c12 = C0AC29B7 c13 = C97C50DD c14 = 3F84D5B5 c15 = B5470917 перестановки {0,…,15} (використовуються у всіх функціях BLAKE): σ0 = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 σ1 = 14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3 σ2 = 11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4 σ3 = 7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8 σ4 = 9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13 σ5 = 2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9 σ6 = 12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11 σ7 = 13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10 σ8 = 6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5 σ9 = 10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0 Функції стисненняФункція стиснення алгоритму BLAKE-256 приймає на вхід:
Таким чином, на вхід їй подається 30 слів (8+16+4+2=30, 30*4 = 120 байт = 960 біт). Повертає функція стиснення тільки нове значення змінних ланцюжка: h' = h'0,…,h'7. Надалі будемо позначати h'=compress(h, m, s, t)> Ініціалізація16 змінних, v0,…,v15, що описують поточний стан v, ініціалізуються початковими значеннями в залежності від вхідних даних і представлені у вигляді матриці 4×4: ← Раундова функціяПісля того, як стан v ініціалізований, запускається серія з 14 раундів. Раунд — це операція над станом , яка виробляє обчислення, розбиті на наступні блоки: G0(v0, v4, v8 , v12) G1(v1, v5, v9 , v13) G2(v2, v6, v10, v14) G3(v3, v7, v11, v15) G4(v0, v5, v10, v15) G5(v1, v6, v11, v12) G6(v2, v7, v8 , v13) G7(v3, v4, v9 , v14) на r-му раунді блок обчислень працює наступним чином: ![]() j ← σr%10[2×i] k ← σr%10[2×i+1] a ← a + b + (mj ⊕ ck) d ← (d ⊕ a) >>> 16 c ← c + d b ← (b ⊕ c) >>> 12 a ← a + b + (mk ⊕ cj) d ← (d ⊕ a) >>> 8 c ← c + d b ← (b ⊕ c) >>> 7 ![]() Перші чотири блоки G0,…,G3 можуть обчислюватися паралельно, так як кожен змінює свою певну колонку змінних матриці станів. Назвемо процедуру обчислення G0,…,G3 column step. Точно також можуть бути паралельно обчислені G4,…,G7, але вони в свою чергу змінюють кожен свою діагональ матриці стану v. Тому назвемо процедуру обчислення G4,…,G7 diagonal step. Можливість паралельного обчислення Gi представлена графічно. На раундах, номери r яких більше 9, використовується перестановка σr%10, наприклад, на 13-тому раунді використовується σ3. Останній крокПісля всіх раундів нове значення змінних ланцюжка h'0,…,h'7 обчислюється із змінних матриці стану, вхідних змінних і з солі : h'0 ← h0 ⊕ s0 ⊕ v8 h'1 ← h1 ⊕ s1 ⊕ v9 h'2 ← h2 ⊕ s2 ⊕ v10 h'3 ← h3 ⊕ s3 ⊕ v11 h'4 ← h4 ⊕ s4 ⊕ v12 h'5 ← h5 ⊕ s5 ⊕ v13 h'6 ← h6 ⊕ s6 ⊕ v14 h'7 ← h7 ⊕ s7 ⊕ v15 Хешування повідомленняОпишемо процес хешування повідомлення m довжиною l<2^64 біт. Спочатку повідомлення доповнюється функцією padding даними для кратності 512 біт (64 байтам), потім, блок за блоком, його обробляє функція стиснення compression function. У функції padding повідомлення спочатку доповнюється бітами, так, що його довжина стає по модулю 512 дорівнює 447: спочатку додається 1, потім необхідну кількість нулів. Після цього додається ще одна одиниця і 64-бітове представлення довжини повідомлення l від старшого до молодшого біта. Таким чином, довжина повідомлення стає кратною 512. Padding гарантує, що довжина повідомлення стане кратною 512 бітам. Щоб вирахувати хеш повідомлення, результат функції padding ділиться на блоки з 16 слів m0,…,mN-1. Нехай Li — кількість біт вихідного повідомлення у блоках m0,…,mi, тобто виключаючи ті біти, які були додані в процедурі padding. Наприклад, якщо повідомлення має довжину 600 біт, то після процедури padding воно буде мати 1024 біт і буде розділено на два блоки: m0 і m1. Притому L0=512, L1=600. В деяких випадках останній блок не містить біт оригінального повідомлення. Наприклад, якщо у вихідному повідомленні 1020 біт, то в результаті процедури padding воно буде мати довжину 1536 біт і в m0 буде 512 біт вихідного повідомлення m1 — 508, а в m2 — 0. Виставимо L0=512, L1=1020, а L2=0. Тобто правило таке: якщо в останньому блоці немає біт оригінального повідомлення, то виставимо лічильник LN-1 рівним 0. Це гарантує, що якщо i ≠ j, то Li ≠ Lj. Значення солі визначається користувачем або задається рівним 0, якщо її не потрібно використовувати (s0=s1=s2=s3=0). Хеш повідомлення таким чином обчислюється: h0 ← IV for i=0,...,N-1 hi+1 ← compress(hi,mi,s,li) return hN. Процес хешування наочно представлений на блок-схемі: Алгоритм 64-бітної версії функції ідентичний: значення зсуву рівні 32, 25, 16 і 11 відповідно, число раундів збільшено до 16. Відмінності від quarterround алгоритму ChaCha
Хеші BLAKEBLAKE-512("") = A8CFBBD73726062DF0C6864DDA65DEFE58EF0CC52A5625090FA17601E1EECD1B 628E94F396AE402A00ACC9EAB77B4D4C2E852AAAA25A636D80AF3FC7913EF5B8 BLAKE-512("The quick brown fox jumps over the lazy dog") = 1F7E26F63B6AD25A0896FD978FD050A1766391D2FD0471A77AFB975E5034B7AD 2D9CCF8DFB47ABBBE656E1B82FBC634BA42CE186E8DC5E1CE09A885D41F43451 BLAKE2BLAKE2 (Сайт BLAKE2 [Архівовано 1 листопада 2018 у Wayback Machine.]) — це поліпшена версія BLAKE — одного з п'яти фіналістів конкурсу на хеш-функції SHA-3 (головним чином покращено швидкодію), представлена 21 грудня 2012 року. Розробники: Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O Hearn, і Christian Winnerlein. Була створена як альтернатива широко використовуваним в минулому MD5 і SHA-1, в яких були знайдені уразливості. Відмінності від BLAKEУ BLAKE2, на відміну від BLAKE, немає додавання констант в раундовій функції. Також змінено константи зсуву, спрощено додавання, доданий блок параметрів, який складається з ініціалізуючими векторами. Крім того, скорочено кількість раундів з 16 до 12 у функції BLAKE2b (аналог BLAKE-512) і з 14 до 10 у BLAKE2s (аналог BLAKE-256). В результаті число тактів на біт скоротилася з 7,49 для BLAKE-256 і 5,64 для BLAKE-512 до 5,34 і 3,32 для Blake2s і Blake2b відповідно. Хеші BLAKE2BLAKE2b-512("") = 786A02F742015903C6C6FD852552D272912F4740E15847618A86E217F71F5419 D25E1031AFEE585313896444934EB04B903A685B1448B755D56F701AFE9BE2CE BLAKE2b-512("The quick brown fox jumps over the lazy dog") = A8ADD4BDDDFD93E4877D2746E62817B116364A1FA7BC148D95090BC7333B3673 F82401CF7AA2E4CB1ECD90296E3F14CB5413F8ED77BE73045B13914CDCD6A918
Джерела
ЛітератураEli Biham and Orr Dunkelman. A framework for iterative hash functions - HAIFA. — ePrint, 2007. — 207 с. Посилання
|
Portal di Ensiklopedia Dunia