New Data Seal

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

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

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

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

  • Ключ представляет собой отображение: k:{0,1}8{0,1}8, то есть размерность пространства таких ключей (28)28=22048, что более чем достаточно для предотвращения перебора ключей.
  • Система использует 2 заранее известных (не динамичных) S-блока: S0,S1,{0,1}4{0,1}4, ключевое расписание состоит из одного ключа k. Блок открытого текста делится на 2 подблока miразмером 64 бита каждый. Для того, чтобы посчитать fk(mi):
    1. miразбивается на восемь 8-битных частей. За mi*обозначим байт, образованный первым битом каждого байта в mi
    2. каждая часть miразбивается на два 4-битных ниббла
    3. к левому нибблу применяется S0, к правому — S1
    4. в случае, если j-ый бит k(mi*) равен 1, поменяются местами нибблы j-ой части после S0S1преобразования
    5. к 64-битному результату (после объединения всех частей) применяется заранее известная перестановка. Она позволяет защитить шифр от взлома и анализа как системы более простых независимых подшифров.

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

Использование одного и того же ключа в каждом раунде является слабым местом данного шифра и используется в атаке на основе подобранного открытого текста. С ее помощью можно полностью восстановить ключ шифрования: обозначим за Tk преобразование, соответствующее одному раунду NDS, то есть Tk(mi1,mi)=(mi,mi1fk(mi)).Далее, F=T16 будет обозначать все 16 раундов. Заметим, что F и T коммутируют: FT(m)=T16T(m)=TT16(m)=TF(m).В соответствии с принципом Керкгоффса мы знаем все об алгоритме шифрования, кроме ключа k(q),q{0,1}8.Тогда если мы будем знать k(q) для каждого возможного q, ключ будет считаться взломанным.

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

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

Атаки на шифр

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

Примечания

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

Шаблон:Симметричные криптосистемы