Объединенный
.pdf8
Федерации ГОСТ Р 34.11-2012, а затем без изменения вошел в межгосударственный стандарт ГОСТ 34.11-2018.
Опишем функцию «Стрибог» подробно. Дли этого рассмотрим перестановку
S64 , действующую |
на |
множестве V512 |
следующим образом: |
|
|
a a1 ||...||a64 a1 |
||...||a 64 ,a1,...,a64 V8 , и задаваемую вектором |
|
={0, 8, 16, 24, 32, 40, 48, 56, 1, 9, 17, 25, 33, 41, 49, 57, 2, 10, 18, 26, 34, 42, 50, 58, 3, 11, 19, 27, 35, 43, 51, 59, 4, 12, 20, 28, 36, 44, 52, 60, 5, 13, 21, 29, 37, 45, 53, 61, 6, 14, 22, 30, 38, 46, 54, 62, 7, 15, 23, 31, 39, 47, 55, 63}.
Рассмотрим подстановку :V8 V8 , задающую нелинейное биективное отображение множества V8 в себя и определяемую равенством
x x , где x 256 ,
и0,..., 255 (252, 238, 221, 17, 207, 110, 49, 22, 251, 196, 250, 218, 35, 197, 4, 77,
233, 119, 240, 219, 147, 46, 153, 186, 23, 54, 241, 187, 20, 205, 95, 193, 249, 24, 101, 90, 226, 92, 239, 33, 129, 28, 60, 66, 139, 1, 142, 79, 5, 132, 2, 174, 227, 106, 143, 160, 6, 11, 237, 152, 127, 212, 211, 31, 235, 52, 44, 81, 234, 200, 72, 171, 242, 42, 104, 162, 253, 58, 206, 204, 181, 112, 14, 86, 8, 12, 118, 18, 191, 114, 19, 71, 156, 183, 93, 135, 21, 161, 150, 41, 16, 123, 154, 199, 243, 145, 120, 111, 157, 158, 178, 177, 50, 117, 25, 61, 255, 53, 138, 126, 109, 84, 198, 128, 195, 189, 13, 87, 223, 245, 36, 169, 62, 168, 67, 201, 215, 121, 214, 246, 124, 34, 185, 3, 224, 15, 236, 222, 122, 148, 176, 188, 220, 232, 40, 80, 78, 51, 10, 74, 167, 151, 96, 115, 30, 0, 98, 68, 26, 184, 56, 130, 100, 159, 38, 65, 173, 69, 70, 146, 39, 94, 85, 47, 140, 163, 165, 125, 105, 213, 149, 59, 7, 88, 179, 64, 134, 172, 29, 247, 48, 55, 107, 228, 136, 217, 231, 137, 225, 27, 131, 73, 76, 63, 248, 254, 141, 83, 170, 144, 202, 216, 133, 97, 32, 113, 103, 164, 45, 43, 9, 91, 203, 155, 37, 208, 190, 229, 108, 82, 89, 166, 116, 210, 230, 244, 180, 192, 209, 102, 175, 194, 57, 75, 99, 182).
Также определим линейное отображение l:V64 V64, представляющее собой умножение вектора y V64 на двоичную матрицу В = (bij) из GL64(2):
l(y) = yВ.
Ниже приводем точное значение матрицы В, взятое нами из текста стандарта ГОСТ 34.11-2018. В каждой строке записано 4 строки матрицы В, при этом в строке с номером i, i от 0 до 15, записаны строки матрицы В с номерами 4i + j, j из 0,..., 3 в следующем порядке (слева направо): 4i, 4i +1, 4i +2, 4i + 3:
8e20faa72ba0b470 47107ddd9b505a38 ad08b0e0c3282d1c d8045870ef14980e 6c022c38f90a4c07 3601161cf205268d 1b8e0b0e798c13c8 83478b07b2468764 a011d380818e8f40 5086e740ce47c920 2843fd2067adea10 14aff010bdd87508 0ad97808d06cb404 05e23c0468365a02 8c711e02341b2d01 46b60f011a83988e 90dab52a387ae76f 486dd4151c3dfdb9 24b86a840e90f0d2 125c354207487869 092e94218d243cba 8a174a9ec8121e5d 4585254f64090fa0 accc9ca9328a8950 9d4df05d5f661451 c0a878a0a1330aa6 60543c50de970553 302a1e286fc58ca7 18150f14b9ec46dd 0c84890ad27623e0 0642ca05693b9f70 0321658cba93c138 86275df09ce8aaa8 439da0784e745554 afc0503c273aa42a d960281e9d1d5215 e230140fc0802984 71180a8960409a42 b60c05ca30204d21 5b068c651810a89e 456c34887a3805b9 ac361a443d1c8cd2 561b0d22900e4669 2b838811480723ba 9bcf4486248d9f5d c3e9224312c8c1a0 effa11af0964ee50 f97d86d98a327728 e4fa2054a80b329c 727d102a548b194e 39b008152acb8227 9258048415eb419d 492c024284fbaec0 aa16012142f35760 550b8e9e21f7a530 a48b474f9ef5dc18 70a6a56e2440598e 3853dc371220a247 1ca76e95091051ad 0edd37c48a08a6d8 07e095624504536c 8d70c431ac02a736 c83862965601dd1b 641c314b2b8ee083
9
Введенные перестановка , подстановка и линейное преобразование l используются в алгоритме «Стрибог» для определения следующих преобразований над векторами длины 512 бит:
S :V512 |
V512,S x S x1 ||...|| x64 |
x1 ||...|| x64 ; |
|||
P:V512 |
V512,P x P x1 |
||...|| x64 x 1 ||...|| x 64 ; |
|||
L:V512 |
V512,L y P y1 |
||...|| y8 |
l y1 ||...||l y8 , |
||
где x1,...,x64 V8 , y1,...,y8 V64 . |
|
|
|
||
Кроме |
того, определим |
величины s, j 2512 , j |
|
, представляющие собой |
|
1,r |
|||||
различные контрольные суммы входного сообщения a a1 ||a2 ||...||ar 1 ||ar :
r
s ai mod2512 ,
i 1
j
j len ai mod2512 .
i 1
Теперь мы можем определить одношаговую функцию сжатия, представляющую собой вариант функции Миягучи-Принеля, примененный к некоторому блочному шифру
E(k,а):
f hi 1,ai E hi 1 i ,ai hi 1 ai ,i 1,r (****)
Для описания блочного шифра, используемого внутри функции f, нам надо определить алгоритм развертки ключа k и алгоритм зашифрования E(k,а).
Алгоритм развертки ключа k заключается в определении значений k1,...,k13 V512
в соответствии со следующими равенствами k1 k,
ki L P S ki 1 ci ,i 2,13,
где c2,..., c13 из V512 - фиксированные константы, значения которых могут быть
найдены в тексте стандарта ГОСТ Р 34.11-2012.
Алгоритм зашифрования Е(k, а) состоит из двенадцати одинаковых раундов
R k,a :V512 V512 V512 |
и завершающего преобразования W k,a :V512 V512 V512 , |
определяемых равенствами
R k,a L P S k a ,
W k,a k a .
Легко видеть, что раундовое преобразование R используется и в алгоритме развертки ключа. Суммируя, мы можем записать алгоритм зашифрования в виде
E k,a W k13,R k12,...,R k1,a ... .
Для полного описания бесключевой функции хеширования «Стрибог», определим завершающее преобразование g:
g hr 1,ar f |
f f h,ar* , r ,s (*****) |
||
где вектор ar* |
определен равенством |
||
a* a ||1|| |
0...0 |
||
r |
r |
|
|
511 len ar
10
Таким образом, бесключевая функция хеширования «Стрибог» определяется равенством (*), в котором одношаговая функция f удовлетворяет равенству (****), а завершающее преобразование g удовлетворяет равенству (*****).
Описанная функция позволяет вырабатывать код целостности длиной 512 бит. Для того чтобы выработать код целостности длины 256 бит, необходимо выработать код длины 512 бит, а потом взять его старшие 256 разрядов, то есть
|
|
|
msb 256,H a h1 ||...||h256 || |
h257 ||...||h512 |
, |
|
|
|
|
код целостности длины 256 бит |
|
где hi V1,i 1,512.
Таким образом, бесключевая функция хеширования «Стрибог» определяется равенством (*), в котором одношаговая функция f удовлетворяет равенству (****), а завершающее преобразование g удовлетворяет равенству (*****).
Криптографическая губка
Широкую популярность схема Меркла-Дамгарда приобрела благодаря доказательству того, что устойчивость к коллизиям всей конструкции зависит только от устойчивости к коллизиям функции сжатия.
Несмотря на популярность схемы Меркла-Дамгарда, ряд работ показал недостатки данной конструкции, связанные с множественными коллизиями [Antoine Joux, «Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions», In M. Franklin, editor, Advances in Cryptology - CRYPTO 2004, Vol. 3152 of Lecture Notes in Computer Science, pp. 306-316, Springer, 2004], дополнением сообщения до нужной длины [John Kelsey, «A long-message attack on SHAx, MDx, Tiger, N-Hash, Whirlpool, and Snefru. Draft». Unpublished Manuscript], нахождением второго прообраза [Ueli Maurer, Renato Renner, Clemens Holenstein, «Indifferentiability, Impossibility Results on Reductions, and Applications to the Random Oracle Methodology», In M. Naor, editor, Theory of Cryptography, First Theory of Cryptography Conference, Vol. 2951 of Lecture Notes in Computer Science, pp. 21-39, Springer, 2004].
Атаки направлены не на конкретный алгоритм, а применимы к любой хешфункции, построенной по схеме Меркла-Дамгарда. Атака, основанная на множественных коллизиях [Antoine Joux, «Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions», In M. Franklin, editor, Advances in Cryptology - CRYPTO 2004, Vol. 3152 of Lecture Notes in Computer Science, pp. 306-316, Springer, 2004],
может быть осуществлена злоумышленником, даже если он имеет доступ к функции хеширования в целом, но не имеет возможности контролировать значения функции сжатия. Дополнение сообщения до нужной длины направлено на схему ДевисаМейера, однако никак не затрагивает особенности самого блочного шифра, что делает эту атаку также достаточно общей. В связи с этим стали появляться предложения по модификации столь популярной конструкции такие как конструкции Wide Pipe, HAIFA, рандомизированная схема, и, наконец, криптографическая губка.
Конструкция «криптографическая губка» была разработана группой криптографов во главе с Йоаном Дайменом с целью заменить устаревшую конструкцию Меркла-Дамгарда. Впервые она была представлена в 2007 году на симпозиуме ECRYPT. Представляет собой отображение входных данных переменной длины в выходные данные также переменной длины. Преобразование (или перестановка) f :Vd Vd оперирует с фиксированным количеством бит d = b + c,
где b называется (битовой) скоростью (англ. rate), а c «емкостью» (англ. capacity). На начальном этапе, как и в конструкции Меркла-Дамгарда, входные данные расширяются в соответствии с заданным алгоритмом, после чего разбиваются на блоки по b бит. Далее d бит состояния инициализируются нулями.
11
Конструкция включает две фазы.
В первой фазе (абсорбирование или впитывание или поглощение) b-битовые блоки сообщения а суммируются (операция XOR) с первыми b битами внутреннего состояния – результата преобразования f. Когда эта операция проделана для всех блоков сообщения, фаза завершается. Далее, на фазе «отжима» первые b бит внутреннего состояния возвращаются в качестве выходных блоков f . Это действие повторяется, пока не будет получена желаемая длина хеш-суммы: H(a), равная k*b бит.
Внимательный взгляд на новую конструкцию позволяет заметить, что и она базируется на конструкции Меркла-Дамгарда, используя дополнительно операцию усечения.
SHA-3
Активные исследования в области построения новых хеш-функций приходятся на 2007-2012 года, когда NIST проводил конкурсный отбор кандидатов на использование хеш-функции в качестве нового стандарта SHA-3. Новый стандарт SHA-3 должен поддерживать семейство алгоритмов, реализующих хеш-суммы длиной 224, 256, 384 и 512 бит. Как минимум, одна функция из семейства должна поддерживать хеш-код аутентификации сообщений (HMAC) и рандомизированное хеширование. Кроме того, для всех n бит хеш-суммы алгоритм должен обеспечивать выполнение следующих условий:
устойчивость к нахождению прообраза для n бит;
устойчивость к нахождению второго прообраза для (n - L) бит, где первый прообраз имеет длину не более 2L блоков;
устойчивость к коллизиям для n/2 бит;
устойчивость к атакам дополнением сообщения;
для любого m < n любое подмножество из m бит хеш-суммы длиной в n бит должно удовлетворять выше названным условиям.
SHA-3 (Keccak — произносится как «кечак») — алгоритм хеширования переменной разрядности, разработанный группой авторов во главе с Йоаном Дайменом, соавтором Rijndael, автором шифров MMB, SHARK, Noekeon, SQUARE и BaseKing. 2 октября 2012 года Keccak стал победителем конкурса криптографических алгоритмов, проводимым Национальным институтом стандартов и технологий США. 5 августа 2015 года алгоритм утверждён и опубликован в качестве стандарта FIPS 202. В аппаратных реализациях Keccak оказался намного быстрее, чем все другие финалисты: Skein, JH, Grostl, Blake.
Хеш-функции семейства SHA-3 построены на основе конструкции криптографической губки, в которой данные сначала «впитываются» в губку, при котором исходное сообщение подвергается многораундовым перестановкам f, затем результат Z «отжимается» из губки. На этапе «впитывания» блоки сообщения суммируются по модулю 2 с подмножеством состояния, которое затем преобразуется
12
с помощью функции перестановки f. На этапе «отжимания» выходные блоки считываются из одного и того же подмножества состояния, изменённого функцией перестановок f.
Более подробно с описанием SHA-3 можно познакомиться в любом справочном пособии.
Алгоритм получения значения хеш-функции можно разделить на несколько этапов:
1.Исходное сообщение a дополняется до строки a* длины, кратной b, с помощью функции дополнения (pad-функции) (в SHA-3 используется паттерн pad10*1: к сообщению добавляется 1, после него 0 или больше нулевых битов (до r-1), в конце 1)
2. |
Строка a* делится на r блоков длины b: a* a ||a ||...||a |
||a |
||||
|
|
|
1 |
2 |
r 1 |
r |
3. |
«Впитывание (абсорбирование)»: |
каждый блок |
ai Vb |
дополняется |
||
|
нулями до строки длины d бит и суммируется по модулю 2 со строкой |
|||||
|
состояния S, где S — строка длины d бит (d=b+c). Перед началом |
|||||
|
работы функции все элементы S равны нулю. Для каждого следующего |
|||||
|
блока состояние — |
строка, |
полученная |
применением функции |
||
|
(перестановок) f к результату предыдущего шага. |
|
|
|
||
4. |
«Отжимание»: пока длина H(a) меньше n (n— количество бит в |
|||||
|
результате хеш-функции), |
к H(a) добавляется b первых бит состояния S, |
||||
|
после каждого прибавления к S применяется функция перестановок f. |
|||||
|
Затем S обрезается до длины n бит |
|
|
|
|
|
5. |
Строка H(a) длины n бит возвращается в качестве результата |
|||||
Благодаря тому, что состояние содержит c дополнительных бит, алгоритм устойчив к атаке удлинением сообщения, к которой восприимчивы алгоритмы SHA- 1 и SHA-2.
В SHA-3 состояние S - это массив 5 × 5 слов длиной w = 64 бита, всего 5 × 5 × 64 = 1600 бит. Также в Keccak могут использоваться длины w, равные меньшим степеням 2 (от w = 1 до w = 32).
Функция перестановок, используемая в SHA-3, включает в себя исключающее «ИЛИ» (XOR), побитовое «И» (AND) и побитовое отрицание (NOT). Функция определена для строк длины-степени 2w = 2l. В основной реализации SHA-3 w = 64 ( l = 6).
Состояние S можно представить в виде трёхмерного массива A размером 5 × 5 × w . Тогда элемент массива A [ i ] [ j ] [ k ] - это ( 5 i + j ) × w + k бит строки состояния S .
Функция содержит несколько шагов: θ, ρ, π, χ, ι, которые выполняются несколько раундов. На каждом шаге обозначим входной массив A, выходной массив A'.
Шаг θ
Для всех i и k, таких, что -1 < i < 5, -1< k < w, положим
C ( i , k ) = A [ i , 0 , k ] XOR A [ i , 1 , k ] XOR A [ i , 2 , k ] XOR A [ i , 3 , k ] XOR A [ i , 4 , k ]
D ( i , k ) = C [ ( i − 1 ) mod 5 , k ] XOR C [ ( i + 1 ) mod 5 , ( k − 1 ) mod w ] Для всех ( i , j , k ), таких, что 0 <= i < 5, 0 <= j < 5, 0 <= k < w,
A ′ [ i , j , k ] = A [ i , j , k ] XOR D [ i , k ]
Шаг ρ
Для всех k, таких, что 0 <= k < w , A ′ [ 0 , 0 , k ] = A [ 0 , 0 , k ]
Пусть в начале ( i , j ) = ( 1 , 0 ). Для t от 0 до 23:
1.Для всех k, таких, что 0 <= k < w, A ′ [ i , j , k ] = A [ i , j , ( k − ( t + 1 ) ( t + 2 ) / 2 ) mod w ]
2.( i , j ) = ( j , ( 2 i + 3 j ) mod 5 )
Шаг π
Для всех ( i , j , k ), таких, что 0 <= i < 5, 0 <= j < 5, 0 <= k < w
13
A ′ [ i , j , k ] = A [ ( i + 3 j ) mod 5 , i , k ]
Шаг χ
Для всех ( i , j , k ) , таких, что 0 <= i < 5 , 0 <= j < 5,
A ′ [ i , j , k ] = A [ i , j , k ] XOR ( ( A [ ( i + 1 ) mod 5 , j , k ] XOR 1 ) * A [ ( i + 2 ) mod 5 , j , k ] )
Шаг ι
Введем дополнительную функцию rc ( t ), где вход - целое число t, а на выходе бит. Алгоритм rc ( t )
Если t mod 255 = 0, то возвращается 1
Пусть R = [ 10000000 ]
Для t от 1 до 255:
R = 0 || R |
|
R [ 0 ] = R [ 0 ] |
XOR R [ 8 ] |
R [ 4 ] = R [ 4 ] |
XOR R [ 8 ] |
R [ 5 ] = R [ 5 ] |
XOR R [ 8 ] |
R [ 6 ] = R [ 6 ] |
XOR R [ 8 ] |
R = Trunc 8 [ R ]
Возвращается R [ 0 ] RC [ 2 i − 1 ] = rc ( i + 7 i r )
Алгоритм ι ( A , ir ) ir - номер раунда.
1.Для всех (i,j,k), таких, что 0 <= i <5, 0 <= j <5, 0 <=k <w A ′ [i,j,k] = A [i ,j ,k ]
2.Пусть RC - массив длины w, заполненный нулями.
3.Для i от 0 до l: RC [ 2 i − 1 ] = rc ( i + 7 i r )
4.Для всех k, таких, что 0 <= k < w, A ′ [ 0 , 0 , k ] = A ′ [ 0 , 0 , k ] XOR R C [ k ]
Алгоритм перестановок
1.Перевод строки S в массив A
2.Для ir от 12 + 2 l − nr до 12 + 2 l − 1 A ′ = ι ( χ ( π ( ρ ( θ ( A ) ) ) ) , ir )
3.Перевод массива A ′ в стоку S ′ длины d
При хешировании сообщений произвольной длины основой функции сжатия алгоритма является функция f, выполняющая перемешивание внутреннего состояния алгоритма. Состояние (обозначим его A) представляется в виде массива 5×5, элементами которого являются 64-битные слова, инициализированные нулевыми битами (то есть, размер состояния составляет 1600 битов). Функция f выполняет 24 раунда, в каждом из которых производятся следующие действия:
C[x] = A[x, 0] XOR A[x, 1] XOR A[x, 2] XOR A[x, 3] XOR A[x, 4], x = 0…4; D[x] = C[x — 1] XOR (С[x + 1] >>> 1), x = 0…4;
A[x, y] = A[x, y] XOR D[x], x = 0…4, y = 0…4;
B[y, 2x + 3y] = A[x, y] >>> r[x, y], x = 0…4, y = 0…4;
A[x, y] = B[x, y] XOR (~B[x + 1, y] & B[x + 2, y]), x = 0…4, y = 0…4,
где:
B — временный массив, аналогичный по структуре массиву состояния;
C и D — временные массивы, содержащие по пять 64-битных слов;
r — массив, определяющий величину циклического сдвига для каждого слова состояния;
~x — поразрядное дополнение к x;
и операции с индексами массива выполняются по модулю 5.
Кроме приведенных выше операций, в каждом раунде также выполняется наложение операцией XOR раундовой константы на слово A[0, 0].
Перед выполнением функции сжимания накладывается операция XOR фрагментов исходного сообщения с фрагментами исходного состояния. Результат обрабатывается функцией f. Данное наложение в совокупности с функцией сжимания, выполняемые для
14
каждого блока входных данных, представляют собой «впитывающую» (absorbing) фазу криптографической губки.
Стоит отметить, что функция f использует только операции, стойкие к атакам, использующим утечки данных по побочным каналам.
Результирующее хеш-значение вычисляется в процессе выполнения «выжимающей» (squeezing) фазы криптографической губки, основу которой также составляет описанная выше функция f. Возможные размеры хеш-значений — 224, 256, 384 и 512 бит.
Оригинальный алгоритм Keccak имеет множество настраиваемых параметров с целью обеспечения оптимального соотношения криптостойкости и быстродействия для определённого применения алгоритма на определённой платформе. Настраиваемыми величинами являются: размер блока данных, размер состояния алгоритма, количество раундов в функции f() и другие.
На протяжения конкурса хеширования Национального института стандартов и технологий участники имели право настраивать свои алгоритмы для решения возникших проблем. Так, были внесены некоторые изменения в Keccak: количество раундов было увеличено с 18 до 24 с целью увеличения запаса безопасности.
Авторы Keccak учредили ряд призов за достижения в криптоанализе данного алгоритма.
Версия алгоритма, принятая в качестве окончательного стандарта SHA-3, имеет несколько незначительных отличий от оригинального предложения Keccak на конкурс. В частности, были ограничены некоторые параметры (отброшены медленные режимы c=768 и c=1024), в том числе для увеличения производительности. Также в стандарте были введены «функции с удлиняемым результатом» (XOF, Extendable Output Functions) SHAKE128 и SHAKE256, для чего хешируемое сообщение стало необходимо дополнять «суффиксом» из 2 или 4 бит, в зависимости от типа функции.
Функция |
Формула |
|
|
SHA3-224(M) |
Keccak[448](M||01, 224) |
|
|
SHA3-256(M) |
Keccak[512](M||01, 256) |
|
|
SHA3-384(M) |
Keccak[768](M||01, 384) |
|
|
SHA3-512(M) |
Keccak[1024](M||01, 512) |
SHAKE128(M, d)
Keccak[256](M||1111, d) SHAKE256(M, d)
Keccak[512](M||1111, d)
В декабре 2016 года Национальный институт стандартов и технологий США опубликовал новый документ, NIST SP.800-185[17], описывающий дополнительные функции на основе SHA-3:
|
|
|
Функция |
Описание |
|
|
|
|
cSHAKE128(X, L, N, S) |
Параметризованная версия SHAKE |
|
|
||
cSHAKE256(X, L, N, S) |
||
|
||
|
|
|
KMAC128(K, X, L, S) |
|
|
|
|
|
KMAC256(K, X, L, S) |
Имитовставка на основе Keccak |
|
|
||
KMACXOF128(K, X, L, S) |
||
|
||
|
|
|
KMACXOF256(K, X, L, S) |
|
|
|
|
|
TupleHash128(X, L, S) |
|
|
|
|
|
TupleHash256(X, L, S) |
Хеширование кортежа строк |
|
|
||
TupleHashXOF128(X, L, S) |
||
|
||
|
|
|
TupleHashXOF256(X, L, S) |
|
|
|
|
15
ParallelHash128(X, B, L, S)
ParallelHash256(X, B, L, S)
Параллелизуемая хеш-функция на основе Keccak ParallelHashXOF128(X, B, L, S)
ParallelHashXOF256(X, B, L, S)
Ключевые функции хеширования
Как уже говорили ранее, областью применения ключевых функций хеширования является одновременное обеспечение целостности передаваемой информации и аутентификации отправителя этой информации. Также ключевые функции хеширования применяются в криптографических протоколах, в которых происходит обмен информацией по открытым каналам связи. В настоящий момент в Российской Федерации не существует стандартизированного решения, которое бы регламентировало алгоритм ключевой функции хеширования, обеспечивающий оба перечисленных выше свойства (В Российской Федерации принят стандарт ГОСТ 34.13-2018, который регламентирует использование режима работы блочного шифра для выработки имитовставки, обеспечивающей целостность передаваемой информации). Поэтому мы остановимся на принципах построения ключевых функций хеширования, а также приведем описание алгоритмов, которые могут стать прототипами стандартизированных решений.
Пусть V* — пространство двоичных последовательностей произвольной длины, а
Vn — пространство двоичных векторов фиксированной длины n.
Определение. Пусть n,m - натуральные числа. Мы будем рассматривать отображения
MAC k,a :Vm V* Vn,k Vm,a V*,,
где k - секретный ключ такой, что len k =m, а a - сообщение.
Мы будем называть отображение ключевой функцией хеширования, если выполнены следующие условия.
1. При любом фиксированном значении k0 Vm функция сжатия
H a MAC k0,a является криптографической функцией хеширования, то
есть для нее выполнены свойства однонаправленности, а также сложности построения коллизии и второго прообраза, см. определение ранее.
2. Задача определения неизвестного значения k Vm при известном наборе
сообщений |
a1,...,at |
и соответствующих им значений |
MAC k,a1 ,.... |
MAC k,at |
должна |
является трудноразрешимой для |
максимально |
возможного натурального значения t.
Под трудоемкостью компрометации ключевой функции хеширования естественно подразумевать минимальную трудоемкость метода решения одной из перечисленных задач.
Результат действия функции MAC k,a мы будем называть кодом аутентичности,
или хеш-кодом сообщения а. Секретный ключ k мы будем называть ключом аутентификации.
Введенный нами параметр t задает количество пар ai ,MAC k,ai ,i 1,t . для
которых известен результат действия ключевой функции хеширования. Этот параметр, как правило, называется объемом используемой информации для фиксированного ключа k, а значение параметра t выступает в качестве границы применимости того или иного метода компрометации функции хеширования.
16
Данное нами определение является достаточно строгим поскольку для некоторых используемых на практике алгоритмов первое условие может не выполняться, если нарушителю известен секретный ключ k. В этой ситуации нарушитель, владеющий секретным ключом, может подделывать отправляемые им сообщения, что может оказаться недопустимым, например, в платежных системах или электронных системах, обрабатывающих юридически значимые документы.
Из данного нами понятия трудоемкости компрометации ключевой функции хеширования следует, что длина секретного ключа k может быть вдвое короче, чем длина кода целостности n.
Предположим, что тотальный перебор всех возможных значений из Vm является единственным способом определения секретного ключа k Vm, тогда трудоемкость такого метода есть O 2m опробований неизвестного ключа. С другой стороны,
воспользовавшись парадоксом «дней рождений», мы можем построить коллизию с
n
трудоемкостью O 22 выбора случайных сообщений при фиксированном ключе k.
Полагая указанные значения равными, получаем n = 2m. Отметим, что на практике длина ключа выбирается с учетом свойств и ограничений используемых криптографических преобразований и равенство n = 2m не выполняется.
В настоящее время известно несколько основных подходов к разработке ключевых функций хеширования.
1.Подход с использованием криптографической бесключевой функции хеширования. Функции, построенные на основе данного подхода, принято называть НМАС (hash message authentification code).
2.Подход с использованием блочного алгоритма шифрования. Функции, построенные на основе данного подхода, принято называть СМАС (cipher message authentification code).
3.Подход, основанный на использовании «универсального» хеширующего преобразования. Функции, построенные на основе данного подхода,
принято называть UMAC (message authentication code based on universal hashing)
4.Произвольный подход, основанный на применении криптографических преобразований, отличных от функций хеширования или блочного
шифрования.
Первые два подхода наиболее известны и распространены, поэтому мы рассмотрим их далее более подробно. Подход для построения функций на основе криптографических функций хеширования в настоящее время стандартизирован американским институтом стандартизации NIST, см. FIPS PUB 198.
Для построения функций на основе СМАС предложено несколько независимых вариантов, для которых известны практические реализации в некоторых зарубежных средствах криптографической защиты информации. Кроме того, к данному классу алгоритмов можно отнести отечественный режим выработки имитовставки, регламентируемый ГОСТ 34.13-2018.
Третий подход основывается на исследовании вероятностных свойств применяемого криптографического преобразования и использует универсальные функции хеширования, обладающие свойством равновероятного выхода. Такие функции, как правило, используют достаточно простые арифметические операции, которые позволяют в явном виде доказать равновероятное распределение вырабатываемых кодов целостности.
Последний подход не получил большого распространения. К этому подходу можно отнести, например, использование методов, традиционно применяемых для синтеза
17
поточных шифров. В настоящее время неизвестны широко распространенные ключевые функции хеширования, построенные с помощью данного подхода.
Функция НМАС
Наложенное нами выше требование на ключевую функцию хеширования — требование однонаправленности, а также сложности построения коллизий и второго прообраза — делает привлекательным использование бесключевых функций хеширования для синтеза ключевых функций.
Так, еще отечественный стандарт ГОСТ Р 34.11-94 мог быть использован для выработки кодов целостности следующим образом. Для функции ГОСТ Р 34.11-94 в
тексте стандарта не определено начальное значение h0 следовательно, это значение
может являться секретным ключом, используемым для выработки кода целостности. Следуя (*) мы могли бы определить функцию
MAC k,a MAC k,a1 || a2 ||...|| ar 1 || ar g f ...f f k,a1 ,a2 ,....,ar 1 ,ar ,
где одношаговая функция сжатия f и завершающее отображение g определяются соответственно равенствами (**) и (***). Используя то же равенство, мы могли бы также определить ключевую функцию хеширования на основе бесключевой функции «Стрибог», вычисляя f и g в соответствии с равенствами (**) и (***).
Несмотря на то что такой способ выработки кодов целостности неоднократно предлагался к использованию, большого распространения он не получил. Причиной этому стали невысокая скорость работы алгоритма ГОСТ Р 34.11-94, а также существование режима выработки имитовставки для алгоритма блочного шифрования ГОСТ 28147-89.
В зарубежных работах получил распространение другой подход, основанный на двукратном вычислении значений бесключевой функции хеширования. Так, значение функции MAC k,a может быть определено равенством
MAC k,a H k1 || H k2 ||a (*4)
где H a произвольная бесключевая функция хеширования, а производные ключи k1,k2
вырабатываются из ключа k.
Следует отметить, что данная функция удовлетворяет всем поставленным нами в определении условиям. Действительно, задача определения секретного ключа k1 и,
следовательно, k сводится к обращению функции H. Если функция H однонаправленная, то задача вычисления ее прообраза является трудоемкой в силу свойств функции H. Более того, поскольку при фиксированном ключе k данная функция есть двукратное вычисление значения функции H, то задача построения коллизии для определенной нами функции MAC k,a не легче, чем построение коллизии для функции H.
Подход к построению ключевых функций хеширования на основе равенства (*4), был стандартизирован американским институтом по стандартизации NIST, а позднее и международной системой стандартизации ISO под названием НМАС. Более подробно алгоритм НМАС выглядит следующим образом.
Алгоритм (Ключевая функция хеширования НМАС)
Вход: Секретный ключ k Vm, сообщение a V*, бесключевая функция хеширования H a :V* Vn .
Выход: MAC k,a - код аутентичности сообщения a, MAC k,a Vn :
1.Если len k = n, то положить k0 k и перейти к четвертому шагу.
2.Если len k > n, то определить k0 H k и перейти к четвертому шагу.
3. Если len k < n, то определить k0 k || 0...0 так, чтобы len k0 = n.
n len k
