Поточный шифр — это симметричный ключевой шифр , в котором цифры открытого текста объединяются с псевдослучайным потоком цифр шифра ( keystream ). В поточном шифре каждая цифра открытого текста шифруется по одной соответствующей цифрой потока ключей, чтобы получить цифру потока шифротекста . Поскольку шифрование каждой цифры зависит от текущего состояния шифра, его также называют шифром состояния . На практике цифра обычно представляет собой бит , а операция объединения — это исключающее ИЛИ (XOR).
Псевдослучайный поток ключей обычно генерируется последовательно из случайного начального значения с использованием цифровых регистров сдвига . Начальное значение служит криптографическим ключом для расшифровки потока зашифрованного текста. Поточные шифры представляют собой другой подход к симметричному шифрованию, нежели блочные шифры . Блочные шифры работают с большими блоками цифр с фиксированным, неизменным преобразованием. Это различие не всегда четкое: в некоторых режимах работы примитив блочного шифра используется таким образом, что он действует эффективно как потоковый шифр. Поточные шифры обычно выполняются с более высокой скоростью, чем блочные шифры, и имеют меньшую аппаратную сложность. Однако поточные шифры могут быть подвержены нарушениям безопасности (см. атаки потокового шифра ); например, когда одно и то же начальное состояние (начальное значение) используется дважды.
Поточные шифры можно рассматривать как приближение к действию проверенного невзламываемого шифра, одноразового блокнота (OTP). Одноразовый блокнот использует поток ключей из совершенно случайных цифр. Поток ключей объединяется с цифрами открытого текста по одной за раз, чтобы сформировать шифротекст. Надежность этой системы была доказана Клодом Э. Шенноном в 1949 году. [1] Однако поток ключей должен быть сгенерирован совершенно случайным образом и иметь по крайней мере ту же длину, что и открытый текст, и не может использоваться более одного раза. Это делает систему громоздкой для внедрения во многих практических приложениях, и в результате одноразовый блокнот не получил широкого распространения, за исключением самых важных приложений. Генерация, распределение и управление ключами имеют решающее значение для этих приложений.
Поточный шифр использует гораздо меньший и более удобный ключ, такой как 128 бит. На основе этого ключа он генерирует псевдослучайный поток ключей, который может быть объединен с цифрами открытого текста аналогично одноразовому блокноту. Однако это имеет свою цену. Теперь поток ключей является псевдослучайным и поэтому не является по-настоящему случайным. Доказательство безопасности, связанное с одноразовым блокнотом, больше не действует. Вполне возможно, что потоковый шифр будет полностью небезопасным. [ необходима цитата ]
Поточный шифр генерирует последовательные элементы потока ключей на основе внутреннего состояния. Это состояние обновляется по сути двумя способами: если состояние изменяется независимо от сообщений открытого текста или зашифрованного текста , шифр классифицируется как синхронный потоковый шифр. Напротив, самосинхронизирующиеся потоковые шифры обновляют свое состояние на основе предыдущих цифр открытого текста или зашифрованного текста. Система, которая включает открытый текст в ключ, также известна как шифр с автоключом или автоклавный шифр.
В синхронном потоковом шифре поток псевдослучайных цифр генерируется независимо от сообщений открытого текста и зашифрованного текста, а затем объединяется с открытым текстом (для шифрования) или с зашифрованным текстом (для расшифровки). В наиболее распространенной форме используются двоичные цифры ( биты ), а ключевой поток объединяется с открытым текстом с помощью операции исключающее или (XOR). Это называется двоичным аддитивным потоковым шифром .
В синхронном потоковом шифре отправитель и получатель должны быть точно в шаге для успешного расшифровывания. Если во время передачи из сообщения добавляются или удаляются цифры, синхронизация теряется. Чтобы восстановить синхронизацию, можно систематически пробовать различные смещения, чтобы получить правильное расшифровывание. Другой подход заключается в том, чтобы пометить шифротекст маркерами в регулярных точках на выходе.
Однако если цифра повреждена при передаче, а не добавлена или потеряна, то затронута только одна цифра в открытом тексте, и ошибка не распространяется на другие части сообщения. Это свойство полезно, когда частота ошибок передачи высока; однако оно снижает вероятность обнаружения ошибки без дополнительных механизмов. Более того, из-за этого свойства синхронные потоковые шифры очень восприимчивы к активным атакам : если злоумышленник может изменить цифру в зашифрованном тексте, он может внести предсказуемые изменения в соответствующий бит открытого текста; например, переворот бита в зашифрованном тексте приводит к перевороту того же бита в открытом тексте.
Другой подход использует несколько из предыдущих N цифр шифротекста для вычисления потока ключей. Такие схемы известны как самосинхронизирующиеся потоковые шифры , асинхронные потоковые шифры или автоключ шифротекста ( CTAK ). Идея самосинхронизации была запатентована в 1946 году и имеет то преимущество, что получатель автоматически синхронизируется с генератором потока ключей после получения N цифр шифротекста, что упрощает восстановление, если цифры пропадают или добавляются в поток сообщений. Ошибки в одну цифру ограничены в своем эффекте, затрагивая только до N цифр открытого текста.
Примером самосинхронизирующегося потокового шифра является блочный шифр в режиме обратной связи по шифру (CFB) .
Двоичные потоковые шифры часто строятся с использованием регистров сдвига с линейной обратной связью (LFSR), поскольку их можно легко реализовать в оборудовании и легко проанализировать математически. Однако использование LFSR само по себе недостаточно для обеспечения хорошей безопасности. Были предложены различные схемы для повышения безопасности LFSR.
Поскольку LFSR по своей сути линейны, один из методов устранения линейности заключается в подаче выходных данных нескольких параллельных LFSR в нелинейную булеву функцию для формирования генератора комбинаций . Различные свойства такой комбинационной функции имеют решающее значение для обеспечения безопасности результирующей схемы, например, для предотвращения корреляционных атак .
Обычно LFSR регулярно ступенчато изменяются. Один из подходов к введению нелинейности заключается в том, чтобы LFSR тактировался нерегулярно, управляемый выходом второго LFSR. Такие генераторы включают в себя генератор «стоп-энд-гоу», генератор переменного шага и генератор сжатия .
Генератор переменного шага состоит из трех LFSR, которые для удобства мы будем называть LFSR0, LFSR1 и LFSR2. Выход одного из регистров решает, какой из двух других будет использоваться; например, если LFSR2 выводит 0, тактируется LFSR0, а если он выводит 1, тактируется LFSR1. Выход представляет собой исключающее ИЛИ последнего бита, произведенного LFSR0 и LFSR1. Начальное состояние трех LFSR является ключом.
Генератор «стоп-энд-гоу» (Бет и Пайпер, 1984) состоит из двух LFSR. Один LFSR тактируется, если выход второго равен 1, в противном случае он повторяет свой предыдущий выход. Затем этот выход (в некоторых версиях) объединяется с выходом третьего LFSR, тактируемого с обычной частотой.
Сжимающий генератор использует другой подход. Используются два LFSR, оба тактируются регулярно. Если выход первого LFSR равен 1, выход второго LFSR становится выходом генератора. Однако, если первый LFSR выводит 0, выход второго отбрасывается, и генератор не выводит ни одного бита. Этот механизм страдает от атак по времени на второй генератор, поскольку скорость выхода является переменной в зависимости от состояния второго генератора. Это можно устранить путем буферизации выхода.
Другой подход к повышению безопасности LFSR заключается в передаче всего состояния одного LFSR в нелинейную функцию фильтрации .
Вместо линейного приводного устройства можно использовать нелинейную функцию обновления. Например, Климов и Шамир предложили треугольные функции ( T-функции ) с одним циклом на n-битных словах.
Чтобы потоковый шифр был безопасным, его поток ключей должен иметь большой период , и должно быть невозможно восстановить ключ или внутреннее состояние шифра из потока ключей. Криптографы также требуют, чтобы поток ключей был свободен даже от тонких искажений, которые позволили бы злоумышленникам отличить поток от случайного шума, и свободен от обнаруживаемых связей между потоками ключей, которые соответствуют связанным ключам или связанным криптографическим одноразовым номерам . Это должно быть верно для всех ключей (не должно быть слабых ключей ), даже если злоумышленник может знать или выбрать какой-то открытый текст или зашифрованный текст .
Как и другие атаки в криптографии, атаки с использованием потокового шифра могут быть сертификационными, поэтому они не обязательно являются практическими способами взлома шифра, но указывают на то, что шифр может иметь другие слабые места.
Безопасное использование безопасного синхронного потокового шифра требует, чтобы один и тот же поток ключей никогда не использовался дважды. Это обычно означает, что для каждого вызова шифра необходимо предоставлять другой одноразовый номер или ключ. Разработчики приложений также должны понимать, что большинство потоковых шифров обеспечивают не подлинность , а конфиденциальность : зашифрованные сообщения могут быть изменены при передаче.
Короткие периоды для потоковых шифров были практической проблемой. Например, 64-битные блочные шифры, такие как DES, могут использоваться для генерации потока ключей в режиме обратной связи по выходу (OFB). Однако, если не использовать полную обратную связь, результирующий поток имеет период около 2 32 блоков в среднем; для многих приложений период слишком мал. Например, если шифрование выполняется со скоростью 8 мегабайт в секунду, поток с периодом 2 32 блока будет повторяться примерно через час.
Некоторые приложения, использующие потоковый шифр RC4, подвержены атакам из-за слабостей в процедуре настройки ключей RC4; новые приложения должны либо избегать RC4, либо убедиться, что все ключи уникальны и в идеале не связаны между собой (например, сгенерированы с помощью CSPRNG с хорошим начальным значением или криптографической хеш-функции ), а первые байты потока ключей отбрасываются.
Элементы потоковых шифров зачастую гораздо проще для понимания, чем элементы блочных шифров, и поэтому в них меньше вероятности скрыть какие-либо случайные или злонамеренные уязвимости.
Поточные шифры часто используются из-за их скорости и простоты реализации в оборудовании, а также в приложениях, где открытый текст поступает в количествах неизвестной длины, таких как защищенное беспроводное соединение. Если бы блочный шифр (не работающий в режиме потокового шифра) использовался в этом типе приложения, разработчику пришлось бы выбирать либо эффективность передачи, либо сложность реализации, поскольку блочные шифры не могут напрямую работать с блоками короче их размера блока. Например, если 128-битный блочный шифр получал отдельные 32-битные пакеты открытого текста, три четверти передаваемых данных были бы заполнением . Блочные шифры должны использоваться в режиме кражи шифротекста или остаточного завершения блока , чтобы избежать заполнения, в то время как поточные шифры устраняют эту проблему, естественным образом работая с наименьшей единицей, которая может быть передана (обычно байтами).
Другим преимуществом потоковых шифров в военной криптографии является то, что поток шифра может быть сгенерирован в отдельном ящике, который подлежит строгим мерам безопасности, и передан на другие устройства, такие как радиоприемник, которые будут выполнять операцию XOR как часть своей функции. Последнее устройство затем может быть спроектировано и использовано в менее строгих условиях.
ChaCha становится наиболее широко используемым потоковым шифром в программном обеспечении; [2] другие включают: RC4 , A5/1 , A5/2 , Chameleon, FISH , Helix , ISAAC , MUGI , Panama , Phelix , Pike , Salsa20 , SEAL , SOBER , SOBER-128 и WAKE .
{{cite book}}
: |journal=
проигнорировано ( помощь )CS1 maint: location missing publisher (link)