Jump to content

Иглобрюхая рыба (шифр)

Иглобрюхая рыба
Общий
Дизайнеры Брюс Шнайер [1]
Впервые опубликовано 1993 [1]
Преемники Две рыбы
Деталь шифрования
Размеры ключей 32–448 бит
Размеры блоков 64 бита
Структура Сеть Фейстеля
Раунды 16
Лучший публичный криптоанализ
Четыре патрона Blowfish подвержены дифференциальной атаке второго порядка (Rijmen, 1997); [2] для класса слабых ключей 14 раундов Blowfish можно отличить от псевдослучайной перестановки (Vaudenay, 1996).

Blowfish — это с симметричным ключом блочный шифр , разработанный в 1993 году Брюсом Шнайером и включенный во многие наборы шифров и продукты шифрования. Blowfish обеспечивает хорошую скорость шифрования в программном обеспечении, и эффективного криптоанализа на сегодняшний день не найдено для файлов меньшего размера. Рекомендуется не использовать Blowfish для шифрования файлов размером более 4 ГБ, Twofish . вместо этого следует использовать [3]

Размер блока Blowfish составляет 64 бита, поэтому он может быть уязвим для атак Sweet32. [4]

Шнайер разработал Blowfish как алгоритм общего назначения, задуманный как альтернатива устаревшему DES и свободный от проблем и ограничений, связанных с другими алгоритмами. На момент выпуска Blowfish многие другие разработки были запатентованы, обременены патентами или составляли коммерческую или государственную тайну. Шнайер заявил, что «Blowfish не имеет патента и останется таковым во всех странах. Алгоритм настоящим размещен в общественном достоянии и может свободно использоваться кем угодно». [5]

Примечательные особенности конструкции включают зависящие от ключа S-блоки и очень сложную схему клавиш .

Алгоритм [ править ]

Blowfish имеет 64-битный размер блока и переменную длину ключа от 32 до 448 бит. [5] Это 16-раундовый шифр Фейстеля , в котором используются большие зависящие от ключа S-блоки . По структуре напоминает CAST-128 , в котором используются фиксированные S-блоки.

Структура Фейстеля Blowfish

На соседней диаграмме показана процедура шифрования Blowfish. Каждая строка представляет 32 бита. Существует пять массивов подключей: один P-массив с 18 элементами (обозначенный на диаграмме как K, чтобы избежать путаницы с открытым текстом) и четыре S-блока с 256 элементами (S0, S1, S2 и S3).

Каждый раунд r состоит из 4 действий:

Действие 1 Исключающее ИЛИ левую половину (L) данных с r -й записью P-массива
Действие 2 Используйте данные, обработанные XOR, в качестве входных данных для F-функции Blowfish.
Действие 3 XOR выходной F-функции с правой половиной (R) данных
Действие 4 Поменяйте местами левый и правый

F-функция разделяет 32-битный входной сигнал на четыре 8-битных четверти и использует четверти в качестве входных данных для S-блоков. S-блоки принимают 8-битный ввод и производят 32-битный вывод. Выходы суммируются по модулю 2 32 и используется операция XOR для получения окончательного 32-битного результата (см. изображение в правом верхнем углу). [6]

После 16-го раунда отмените последний обмен и выполните XOR L с K18 и R с K17 (выходное отбеливание).

Расшифровка точно такая же, как шифрование, за исключением того, что P1, P2,..., P18 используются в обратном порядке. Это не так очевидно, поскольку xor коммутативен и ассоциативен. Распространенным заблуждением является использование обратного порядка шифрования в качестве алгоритма дешифрования (т.е. сначала выполняется XOR P17 и P18 к блоку зашифрованного текста, а затем использование P-записей в обратном порядке).

Blowfish Расписание ключей начинается с инициализации P-массива и S-блоков значениями, полученными из шестнадцатеричных цифр числа pi , которые не содержат очевидного шаблона ( ничего не вижу в моем рукаве ). Затем секретный ключ побайтно обрабатывается, при необходимости циклически повторяется, и выполняется операция XOR со всеми P-записями по порядку. Затем 64-битный нулевой блок шифруется с помощью алгоритма в его нынешнем виде. Результирующий зашифрованный текст заменяет P 1 и P 2 . Затем тот же зашифрованный текст снова шифруется с использованием новых подключей, и новый зашифрованный текст заменяет P 3 и P 4 . Это продолжается, заменяя весь P-массив и все записи S-блока. В общей сложности алгоритм шифрования Blowfish будет запущен 521 раз для генерации всех подразделов — обрабатывается около 4 КБ данных.

