Threefish

редактировать
Threefish
Skein permutation.png
General
DesignersБрюс Шнайер, Нильс Фергюсон, Стефан Лакс, Дуг Уайтинг, Михир Белларе, Тадаёши Коно, Джон Каллас, Джесси Уокер
Впервые опубликовано2008
Относится кBlowfish, Twofish
Сведения о шифре
Размеры ключа 256, 512 или 1024 бит. (размер ключа равен размеру блока)
Размеры блока 256, 512 или 1024 бит
Округление72 (80 для размера блока 1024-бит)
Скорость6.1 cpb на Core 2.

Threefish - это symmetric-key настраиваемый блочный шифр, разработанный как часть th e Хэш-функция Skein, запись в NIST hash function Competition. Threefish не использует S-блоки или другие таблицы поиска, чтобы избежать атак на время кэша ; его нелинейность возникает из-за чередования сложений с исключающим ИЛИ. В этом отношении он аналогичен Salsa20, TEA и кандидатам SHA-3 CubeHash и BLAKE.

Threefish и хеш Skein. функции были разработаны Брюсом Шнайером, Нильсом Фергюсоном, Стефаном Лаксом, Дугом Уайтингом, Михиром Белларе, Тадаёши Коно, Джоном Каллас и Джесси Уокер.

Содержание
  • 1 Описание шифра
    • 1.1 Ключевое расписание
    • 1.2 Функция смешивания
    • 1.3 Перестановка
    • 1.4 Полный раунд Threefish
    • 1.5 Заключительные операции
  • 2 Безопасность
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Описание шифра

Threefish работает со словами из 64 бит (без знака Little endian целые числа ). N w ∈ {4, 8, 16} {\ displaystyle N_ {w} \ in \ {4,8,16 \}}{\ displaystyle N_ {w} \ in \ {4,8,16 \}} - количество слов открытого текста, а также ключевых слов. Твик состоит из двух слов. Все сложения и вычитания определены по модулю 2 64 {\ displaystyle 2 ^ {64}}2 ^ {{64}} .

Ключевое расписание

Threefish использует N r 4 + 1 {\ displaystyle {\ frac {N_ {r}} {4}} + 1}{\ frac {N_ {r }} {4}} + 1 различные клавиши раундов (N r {\ displaystyle N_ {r}}N_r : количество раундов). Для вычисления этих ключей к исходным ключевым словам k 0, k 1,…, k добавляется дополнительное ключевое слово k N w {\ displaystyle k_ {N_ {w}}}k _ {{N_ {w}}} . N w - 1 {\ displaystyle k_ {0}, k_ {1}, \ dots, k_ {N_ {w} -1}}k_ {0}, k_ {1}, \ dots, k _ {{N_ {w} -1}} . Дополнительное слово настройки t 2 {\ displaystyle t_ {2}}t_ {2} также добавляется к словам настройки t 0, t 1 {\ displaystyle t_ {0}, t_ {1} }t_ {0}, t_ {1} .

