23-07-2023
Rabbit - высокоскоростной поточный шифр впервые представленный [1] в феврале 2003 года на 10-м симпозиуме FSE. В мае 2005, он был отправлен на конкурс eSTREAM, целью которого было создание европейских стандартов для поточных систем шифрования.
Разработчиками Rabbit являются Martin Boesgaard, Mette Vesterager, Thomas Pedersen, Jesper Christiansen и Ove Scavenius.
Rabbit используют 128-битный ключ и 64-битный инициализирующий вектор. Шифр был разработан с целью использования в программном обеспечении. При этом скорость шифрования могла достигать 3.7 циклов в бит(CPB) для процессора Pentium 3 и 9.7 циклов в бит для ARM7. Тем не менее, шифр также оказался быстрым и компактным при реализации в аппаратном обеспчении.
Основным компонентом шифра является генератор битового потока, который шифрует 128 битов сообщения за итерацию. Достоинство шифра в тщательном перемещивании его внутренних состояний между двумя последовательными итерациями. Функция перемешивания полностью основана на арифметических операциях, доступных на современных процессорах, т.е. S-блоки подстановок и поисковые таблицы не нужны для реализации шифра.
Авторы шифра предоставили полный набор технических описаний на домашней странице Cryptico.[2]. Шифр также описан в RFC 4503. Cryptico обладала патентом на шифр, и многии годы для использования шифра в коммерческих целях требовалась лицензия. Однако, 6 октября 2008 шифр разрешили использовать для любых целях бесплатно. [3]
Содержание |
Rabbit предоставляет 128-битную защиту против аттакующих, чья цель один уникальный ключ. Если же атака происходит на несколько ключей за раз, и все равно, который из них взломают, то защищенность снижается до 96 бит.[4].
Внутреннее состояние поточного шифра содержит 513 битов. 512 из них поделены на 8-мь 32-битных переменных состояний и 8-мь 32-битных счетчиков , где - переменная состояния подсистемы при итерации , а - обазначет соответствующий счетчик переменных. 513-й бит - бит переноса φ , который необходимо хранить между итерациями. Этот бит инициализируется нулем. 8-мь переменных состояний и 8-мь счетчиков зависят от ключа при инициализации.
Алгоритм инициализируется расширением 128-битного ключа на 8-мь переменных состояния и 8-мь счетчиков так, чтосуществует взаимнооднозначное соответствие между ключом, начальными переменными состояний, , и начальными счетчиками, . Ключ, , поделен на 8-мь подключей: , , ... , , переменные состояний и счетчики инициализируются при помощи подключей:
|
(1) |
|
(1) |
(где - логическое "или", ||)
Система прогоняется 4-ре раза, согласно функции следующего состояния, определенной ниже, чтобы понизить кореляцию между битами ключа и битами переменных внутренного состояния. В конце, счетчики ре-инициализируются следующим образом:
для предотвращения восстановления ключа путем инверсии системы счетчиков.
Здесь все сложение по модулю 2^32.
Уравнения, задающие изменение системы счетчиков:
где счетчик бита переноса, φ, задается:
(1) |
:
Кроме того, константы определяются как:
Rabbit.