Bash (хэш-функция)

Материал из testwiki
Перейти к навигации Перейти к поиску

Bash — государственный стандарт, описывающий алгоритмы хэширования стандартизированные в Республики Беларусь. Полное название стандарта — СТБ 34.101.77-2016 «Информационные технологии и безопасность. Алгоритмы хэширования»[1].

Описание

Назначение

Настоящий стандарт определяет семейство криптографических алгоритмов хэширования, предназначенных для контроля целостности и необратимого сжатия данных. Обрабатываемыми данными являются двоичные слова (сообщения).

Алгоритм хэширования по сообщению произвольной длины строит хэш-значение — слово фиксированной длины. Стороны могут организовать контроль целостности сообщений путем сравнения их хэш-значений с достоверными контрольными хэш-значениями. Изменение сообщения с высокой вероятностью приводит к изменению соответствующего хэш-значения, и поэтому хэш-значения могут использоваться вместо самих сообщений, например в системах ЭЦП.

Алгоритмы хэширования могут дополнительно использоваться при построении систем имитозащиты, генераторов случайных и псевдослучайных чисел, протоколов аутентификации, доказательств вычислительной работы и др.

Примечание: Алгоритм хэширования установлен также в СТБ 34.101.31. Переход от алгоритма СТБ 34.101.31 к алгоритмам настоящего стандарта позволит увеличить скорость хэширования по крайней мере на паритетном уровне стойкости и на 64-разрядных аппаратных платформах. Кроме этого, алгоритмы хэширования настоящего стандарта поддерживают все три уровня стойкости алгоритмов ЭЦП, определенных в СТБ 34.101.45, в то время как алгоритм СТБ 34.101.31 поддерживает только первый уровень.

Шаговая функция

Алгоритмы хэширования построены по схеме sponge (губка)[2]. Ядром схемы является шаговая функция, которая определяет сложное биективное преобразование слов большой длины.

В настоящем стандарте шаговая функция действует на слова длины 1536. Действие задается алгоритмом bash-f.

Шаговая функция bash-f имеет самостоятельное значение и может использоваться за пределами настоящего стандарта для построения других криптографических алгоритмов.

Уровень стойкости

Алгоритмы хэширования настоящего стандарта отличаются уровнем стойкости 𝑙. Это натуральное число, кратное 16 и не превосходящее 256. Алгоритм уровня 𝑙 вычисляет хэш-значения длины 2𝑙, обрабатывая входные слова блоками длины 1536 − 4𝑙. Уровни 𝑙 = 128, 𝑙 = 192 и 𝑙 = 256 являются стандартными, им следует отдавать предпочтение.

При выборе 𝑙 следует учитывать, что для определения сообщения с заданным хэш-значением требуется выполнить порядка 22l операций, а для определения двух различных сообщений с одинаковыми хэш-значениями требуется выполнить порядка 2l операций.

Следует учитывать также, что с ростом 𝑙, кроме повышения стойкости, снижается быстродействие алгоритмов. В частности, хэширование на уровне 𝑙 = 256 выполняется примерно в 2 раза медленнее, чем на уровне 𝑙 = 128.

Хэш-значение

Длина хэш-значения регулируется уровнем стойкости 𝑙. Если при фиксированном 𝑙 требуются не все, а 𝑛 < 2𝑙 символов хэш-значения, то должны использоваться первые 𝑛 символов.

Все обозначение определены в стандарте (раздел 4).

Вспомогательные алгоритмы

Алгоритм bash-s[3]

Входные и выходные данные

Входными данными алгоритма bash-s являются слова W0,W1,W2{0,1}64 и числа m1,n1,m2,n2{1,2,...,63}. Выходными данными являются преобразованные слова W0,W1,W2.

Переменные

Используются переменные T0,T1,T2{0,1}64.

Шаги алгоритма

Преобразование слов W0,W1,W2 состоит в выполнении следующих шагов:

  1. T0RotHim1(W0)
  2. W0W0W1W2
  3. T1W1RotHin1(W0)
  4. W1T0T1
  5. W2W2RotHim2(W2)RotHin2(T1)
  6. T0W2
  7. T1W0W2
  8. T2W0W1
  9. T0T0W1
  10. W1W1T1
  11. W2W2T2
  12. W0W0T0
  13. Возвратить (W0,W1,W2)

Алгоритм bash-f[4]

Входные и выходные данные

Входными данными алгоритма bash-f является слово S{0,1}1536 .

Выходными данными является преобразованное слово 𝑆.

Слово 𝑆 записывается в виде S=S0||S1||...||S23,Si{0,1}64

Переменные

Используются переменные C{0,1}64 и m1,n1,m2,n2{1,2,...,63}

Шаги алгоритма

Преобразование слова 𝑆 состоит в выполнении следующих шагов:

1. CB194BAC80A08F53B16.
2. Для i = 1, 2,…, 24 выполнить:
1) (m1,n1,m2,n2)(8,53,14,1);
2) для j = 0, 1,…, 7:
a)(Sj,S8+j,S16+j)bashs(Sj,S8+j,S16+j,m1,n1,m2,n2);
b)(m1,n1,m2,n2)(7m1 mod 64,7n1 mod 64,7m2 mod 64,7n2 mod 64);
3) SS15||S10||S9||S12||S11||S14||S13||S8||S17||S16||S19||S18||S21||S20||S23||S22||S6||S3||S0||S5||S2||S7||S4||S1
4) S23S23C;
5) если C — четное, то CShLo(C);
иначе CShLo(C)AED8E07F99E12BDC16.
3. Возвратить S.

Алгоритмы хэширования[5]

Входные и выходные данные

Входными данными алгоритма хэширования уровня стойкости 𝑙 является сообщение X{0,1}*

Выходными данными является слово Y{0,1}2l — хэш-значение сообщения X.

Вспомогательные преобразования и переменные

Используются алгоритм bash-f, и переменная S{0,1}1536

Шаги алгоритма

Хэширование сообщения X на уровне стойкости 𝑙 состоит в выполнении следующих шагов:

1. Дописать к X сначала слово 01, а затем t символов 0, где t — минимальное неотрицательное целое, для которого |X|+2+t кратно 15364l.
2. Полученное слово X||01||0t записать в виде X1||X2||Xn,Xi{0,1}15364l
3. S01472||l/464.
4. Для i = 1, 2,…, n выполнить:
1) Lo15364l(S)Xi;
2) S bash-f(S).
5. YLo2l(S)
6. Возвратить Y.

Ссылки

Шаблон:Примечания

Шаблон:Изолированная статья