k N w = C 240 k 0 ⊕ k 1 ⊕ ⋯ ⊕ k N w - 1; C 240 знак равно 0x1BD11BDAA9FC1A22 {\ displaystyle k_ {N_ {w}} = C_ {240} \ oplus k_ {0} \ oplus k_ {1} \ oplus \ dots \ oplus k_ {N_ {w} -1}; \ quad C_ {240} = {\ text {0x1BD11BDAA9FC1A22}}}{\ displaystyle k_ {N_ {w}} = C_ {240} \ oplus k_ {0} \ oplus k_ {1} \ oplus \ dots \ oplus k_ {N_ {w} -1}; \ quad C_ {240} = {\ text {0x1BD11BDAA9FC1A22}}
t 2 = t 0 ⊕ t 1 {\ displaystyle t_ {2} = t_ {0} \ oplus t_ {1}}{\ displaystyle t_ {2} = t_ {0} \ oplus t_ {1}}

Цель, казалось бы, произвольная константа C 240 {\ displaystyle C_ {240}}{\ displaystyle C_ {240}} предназначена для предотвращения некоторых атак, которые используют взаимосвязь между k N w {\ displaystyle k_ {N_ {w}}}k _ {{N_ {w}}} и другие ключевые слова.

Круглые ключевые слова ks, i {\ displaystyle k_ {s, i}}k _ {{s, i}} теперь определены следующим образом:

ks, i = {k (s + i) mod (N w + 1) i = 0,…, N w - 4 k (s + i) mod (N w + 1) + ts mod 3 i = N w - 3 k (s + i) mod ( N вес + 1) + T (s + 1) модуль 3 я знак равно N вес - 2 к (s + я) модуль (N вес + 1) + si = N вес - 1 {\ Displaystyle к_ {s, я} = {\ begin {case} k _ {(s + i) {\ bmod {(}} N_ {w} +1)} i = 0, \ dots, N_ {w} -4 \\ k _ {(s + i) {\ bmod {(}} N_ {w} +1)} + t_ {s {\ bmod {3}}} i = N_ {w} -3 \\ k _ {(s + i) {\ bmod {(} } N_ {w} +1)} + t _ {(s + 1) {\ bmod {3}}} i = N_ {w} -2 \\ k _ {(s + i) {\ bmod {(}} N_ {w} +1)} + s i = N_ {w} -1 \ end {cases}}}k _ {{s, i}} = {\ begin {cases} k _ {{(s + i) {\ bmod (} N_ {w} +1)}} i = 0, \ dots, N_ {w} - 4 \\ k _ {{(s + i) {\ bmod (} N_ {w} +1)}} + t _ {{s {\ bmod 3}}} i = N_ {w} -3 \\ k _ {{ (s + i) {\ bmod (} N_ {w} +1)}} + t _ {{(s + 1) {\ bmod 3}}} i = N_ {w} -2 \\ k _ {{(s + i) {\ bmod (} N_ {w} +1)}} + s i = N_ {w} -1 \ end {cases}}

Здесь s = 0, 1,…, N r / 4 {\ displaystyle s = 0,1, \ dots, N_ {r} / 4}{\ displaystyle s = 0,1, \ точки, N_ {r} / 4} и 4 s {\ displaystyle 4s}{\ displaystyle 4s} - номер раунда, в котором используется ключ раунда.

Функция смешивания

Функция смешивания трех рыб

Функция смешивания принимает кортеж слов (x 0, x 1) {\ displaystyle (x_ {0}, x_ {1})}(x_ {0}, x_ {1}) и возвращает другой кортеж слов (y 0, y 1) {\ displaystyle (y_ {0}, y_ {1})}(y_ {0}, y_ {1}) . Функция определяется следующим образом:

y 0 = x 0 + x 1 mod 2 64 {\ displaystyle y_ {0} = x_ {0} + x_ {1} \ mod 2 ^ {64}}y_ {0} = x_ {0} + x_ {1} \ mod 2 ^ {{{ 64}}

y 1 знак равно (Икс 1 ⋘ R (d mod 8), j) ⊕ Y 0 {\ displaystyle y_ {1} = (x_ {1} \ lll R _ {(d {\ bmod {8}}), j}) \ oplus y_ {0}}y_1 = (x_1 \ lll R _ {(d \ bmod 8), j}) \ oplus y_0

R d, j {\ displaystyle R_ {d, j}}R _ {{d, j}} - фиксированный набор констант вращения, выбранный для достижения быстрого диффузии.

Перестановка

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

Поскольку эта перестановка фиксирована и не зависит от ключа, время, необходимое для вычисления, не дает информации о ключе или открытом тексте. Это важно, потому что на большинстве современных микропроцессоров оптимизация производительности может сделать время, необходимое для вычисления операции с массивом, зависимым от того, где данные хранятся в памяти. В шифрах, где поиск по массиву зависит либо от ключа, либо от открытого текста (как в случае шага подстановки в AES), он может сделать шифр уязвимым для временных атак, исследуя время, необходимое для шифрования. Таким образом, перестановка преднамеренно разработана таким образом, чтобы гарантировать, что она должна выполняться одним и тем же способом независимо от используемого ключа или зашифрованных данных.

Полный раунд Threefish

  • , если d mod 4 = 0 { \ displaystyle d \; {\ bmod {\;}} 4 = 0}{\ displaystyle d \; {\ bmod {\;}} 4 = 0} круглый ключ kd / 4, i {\ displaystyle k_ {d / 4, i}}{\ displaystyle k_ {d / 4, i}} добавляется к слову i {\ displaystyle i}i
  • , функция смешивания применяется к последовательным словам, ширина поворота зависит от d {\ displaystyle d}d и слова число
  • слова переставляются с помощью перестановки, не зависящей от числа раунда.

Threefisdiv class="ht"56 и Threefish512 применяют этот раунд 72 раза (d = 0, 1,…, 71 {\ displaystyle d = 0, 1, \ точки, 71}{\ displaystyle d = 0,1, \ точки, 71} ). Threefish1024 применяет его 80 раз (d = 0, 1,…, 79 {\ displaystyle d = 0,1, \ dots, 79}{ \ displaystyle d = 0,1, \ dots, 79} ).

Заключительные операции

После применения всех циклов к словам добавляется последний ключ цикла, и слова преобразуются обратно в строку байтов.

Безопасность

В октябре 2010 года была опубликована атака, которая сочетает в себе ротационный криптоанализ с атакой обратного ответа. Атака устанавливает распознающий ключ против 53 из 72 раундов в Threefish-256 и 57 из 72 раундов в Threefish-512. Это также влияет на хэш-функцию Skein. Это продолжение более ранней атаки, опубликованной в феврале, которая прерывает 39 и 42 раунда соответственно. В ответ на эту атаку команда Skein изменила константы вращения, используемые в Threefish, и, таким образом, константы расписания ключей для раунда 3 конкурса хэш-функций NIST.

В 2009 году связанный ключ Атака бумерангом против уменьшенной версии Threefish. Для версии с 32 раундами сложность времени составляет 2 226 {\ displaystyle 2 ^ {226}}2 ^ {226} , а сложность памяти составляет 2 12 {\ displaystyle 2 ^ {12}}.2^{12}; для версии с 33 раундами сложность времени составляет 2 352.17 {\ displaystyle 2 ^ {352.17}}2 ^ {352.17} с незначительным использованием памяти. Атаки также работают против измененной версии Threefish: для 32-раундовой версии временная сложность составляет 2 222 {\ displaystyle 2 ^ {222}}2 ^ {222} , а сложность памяти составляет 2 12 {\ displaystyle 2 ^ {12}}2^{12}; для версии из 33 раундов сложность времени составляет 2 355,5 {\ displaystyle 2 ^ {355.5}}2 ^ {355.5} с незначительным использованием памяти.

См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-11 11:02:47
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте