Анимация
JavaScript
|
Главная Библионтека Рассмотрим вначале алгоритм SHA-256. Его описание можно разбить на две части - описание функции сжатия и алгоритма обработки сообщения. Функция сжатия представляет собой по сути алгоритм блочного шифрования с размером блока 256 бит промежуточного значения функции хэширования с использованием очередного текстового блока в качестве ключа Помимо обычных обозначений, при описании функции мы будем использовать следующие: К - сдвиг слова вправо на п позиций и У - циклический сдвиг слова вправо п позиций. Размер слова равен 32 битам. Сложение производится по модулю 2. Стартовый вектор хэширования " представляет собой набор из 8 32-разрядных слов, получаемых взятием дробной части квадратных корней первых 8 простых чисел: /" = {6а09е667, ЬЬ67ае85, 3c6ef372, a54ff53a, 510e527f, 9b05688c, If83d9ab, 5be0cdl9}. Далее вычисление происходит по следующей схеме. 1. Предварительная обработка. Хэшируемое сообщение вначале дополняется битовой строкой так, что его длина становится кратной 512 битам. Способ дополнения аналогичен использованному в алгоритме SHA-1: добавляется 1, затем столько нулей, чтобы длина стала на 64 меньше кратной 512 и затем добавляется 64-битовое представление длины исходного сообщения. 2. Сообщение разбивается на блоки по 512 бит А\ b/F, М<. 3. Основной цикл: for / = 1 to iV { N = количество блоков в дополненном сообщении Инициализировать регистры а, Ь, с, d, e,f,g,h (i - 1)-м промежуточным значением хэш-функции а = я-1); b = с = Н-; d = Hf; Применить функцию сжатия SHA-256 к регистрам а, Ь; h. for у = о to 63 { Вычислить Chie, f, g), Majia, b, с), Eo(a), Ei(e), and Wj II Определения см. ниже T,-h + + Ch{e,f, g) + Kj + Wj T2 = I.o{a) + Mqj{a, b, c) h = g;g=fif= e;e = d+Ti d = c;c = b;b = a;a=Ti + T2 вычислить i-Q промежуточное значение HiN) = (я>, Яf >, >, Яf >, Я>, Яf >, Я>, Я>) и будет искомым значением хэш-функции сообщения М. В SHA-256 используются шесть логических функций, аргументы и значения которых - 32-битовые слова. Ch(x; у; z) = (xAy)@ (-ix л z) Maj{x, у, z) =(х л у) © (х л z) © (у л z) Eo(x) =S\x) © S\x) © S\x) Ei(x) ={x) © S\x) © Six) ao(x) =S\x) © Sx) © R\x) ai(x) =S\x) © S\x) © R\x) бл01си расширенного сообщения Wq, W(,-i вычисляются следующим образом: Wj=Mf,j = 0,...5; fory= 16to63 { Wj = Oi{Wj.2) +Wj-7 + ao(ffy-15) + Слова-константы .o, Кз берутся как первые 32 бита дробных частей кубических корней первых 64 простых чисел, и в 16-ричном виде представлены здесь: 428a2f98 71374491 b5cOfbcf e9b5dba5 395бс25Ь 59flllfl 923f82a4 ablc5ed5 d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deblfe 9bdc06a7 cl9bfl74 е49Ьб9с1 efbe4786 0fcl9dc6 240calcc 2de92c6f 4a7484aa 5cb0a9dc 76f988da 983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 0бсаб351 14292967 27b70a85 2elb2138 4d2c6dfc 53380dl3 650a7354 766a0abb 81c2c92e 92722c85 a2bfe8al а81абб4Ь c24b8b70 с7бс51аЗ dl92e819 (16990624 f40e3585 106aa070 19a4cll6 1е376с08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3 748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2 Функция SHA-512 подобна no своей структуре SHA-256, но работает с размером слова 64 бита. Вначале текст дополняется так, чтобы его длина была кратна 1024. Процедура дополнения аналогична: добавляется 1, затем столько нулей, что длина текста станет на 128 меньше, нежели кратная 1024, а затем 128-битовое представление длины исходного текста Стартовый вектор хэширования также задается аналогично: берутся первые 64 бита дробных частей квадратных корней первых 8 простых чисел: Н(0) = {6а09е667ВЬсс908, ЬЬ67ае8584саа73Ь, 3c6ef372fe94fB2b, a54ff53a5fld36fl, 510e527fade682dl, 9b05688c2b3e6clf, lfB3d9abfb41bd6b, 5be0cdl9137e2179}. Далее исходный текст разбивается на блоки по 1024 бита А\ ..., А/. После чего блоки обрабатываются последовательно. Основной цикл вычислений выглядит точно так же, как и в случае SHA-256, только вычисляемые функции и производимые операции определены на 64-битовых словах, а не на 32-битовых (в частности, сложение выполнятся по модулю 2"). Функция сжатия отличается только количеством итераций в цикле: for у = О to 79 { Вычислить Ch{e,f, g), Maj{a, b, с), EqCo), Ei(e), and Wj Ti = h + + ChieJ, g) + Kj + Wj Тг = Eo(a) + Maj{a, b, c) h = g;g=f,f= e;e = d+Ti d= c;c = b;b = a; a = T\ +Tj Искомым значением хэш-функции исходного сообш,ения М будет Я) = (Я >, Яf >, Я >, Я f>, Я >, Я >, Я >, Я >). Отличия есть только в определении некоторых используемых логических функций, а именно: Ei(x) =s\x) е s\x) е \х) ао(х) =S\x) е {х) е R\x) ai(x) =S\x) ® \х) ® R\x) Блоки расширенного сообш,ения Wo, Wj вычисляются аналогично SHA-256: Wj=Mf,J = 0,...)5; fory= 16to79 { Wj - Oi{Wj.2) + OoiWj.is) + Щ-16 Слова-константы .o, 79 берутся как первые 64 бита дробных частей кубических корней первых 80 простых чисел, и в 16-ричном виде представлены здесь: 428a2f98d728ae22 7137449123ef65cd bScOfbcfec4d3b2f e9b5dba5818 9dbbc 3956c25bf348b538 59flllfIb605d019 923f82a4afl94f9b ablc5ed5da6d8118 d807aa98a3030242 12835b0145706fbe 243185be4ee4b28c 550c7dc3d5ffb4e2 72be5d74f27b896f 80deblfe3bl696bl 9bdc06a725c71235 Cl9bfl74cf692694 e49b69cl9ef14ad2 efbe4786384f25e3 0fcl9dc68b8cd5b5 240calcc77ac9c65 2de92c6f592b0275 4а7484аа6еа6е483 5cb0a9dcbd41fbd4 76f988da831153b5 983e5152ee66dfab a831c66d2db43210 b00327c898fb213f bf597fc7beef0ee4 c6e00bf33da88fc2 d5a79147930aa725 06ca6351e003826f 142929670a0e6e70 27b70a8546d22ffc 2elb21385c26c926 4d2c6dfc5ac42aed 53380dl39d95b3df 650a73548baf63de 766a0abb3c77b2a8 81c2c92e47edaee6 92722c851482353b a2bfe8al4cf10364 a81a664bbc423001 C24b8b70d0f89791 c76c51a30654be30 dl92e819d6ef5218 d69906245565a910 f40e35855771202a 106aa07032bbdlb8 19a4cll6b8d2d0c8 1е376с085141аЬ53 2748774cdf8eeb99 34b0bcb5el9b48a8 391c0cb3c5c95a63 4ed8aa4ae3418acb 5b9cca4f7763e373 682e6ff3d6b2b8a3 748f82ee5defb2fc 78a5636f43172f60 84c87814alf0ab72 8cc702081a6439ec 90befffa23631e28 a4506cebde82bde9 bef9a3f7b2c67915 c67178f2e372532b ca273eceea26619c dl86b8c721c0c207 eada7dd6cde0eble f57d4f7fee6edl78 06f067aa72176fba 0a637dc5a2c898a6 113f9804bef90dae Ib710b35131c471b 28db77f523047d84 32caab7b40c72493 3c9ebe0al5c9bebc 431d67c49cl00d4c 4cc5d4becb3e42b6 97f299cfc657e2a 5fcb6fab3ad6faec 6c4 4198c4a475817. Фунщия SHA-3 84 определяется точно так же, как и функция SHA-512 с тем исключением, что в качестве стартового вектора хэширования берутся первые 64 бита квадратных корней простых чисел с девятого по шестнадцатое: Н(0)= {cbbb9d5dcl059ed8, 629a292a367cd507, 9159015a3070ddl7, 152fecd8f70e5939, 67332667ffc00b31, 8eb44a8768581511, db0c2e0d64f98fa7, 47b5481dbefa4fa4}. Далее выход функции обрезается до 384 левых бит и эти биты берутся в качестве значения функции хэширования SHA-384. 4.3.3. Функция хэширования ГОСТ Р 34.11-94 При описании функции хэширования будут использоваться те же обозначения, что использовались при описании алгоритма выработки цифровой подписи согласно ГОСТ Р 34.10, и, кроме того, пусть М - последовательность двоичных символов, подлежаш,их хэшированию. h - хэш-функция, отображаюш,ая последовательность М в слово h(M) G У25б(2). Ек(А) - результат шифрования слова А на ключе К с использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены. Н - стартовый вектор хэширования. Общие положения Под хэш-функцией h понимается отображение h: B*V256(2). Для определения хэш-функции необходимы: алгоритм вычисления шаговой функции хэширования к, где к: V256(2)xV256(2)V256(2); описание итеративной процедуры вычисления значения хэш-функции h. Алгоритм вычисления шаговой функции хэширования состоит из трех частей: генерации четырех 256-битных ключей; шифруюш,его преобразования - шифрования 64-битных подслов слова Н на ключах К, (/ = 1, 2, 3, 4) с использованием алгоритма ГОСТ 28147 в режиме простой замены; перемешиваюш,его преобразования результата шифрования. Генерация ключей. Рассмотрим X = (256, 255, l) G У25б(2). Пусть X =Х4ХзХ2Х1 =rii6ril5---ril = 323l Ь гдех,еУб4(2), /= 1..4; теVi6(2),y = 1..16; tGVs{2),k- 1..32. Обозначим А(Х) = (Xi ® Х2)Х4ХзХ2. Задается преобразование Р: У25б(2)У25б(2) слова 32...1 в слово ф(32)ф(31)---119(1), где ф(/+1+4(-1)) = 8/ + к, i 0.3, к = 1..8. Для генерации ключей необходимо использовать следуюш,ие исходные данные: - слова Н, М G У25б(2); константы: слова С, (/ = 2,3,4), имеюш,ие значения С2=С4=о и Сз= \V\V4V(o4yfo\of)\\Vf. При вычислении ключей реализуется следуюш,ий алгоритм: 1. Присвоить значения /= 1,и = Н, V = M. 2. Выполнить вычисление W = и © V, Kl = P(W). 3. Присвоить / = / + 1. 4. Проверить условие / = 5. При положительном исходе перейти к шагу 7. При отрицательном - перейти к шагу 5. 5. Выполнить вычисление и = A(U) © Ci, V = A(A(V)), W = и © V, К, = P(W); 6. Перейти к шагу 3 7. Конец работы алгоритма. Шифрующее преобразование На данном этапе осуш,ествляется шифрование 64-битных подслов слова Н на ключах К, (/ = 1, 2, 3, 4). Для шифруюш,его преобразования необходимо использовать следуюш,ие исходные данные: H=h4h3h2hi, h,GV64(2), / = 1..4 и набор ключей Ki, К2, К3, После выполнения шифрования получают слова Si = Ек/Ь,), где /= 1, 2, 3, 4, 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ 19 ] 20 21 22 23 24 |