BelT

BelT
Создан 2001 г.
Опубликован 2007 г.
Размер ключа 256 бит
Размер блока 128 бит
Число раундов 8
Тип комбинация Сеть Фейстеля и en: Lai-Massey scheme

BelT — государственный стандарт симметричного шифрования и контроля целостности Республики Беларусь. Полное название стандарта — СТБ 34.101.31-2007 «Информационные технологии и безопасность. Криптографические алгоритмы шифрования и контроля целостности». Принят в качестве предварительного стандарта в 2007 году. Введён в действие в качестве окончательного стандарта в 2011 году.

Описание

BelT — блочный шифр с 256-битным ключом и 8 циклами криптопреобразований, оперирующий с 128-битными словами. Криптографические алгоритмы стандарта построены на основе базовых режимов шифрования блоков данных. Все алгоритмы стандарта делятся на 8 групп:

  • алгоритмы шифрования в режиме простой замены;
  • алгоритмы шифрования в режиме сцепления блоков;
  • алгоритмы шифрования в режиме гаммирования с обратной связью;
  • алгоритмы шифрования в режиме счётчика;
  • алгоритм выработки имитовставки ;
  • алгоритмы одновременного шифрования и имитозащиты данных;
  • алгоритмы одновременного шифрования и имитозащиты ключей;
  • алгоритм хеширования;

Первые четыре группы предназначены для обеспечения безопасного обмена сообщениями. Каждая группа включает алгоритм шифрования и алгоритм расшифрования на секретном ключе. Стороны, располагающие общим ключом, могут организовать обмен сообщениями путём их шифрования перед отправкой и расшифрования после получения. В режимах простой замены и сцепления блоков шифруются сообщения, которые содержат хотя бы один блок, а в режимах гаммирования с обратной связью и счётчика — сообщения произвольной длины.

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

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

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

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

Шифрование блока

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

Входными данными алгоритмов шифрования и расшифрования являются блок X { 0 , 1 } 128 {\displaystyle X\in \{0,1\}^{128}} и ключ θ { 0 , 1 } 256 . {\displaystyle \theta \in \{0,1\}^{256}.}

Выходными данными является блок Y { 0 , 1 } 128 {\displaystyle Y\in \{0,1\}^{128}} — результат шифрования либо расшифрования слова X {\displaystyle X} на ключе θ : Y = F θ ( X ) {\displaystyle \theta :Y=F_{\theta }(X)} либо Y = F θ 1 ( X ) . {\displaystyle Y=F_{\theta }^{-1}(X).}

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

  • Слово X {\displaystyle X} записывается в виде X = X 1 X 2 X 3 X 4 , X i { 0 , 1 } 32 . {\displaystyle X=X_{1}\|X_{2}\|X_{3}\|X_{4},X_{i}\in \{0,1\}^{32}.}
  • Ключ θ {\displaystyle \theta } записывается в виде θ = θ 1 θ 2 θ 3 θ 4 θ 5 θ 6 θ 7 θ 8 , θ i { 0 , 1 } 32 {\displaystyle \theta =\theta _{1}\|\theta _{2}\|\theta _{3}\|\theta _{4}\|\theta _{5}\|\theta _{6}\|\theta _{7}\|\theta _{8},\theta _{i}\in \{0,1\}^{32}} , и определяются тактовые ключи K 1 = θ 1 , K 2 = θ 2 , K 3 = θ 3 , K 4 = θ 4 , K 5 = θ 5 , K 6 = θ 6 , K 7 = θ 7 , K 8 = θ 8 , K 9 = θ 1 , . . . . . . , K 56 = θ 8 . {\displaystyle K_{1}=\theta _{1},K_{2}=\theta _{2},K_{3}=\theta _{3},K_{4}=\theta _{4},K_{5}=\theta _{5},K_{6}=\theta _{6},K_{7}=\theta _{7},K_{8}=\theta _{8},K_{9}=\theta _{1},......,K_{56}=\theta _{8}.}

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

Преобразование G r : { 0 , 1 } 32 { 0 , 1 } 32 {\displaystyle G_{r}:\{0,1\}^{32}\rightarrow \{0,1\}^{32}} ставит в соответствии слову u = u 1 u 2 u 3 u 4 , u i { 0 , 1 } 8 {\displaystyle u=u_{1}\parallel u_{2}\parallel u_{3}\parallel u_{4},u_{i}\in \{0,1\}^{8}} , слово

Таблица 1 - Подстановка H {\displaystyle H}

G r ( u ) = R o t H i r ( H ( u 1 ) H ( u 2 ) H ( u 3 ) H ( u 4 ) ) . {\displaystyle G_{r}(u)=RotHi^{r}(H(u_{1})\parallel H(u_{2})\parallel H(u_{3})\parallel H(u_{4})).}