Поскольку длина P-массива составляет 576 бит, а ключевые байты подвергаются операции XOR через все эти 576 бит во время инициализации, многие реализации поддерживают размеры ключей до 576 бит. Причиной этого является несоответствие между исходным описанием Blowfish, в котором используются 448-битные ключи, и его эталонной реализацией, в которой используются 576-битные ключи. Тестовые векторы для проверки сторонних реализаций также были созданы с 576-битными ключами. На вопрос, какая версия Blowfish правильная, Брюс Шнайер ответил: «Тестовые векторы следует использовать для определения единственного настоящего Blowfish».

Другое мнение состоит в том, что ограничение в 448 бит существует для того, чтобы гарантировать, что каждый бит каждого подраздела зависит от каждого бита ключа. [5] поскольку последние четыре значения P-массива не влияют на каждый бит зашифрованного текста. Этот момент следует учитывать для реализаций с другим количеством раундов, поскольку он хотя и повышает защищенность от исчерпывающей атаки, но ослабляет безопасность, гарантируемую алгоритмом. А учитывая медленную инициализацию шифра при каждой смене ключа, ему предоставляется естественная защита от атак методом перебора, что на самом деле не оправдывает размеры ключей, превышающие 448 бит.

Blowfish в псевдокоде [ править ]

uint32_t P[18];
uint32_t S[4][256];

uint32_t f (uint32_t x) {
   uint32_t h = S[0][x >> 24] + S[1][x >> 16 & 0xff];
   return ( h ^ S[2][x >> 8 & 0xff] ) + S[3][x & 0xff];
}

void blowfish_encrypt(uint32_t *L, uint32_t *R) {
    for (short r = 0; r < 16; r++) {
		*L = *L ^ P[r];
		*R = f(*L) ^ *R;
		swap(L, R);
	}
	swap(L, R);
	*R = *R ^ P[16];
	*L = *L ^ P[17];
}

void blowfish_decrypt(uint32_t *L, uint32_t *R) {
	for (short r = 17; r > 1; r--) {
		*L = *L ^ P[r];
		*R = f(*L) ^ *R;
		swap(L, R);
	}
	swap(L, R);
	*R = *R ^ P[1];
	*L = *L ^ P[0];
}

  // ...
  // initializing the P-array and S-boxes with values derived from pi; omitted in the example
  // ...
  
{
	/* initialize P box w/ key*/
	uint32_t k;
	for (short i = 0, p = 0; i < 18; i++) {
		k = 0x00;
		for (short j = 0; j < 4; j++) {
			k = (k << 8) | (uint8_t) key[p];
			p = (p + 1) % key_len;
		}
		P[i] ^= k;
	}
   
	/* blowfish key expansion (521 iterations) */
	uint32_t l = 0x00, r = 0x00;
	for (short i = 0; i < 18; i+=2) {
		blowfish_encrypt(&l, &r);
		P[i] = l; 
		P[i+1] = r;
	}
	for (short i = 0; i < 4; i++) {
		for (short j = 0; j < 256; j+=2) {
			blowfish_encrypt(&l, &r);
			S[i][j] = l;
			S[i][j+1] = r;
		}
	}
}

на практике Иглобрюх

Blowfish — быстрый блочный шифр , за исключением случаев смены ключей. Каждый новый ключ требует предварительной обработки, эквивалентной шифрованию около 4 килобайт текста, что очень медленно по сравнению с другими блочными шифрами. Это предотвращает его использование в некоторых приложениях, но не является проблемой в других.

В одном приложении медленная смена ключей Blowfish на самом деле является преимуществом: метод хеширования паролей (crypt $2, т.е. bcrypt), используемый в OpenBSD, использует алгоритм, полученный из Blowfish, который использует расписание медленных ключей; Идея состоит в том, что требуемые дополнительные вычислительные усилия обеспечивают защиту от атак по словарю . См. растяжку клавиш .

Blowfish занимает чуть более 4 килобайт оперативной памяти . Это ограничение не является проблемой даже для старых настольных и портативных компьютеров , хотя оно не позволяет использовать его в самых маленьких встроенных системах, таких как первые смарт-карты .

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

bcrypt — это функция хеширования паролей , которая в сочетании с переменным количеством итераций («стоимость работы») использует дорогостоящую фазу установки ключей Blowfish для увеличения рабочей нагрузки и продолжительности хэш-вычислений, что еще больше снижает угрозы от атак методом перебора.

bcrypt — это также название кроссплатформенной утилиты шифрования файлов, разработанной в 2002 году и реализующей Blowfish. [7] [8] [9] [10]

и Слабость преемники

Использование Blowfish 64-битного размера блока (в отличие, например, от 128-битного размера блока AES) делает его уязвимым для атак «дня рождения» , особенно в таких контекстах, как HTTPS . В 2016 году атака SWEET32 продемонстрировала, как использовать атаки «дни рождения» для восстановления открытого текста (т. е. расшифровки зашифрованного текста) на основе шифров с размером блока 64 бита. [11] Проект GnuPG рекомендует не использовать Blowfish для шифрования файлов размером более 4 ГБ. [3] из-за небольшого размера блока. [4]

