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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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 являются стандартными, им следует отдавать предпочтение.

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

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

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

[править | править код]

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

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

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

[править | править код]

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

[править | править код]

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

[править | править код]

Входными данными алгоритма bash-s являются слова и числа . Выходными данными являются преобразованные слова

Переменные

[править | править код]

Используются переменные .

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

[править | править код]

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

  1. Возвратить

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

[править | править код]

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

[править | править код]

Входными данными алгоритма bash-f является слово .

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

Слово 𝑆 записывается в виде

Переменные

[править | править код]

Используются переменные и

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

[править | править код]

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

1. .
2. Для i = 1, 2,…, 24 выполнить:
1) ;
2) для j = 0, 1,…, 7:
a);
b);
3)
4) ;
5) если  — четное, то ;
иначе .
3. Возвратить S.

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

[править | править код]

Входными данными алгоритма хэширования уровня стойкости 𝑙 является сообщение

Выходными данными является слово  — хэш-значение сообщения .

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

[править | править код]

Используются алгоритм bash-f, и переменная

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

[править | править код]

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

1. Дописать к сначала слово , а затем символов , где  — минимальное неотрицательное целое, для которого кратно .
2. Полученное слово записать в виде
3. .
4. Для i = 1, 2,…, n выполнить:
1) ;
2) bash-f.
5.
6. Возвратить .
  1. Информационные технологии и безопасность. Алгоритмы хэширования. — 2016. Архивировано 25 мая 2021 года.
  2. Bertoni G., Daemen J., Peeters M., Van Assche G. Cryptographic sponge functions. — 2011. Архивировано 8 августа 2017 года.
  3. Информационные технологии и безопасность. Алгоритмы хэширования. — 2016. — С. 6. Архивировано 25 мая 2021 года.
  4. Информационные технологии и безопасность. Алгоритмы хэширования. — 2016. — С. 6—7. Архивировано 25 мая 2021 года.
  5. Информационные технологии и безопасность. Алгоритмы хэширования. — 2016. — С. 7. Архивировано 25 мая 2021 года.