R o t H i r {\displaystyle RotHi^{r}-} циклический сдвиг влево на r {\displaystyle r} бит.

H ( u ) {\displaystyle H(u)-} операция замены 8-битной входной строки подстановкой из таблицы 1.

Подстановка H : { 0 , 1 } 8 { 0 , 1 } 8 {\displaystyle H:\{0,1\}^{8}\rightarrow \{0,1\}^{8}} задаётся фиксированной таблицей. В таблице используется шестнадцатеричное представление слов u { 0 , 1 } 8 . {\displaystyle u\in \{0,1\}^{8}.}

{\displaystyle \boxplus } и {\displaystyle \boxminus -} операции сложения и вычитания по модулю 2 32 . {\displaystyle 2^{32}.}

Зашифрование

Для шифрования блока X {\displaystyle X} на ключе θ {\displaystyle \theta } выполняются следующие шаги:

  1. Установить a X 1 , b X 2 , c X 3 , d X 4 . {\displaystyle a\leftarrow X_{1},b\leftarrow X_{2},c\leftarrow X_{3},d\leftarrow X_{4}.}
    Вычисления на i {\displaystyle i-} ом такте шифрования
  2. Для i {\displaystyle i} = 1,2,… ,8 выполнить:
1) b b G 5 ( a K 7 i 6 ) ; {\displaystyle b\leftarrow b\oplus G_{5}(a\boxplus K_{7i-6});}
2) c c G 21 ( d K 7 i 5 ) ; {\displaystyle c\leftarrow c\oplus G_{21}(d\boxplus K_{7i-5});}
3) a a G 13 ( b K 7 i 4 ) ; {\displaystyle a\leftarrow a\boxminus G_{13}(b\boxplus K_{7i-4});}
4) e G 21 ( b c K 7 i 3 ) i 32 ; {\displaystyle e\leftarrow G_{21}(b\boxplus c\boxplus K_{7i-3})\oplus \langle i\rangle _{32};}
5) b b e ; {\displaystyle b\leftarrow b\boxplus e;}
6) c c e ; {\displaystyle c\leftarrow c\boxminus e;}
7) d d G 13 ( c K 7 i 2 ) ; {\displaystyle d\leftarrow d\boxplus G_{13}(c\boxplus K_{7i-2});}
8) b b G 21 ( a K 7 i 1 ) ; {\displaystyle b\leftarrow b\oplus G_{21}(a\boxplus K_{7i-1});}
9) c c G 5 ( d K 7 i ) ; {\displaystyle c\leftarrow c\oplus G_{5}(d\boxplus K_{7i});}
10) a b ; {\displaystyle a\leftrightarrow b;}
11) c d ; {\displaystyle c\leftrightarrow d;}
12) b c ; {\displaystyle b\leftrightarrow c;}
3. Установить Y b d a c . {\displaystyle Y\leftarrow b\|d\|a\|c.}
4. Возвратить Y . {\displaystyle Y.}

Расшифрование

Для расшифрования блока X {\displaystyle X} на ключе θ {\displaystyle \theta } выполняются следующие шаги:

  1. Установить a X 1 , b X 2 , c X 3 , d X 4 . {\displaystyle a\leftarrow X_{1},b\leftarrow X_{2},c\leftarrow X_{3},d\leftarrow X_{4}.}
  2. Для i = {\displaystyle i=} 8,7,… ,1 выполнить:
1) b b G 5 ( a K 7 i ) ; {\displaystyle b\leftarrow b\oplus G_{5}(a\boxplus K_{7i});}
2) c c G 21 ( d K 7 i 1 ) ; {\displaystyle c\leftarrow c\oplus G_{21}(d\boxplus K_{7i-1});}
3) a a G 13 ( b K 7 i 2 ) ; {\displaystyle a\leftarrow a\boxminus G_{13}(b\boxplus K_{7i-2});}
4) e G 21 ( b c K 7 i 3 ) i 32 ; {\displaystyle e\leftarrow G_{21}(b\boxplus c\boxplus K_{7i-3})\oplus \langle i\rangle _{32};}
5) b b e ; {\displaystyle b\leftarrow b\boxplus e;}
6) c c e ; {\displaystyle c\leftarrow c\boxminus e;}
7) d d G 13 ( c K 7 i 4 ) ; {\displaystyle d\leftarrow d\boxplus G_{13}(c\boxplus K_{7i-4});}
8) b b G 21 ( a K 7 i 5 ) ; {\displaystyle b\leftarrow b\oplus G_{21}(a\boxplus K_{7i-5});}
9) c c G 5 ( d K 7 i 6 ) ; {\displaystyle c\leftarrow c\oplus G_{5}(d\boxplus K_{7i-6});}
10) a b ; {\displaystyle a\leftrightarrow b;}
11) c d ; {\displaystyle c\leftrightarrow d;}
12) a d ; {\displaystyle a\leftrightarrow d;}
3. Установить Y c a d b . {\displaystyle Y\leftarrow c\|a\|d\|b.}
4. Возвратить Y . {\displaystyle Y.}