Известно, что вариант Blowfish с сокращенным циклом уязвим к атакам с известным открытым текстом на рефлексивно слабые ключи. Реализации Blowfish используют 16 раундов шифрования и не подвержены этой атаке. [12] [13]

Брюс Шнайер рекомендовал перейти на своего преемника Blowfish, Twofish . [14]

См. также [ править ]

Ссылки [ править ]

  1. ^ Jump up to: а б Р. Ширей (август 2007 г.). Глоссарий по интернет-безопасности, версия 2 . Сетевая рабочая группа. дои : 10.17487/RFC4949 . РФК 4949 . Информационный.
  2. ^ Винсент Реймен (1997). «Криптоанализ и проектирование итерированных блочных шифров» ( PostScript ) . доктор философии Диссертация . Архивировано из оригинала 8 мая 2013 г.
  3. ^ Jump up to: а б «Часто задаваемые вопросы по GnuPG» . Архивировано из оригинала 21 декабря 2017 г. Проверено 26 января 2018 г. Blowfish не следует использовать для шифрования файлов размером более 4 ГБ, но у Twofish таких ограничений нет.
  4. ^ Jump up to: а б «Часто задаваемые вопросы по GnuPG» . Архивировано из оригинала 21 декабря 2017 г. Проверено 27 января 2018 г. Для шифра с размером блока в восемь байт вы, вероятно, повторите блок примерно после 32 гигабайт данных. Это означает, что если вы зашифруете одно сообщение размером более 32 гигабайт, это практически статистическая гарантия того, что вы получите повторную блокировку. Это плохо. По этой причине мы рекомендуем вам не использовать шифры с восьмибайтовыми блоками данных, если вы собираетесь выполнять массовое шифрование. Маловероятно, что у вас возникнут какие-либо проблемы, если размер ваших сообщений не превышает 4 гигабайт.
  5. ^ Jump up to: а б с Брюс Шнайер (1993). «Описание нового ключа переменной длины, 64-битного блочного шифра (Blowfish)» . Быстрое программное шифрование, Материалы Кембриджского семинара по безопасности . Спрингер-Верлаг : 191–204. Архивировано из оригинала 26 января 2014 г.
  6. ^ «Криптография: описание нового ключа переменной длины, 64-битного блочного шифра (Blowfish)» . Шнайер по безопасности . Архивировано из оригинала 4 марта 2016 г. Проверено 31 декабря 2015 г.
  7. ^ «Bcrypt — шифрование файлов Blowfish». Архивировано 29 августа 2015 г. на Wayback Machine (bcrypt.sourceforge.net). домашней странице программы шифрования файлов bcrypt
  8. ^ «Бесплатная загрузка bcrypt — whodunnit.tools.bcrypt» . bcrypt463065.android.informer.com . Архивировано из оригинала 4 марта 2016 года . Проверено 7 мая 2018 г.
  9. ^ «Пакет T2 — Trunk — bcrypt — Утилита для шифрования файлов» . www.t2-project.org . Архивировано из оригинала 21 апреля 2017 года . Проверено 7 мая 2018 г.
  10. ^ «Лицензирование Oracle GoldenGate» . docs.oracle.com . Архивировано из оригинала 27 октября 2017 г. Проверено 7 мая 2018 г. .
  11. ^ Картикеян Бхаргаван; Гаэтан Леран (август 2016 г.). «О практической (не)безопасности 64-битных блочных шифров — коллизионные атаки на HTTP через TLS и OpenVPN» . ACM CCS 2016. Архивировано из оригинала 9 октября 2016 г.
  12. ^ Том Гонсалес (январь 2007 г.). «Атака на иглобрюхую рыбу с отражением» (PDF) . Журнал файлов классов LATEX. Архивировано из оригинала (PDF) 18 ноября 2015 г. Проверено 17 ноября 2015 г.
  13. ^ Орхун Кара и Джеват Манап (март 2007 г.). «Новый класс слабых ключей для Blowfish» (PDF) . FSE 2007. Архивировано (PDF) из оригинала 05 октября 2016 г.
  14. ^ Дана, МакКонначи (27 декабря 2007 г.). «Брюс Всемогущий: Шнайер проповедует безопасность приверженцам Linux» . Компьютерный мир . п. 3. Архивировано из оригинала 2 декабря 2016 г. Проверено 26 января 2018 г. Однако на данный момент я поражен, что его все еще используют. Если люди спросят, я рекомендую вместо этого Twofish.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 5231a84f81a37151553c6ee371aff3d3__1718866200
URL1:https://arc.ask3.ru/arc/aa/52/d3/5231a84f81a37151553c6ee371aff3d3.html
Заголовок, (Title) документа по адресу, URL1:
Blowfish (cipher) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)