New Data Seal

New Data Seal (NDS)
Создатель [IBM]
Создан 1975 год
Размер ключа 2048 бит
Размер блока 128 бит
Число раундов 16
Тип сеть Фейстеля

New Data Seal (NDS)блочный шифр, основанный на алгоритме Люцифера, который позже стал стандартом DES. Шифр был разработан в компании IBM в 1975 году. Для шифрования NDS использует делит входные (незашифрованные) данные на блоки по 128 бит и использует очень длинный ключ размером 2048 бит. Структура шифра точно такая же, как и у DES: cеть Фейстеля с 16 раундами.

Принцип работы

Шифр NDS является достаточно простым в частности из-за того, что в каждом раунде сети Фейстеля в его основе используется один и тот же ключ.

  • Ключ представляет собой отображение: k : { 0 , 1 } 8 { 0 , 1 } 8 , {\displaystyle k:\{0,1\}^{8}\rightarrow \{0,1\}^{8},} то есть размерность пространства таких ключей ( 2 8 ) 2 8 = 2 2048 , {\displaystyle (2^{8})^{2^{8}}=2^{2048},} что более чем достаточно для предотвращения перебора ключей.
  • Система использует 2 заранее известных (не динамичных) S-блока: S 0 , S 1 , { 0 , 1 } 4 { 0 , 1 } 4 , {\displaystyle S_{0},S_{1},\{0,1\}^{4}\rightarrow \{0,1\}^{4},} ключевое расписание состоит из одного ключа k . {\displaystyle k.} Блок открытого текста делится на 2 подблока m i {\displaystyle m_{i}} размером 64 бита каждый. Для того, чтобы посчитать f k ( m i ) : {\displaystyle f_{k}(m_{i}):}
    1. m i {\displaystyle m_{i}} разбивается на восемь 8-битных частей. За m i {\displaystyle m_{i}^{*}} обозначим байт, образованный первым битом каждого байта в m i {\displaystyle m_{i}}
    2. каждая часть m i {\displaystyle m_{i}} разбивается на два 4-битных ниббла
    3. к левому нибблу применяется S 0 , {\displaystyle S_{0},} к правому — S 1 {\displaystyle S_{1}}
    4. в случае, если j {\displaystyle j} -ый бит k ( m i ) {\displaystyle k(m_{i}^{*})} равен 1, поменяются местами нибблы j {\displaystyle j} -ой части после S 0 S 1 {\displaystyle S_{0}S_{1}} преобразования
    5. к 64-битному результату (после объединения всех частей) применяется заранее известная перестановка. Она позволяет защитить шифр от взлома и анализа как системы более простых независимых подшифров.

Алгоритм взлома

Использование одного и того же ключа в каждом раунде является слабым местом данного шифра и используется в атаке на основе подобранного открытого текста. С ее помощью можно полностью восстановить ключ шифрования: обозначим за T k {\displaystyle T_{k}} преобразование, соответствующее одному раунду NDS, то есть T k ( m i 1 , m i ) = ( m i , m i 1 f k ( m i ) ) . {\displaystyle T_{k}(m_{i-1},m_{i})=(m_{i},m_{i-1}\oplus f_{k}(m_{i})).} Далее, F = T 16 {\displaystyle F=T^{16}} будет обозначать все 16 раундов. Заметим, что F {\displaystyle F} и T {\displaystyle T} коммутируют: F T ( m ) = T 16 T ( m ) = T T 16 ( m ) = T F ( m ) . {\displaystyle FT(m)=T^{16}T(m)=TT^{16}(m)=TF(m).} В соответствии с принципом Керкгоффса мы знаем все об алгоритме шифрования, кроме ключа k ( q ) , q { 0 , 1 } 8 . {\displaystyle k(q),\;q\in \{0,1\}^{8}.} Тогда если мы будем знать k ( q ) {\displaystyle k(q)} для каждого возможного q , {\displaystyle q,} ключ будет считаться взломанным.

Процедура атаки следующая:

  1. Подобрать сообщение m = ( m 0 , m 1 ) , {\displaystyle m=(m_{0},m_{1}),} так, чтобы m 1 = q . {\displaystyle m_{1}^{*}=q.}
  2. Взломщик получает зашифрованное сообщение ( m 16 , m 17 ) = F ( m ) , {\displaystyle (m_{16},m_{17})=F(m),} соответствующее открытому тексту m . {\displaystyle m.}
  3. Пусть k ~ {\displaystyle {\tilde {k}}} — один из возможных 8-битных ключей (всего 2 8 {\displaystyle 2^{8}} комбинаций). И пусть T ~ = T k ~ ( m ) {\displaystyle {\tilde {T}}=T_{\tilde {k}}(m)} есть результат после работы от 1 раунда с ключом k ~ {\displaystyle {\tilde {k}}} .
  4. Если k ~ = k ( q ) , {\displaystyle {\tilde {k}}=k(q),} то T ~ = T ( m ) {\displaystyle {\tilde {T}}=T(m)} и F ( T ~ ) = F T ( m ) = T F ( m ) = T ( m 16 , m 17 ) = ( m 17 , ? ) . {\displaystyle F({\tilde {T}})=FT(m)=TF(m)=T(m_{16},m_{17})=(m_{17},?).} Следовательно левая половина F ( T ~ ) {\displaystyle F({\tilde {T}})} согласована с правой половиной F ( m ) = ( m 16 , m 17 ) . {\displaystyle F(m)=(m_{16},m_{17}).}
  5. Взломщик получает зашифрованное сообщение F ( T ~ ) , {\displaystyle F({\tilde {T}}),} соответствующее заранее выбранному тексту T ~ . {\displaystyle {\tilde {T}}.} Если правая половина F ( m ) {\displaystyle F(m)} соответствует левой половине F ( T ~ ) , {\displaystyle F({\tilde {T}}),} то можно считать k ~ {\displaystyle {\tilde {k}}} допустимым значением для k ( q ) . {\displaystyle k(q).} В худшем случае нужно будет перебрать 2 8 = 256 {\displaystyle 2^{8}=256} комбинаций k ~ {\displaystyle {\tilde {k}}} для нахождения нужного значения.
  6. Повторяем процедуру для каждого q { 0 , 1 } 8 , {\displaystyle q\in \{0,1\}^{8},} получая значение ключа k {\displaystyle k} с помощью 2 8 ( 2 8 + 1 ) = 65792 {\displaystyle 2^{8}(2^{8}+1)=65792} заранее выбранных открытых текстов.

Атаки на шифр

В 1977 Эдна Гроссман и Брайант Такермен впервые продемонстрировали атаку на NDS с помощью сдвиговой атаки[1][2]. Этот метод использует не более 4096 подобранных открытых текстов. В их лучшем испытании они смогли восстановить ключ только с 556 подобранными открытыми текстами.

Примечания

  1. E. K. Grossman, Thomas J. Watson IBM Research Center Research Division, B. Tuckerman. Analysis of a Feistel-like Cipher Weakened by Having No Rotating Key. — IBM Thomas J. Watson Research Division, 1977. — 33 с.
  2. Henry Beker, Fred Piper. Cipher Systems: The Protection of Communications. — John Wiley & Sons, 1982. — С. 263–267. — ISBN 0-471-89192-4.
Перейти к шаблону «Симметричные криптосистемы»
Потоковые шифры
Сеть Фейстеля
SP-сеть
Другие