Выработка имитовставки

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

  • Исходное сообщение произвольной длины, представленное в виде битовой последовательности X { 0 , 1 } {\displaystyle X\in \{0,1\}^{*}} . Если X {\displaystyle X} - непустое слово, то записать его в виде: X = X 1 X 2 . . . X n , | X 1 | = | X 2 | = . . . = | X n 1 | = 128 , 0 < | X n | 128 {\displaystyle {\displaystyle X=X_{1}\|X_{2}\|...\|X_{n}},|X_{1}|=|X_{2}|=...=|X_{n-1}|=128,0<|X_{n}|\leq 128} . Если же X {\displaystyle X} - пустое, то n = 1 {\displaystyle n=1} и | X 1 | = 0 {\displaystyle |X_{1}|=0} .
  • Ключ θ { 0 , 1 } 256 {\displaystyle \theta \in \{0,1\}^{256}} - битовая последовательность длины 256.

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

  • Преобразования ϕ 1 , ϕ 2 {\displaystyle \phi _{1},\phi _{2}} : { 0 , 1 } 128 { 0 , 1 } 128 {\displaystyle {\{0,1\}}^{128}\rightarrow {\{0,1\}}^{128}} , которые действуют на слово u = u 1 | | u 2 | | u 3 | | u 4 , u i { 0 , 1 } 32 {\displaystyle u=u_{1}||u_{2}||u_{3}||u_{4},u_{i}\in \{0,1\}^{32}} - битовая последовательность длины 32 . При этом:

ϕ 1 ( u ) = u 2 | | u 3 | | u 4 | | ( u 1 u 2 ) , {\displaystyle \phi _{1}(u)=u_{2}||u_{3}||u_{4}||(u_{1}\oplus u_{2}),}

ϕ 2 ( u ) = ( u 1 u 4 ) | | u 1 | | u 2 | | u 3 . {\displaystyle \phi _{2}(u)=(u_{1}\oplus u_{4})||u_{1}||u_{2}||u_{3}.}

  • Отображение ψ {\displaystyle \psi } , которое ставит в соответствие битовой последовательности длины меньше 128, слово длиной 128. Действует по правилу:

ψ ( u ) = u | | 1 | | 0 127 | u | {\displaystyle \psi (u)=u||1||0^{127-|u|}} .

  • Вспомогальтельные переменные r , s { 0 , 1 } 256 {\displaystyle r,s\in \{0,1\}^{256}} - битовые последовательности длины 128.

Алгоритм выработки имитовставки

  1. Заполнить вспомогательную переменную s {\displaystyle s} нулями: s 0 128 {\displaystyle s\leftarrow 0^{128}} и установить результат шифрования s {\displaystyle s} на данном ключе θ { 0 , 1 } 256 {\displaystyle \theta \in \{0,1\}^{256}} в r {\displaystyle r} : r F θ ( s ) {\displaystyle r\leftarrow F_{\theta }(s)} .
  2. Для каждого блока входного сообщения i = 1 , 2 , . . . , n 1 {\displaystyle i=1,2,...,n-1} выполнить: s F θ ( s X i ) {\displaystyle s\leftarrow F_{\theta }(s\oplus X_{i})} .
  3. Если | X n | = 128 {\displaystyle |X_{n}|=128} , то выполняем s s X n ϕ 1 ( r ) {\displaystyle s\leftarrow s\oplus X_{n}\oplus \phi _{1}(r)} , иначе s s ψ ( X n ) ϕ 2 ( r ) {\displaystyle s\leftarrow s\oplus \psi (X_{n})\oplus \phi _{2}(r)} .
  4. Записать в T {\displaystyle T} первые 64 бита слова F θ ( s ) {\displaystyle F_{\theta }(s)} : T L 64 ( F θ ( s ) ) {\displaystyle T\leftarrow L_{64}(F_{\theta }(s))} .
  5. Возвратить T {\displaystyle T} .

Алгоритм хеширования

Алгоритм хеширования используется для вычисления хеш-значения, которое впоследствии может применяться для контроля целостности данных.

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

Входными данными алгоритма является сообщение произвольной длины, представленное в виде битовой последовательности X { 0 , 1 } {\displaystyle X\in \{0,1\}^{*}} .

На выходе получается слово Y { 0 , 1 } 256 {\displaystyle Y\in \{0,1\}^{256}} .

Для работы алгоритма исходная битовая последовательность дополняется нулями так, чтобы её длина делилась на 256, и представляется следующим образом: X = X 1 | | X 2 | | . . . | | X d , X i { 0 , 1 } 256 {\displaystyle X=X_{1}||X_{2}||...||X_{d},X_{i}\in \{0,1\}^{256}} . Также нам понадобятся переменные s { 0 , 1 } 128 {\displaystyle s\in \{0,1\}^{128}} и h { 0 , 1 } 256 {\displaystyle h\in \{0,1\}^{256}} .

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

Пусть есть слово u = u 1 | | u 2 | | u 3 | | u 4 , u i { 0 , 1 } 128 {\displaystyle u=u_{1}||u_{2}||u_{3}||u_{4},u_{i}\in \{0,1\}^{128}} .

Определим два отображения:

σ 1 : { 0 , 1 } 512 { 0 , 1 } 128 , {\displaystyle \sigma _{1}:{\{0,1\}}^{512}\rightarrow {\{0,1\}}^{128},}

σ 2 : { 0 , 1 } 512 { 0 , 1 } 256 , {\displaystyle \sigma _{2}:{\{0,1\}}^{512}\rightarrow {\{0,1\}}^{256},}

которые действуют на слово u {\displaystyle u} по правилам:

σ 1 ( u ) = F u 1 | | u 2 ( u 3 u 4 ) u 3 u 4 , {\displaystyle \sigma _{1}(u)=F_{u_{1}||u_{2}}(u_{3}\oplus u_{4})\oplus u_{3}\oplus u_{4},}

σ 2 ( u ) = ( F θ 1 ( u 1 ) u 1 ) | | ( F θ 2 ( u 2 ) u 2 ) , {\displaystyle \sigma _{2}(u)=(F_{\theta _{1}}(u_{1})\oplus u_{1})||(F_{\theta _{2}}(u_{2})\oplus u_{2}),}

где θ 1 = σ 1 ( u ) | | u 4 {\displaystyle \theta _{1}=\sigma _{1}(u)||u_{4}} , θ 2 = ( σ 1 ( u ) 1 128 ) | | u 3 {\displaystyle \theta _{2}=(\sigma _{1}(u)\oplus 1^{128})||u_{3}} .

Вычисление хеш-значения

Схема одной итерации алгоритма хеширования
Схема одной итерации алгоритма хеширования

Алгоритм выполняется в несколько этапов:

  1. Заполняем переменную s {\displaystyle s} нулями: s 0 128 {\displaystyle s\longleftarrow 0^{128}} .
  2. В переменную h {\displaystyle h} записываем первые две строки таблицы подстановки H {\displaystyle H} , двигаясь слева направо и сверху вниз: h B 194 B A C 80 A 08 F 53 B 366 D 008 E 584 A 5 D E 48504 F A 9 D 1 B B 6 C 7 A C 252 E 72 C 202 F D C E 0 D 16 {\displaystyle h\longleftarrow B194BAC80A08F53B366D008E584A5DE48504FA9D1BB6C7AC252E72C202FDCE0D_{16}} .
  3. Для каждого блока X i , i = 1 , d ¯ {\displaystyle X_{i},i={\overline {1,d}}} выполняем операции:
    1. s s σ 1 ( X i h ) {\displaystyle s\leftarrow s\oplus \sigma _{1}(X_{i}\|h)} ;
    2. h σ 2 ( X i | | h ) {\displaystyle h\leftarrow \sigma _{2}(X_{i}||h)} .
  4. Вычисляем Y {\displaystyle Y} : Y σ 2 ( | X | 128 | | s | | h ) {\displaystyle Y\longleftarrow \sigma _{2}(\langle |X|\rangle _{128}||s||h)} .
  5. Возвращаем полученное значение Y {\displaystyle Y} , которое и является хеш-значением исходного текста X {\displaystyle X} .

Ссылки

  1. http://apmi.bsu.by/assets/files/std/belt-spec27.pdf
  2. http://apmi.bsu.by/assets/files/std/belt-spec14.pdf
Перейти к шаблону «Симметричные криптосистемы»
Потоковые шифры
Сеть Фейстеля
SP-сеть
Другие
Перейти к шаблону «Хеш-алгоритмы»
Общего назначения
Криптографические
Функции формирования ключа
Контрольное число (сравнение)
Применение хешей