Синхронные потоковые шифры
В синхронном потоковом шифре поток ключей генерируется независимо от потока сообщения. Военные называют этот шифр ключевым автоключом (Key Auto-Key, КАК). При шифровании генератор потока ключей один за другим выдает биты потока ключей. При дешифрировании другой генератор потока ключей один за другим выдает идентичные биты потока ключей. Это работает, если оба генератора синхронизированы. Если один из них пропускает один из циклов, или если бит шифротекста теряется при передаче , то после ошибки каждый символ шифротекста будет расшифрован неправильно.
Если такое случается, отправитель и получатель должны повторно синхронизировать свои генераторы пот о-ка ключей прежде, чем можно будет продолжить работу. Что еще хуже, они должны выполнить синхронизацию так, чтобы ни одна часть потока ключей не была повторена, поэтому очевидное решение перевести генератор в более раннее состояние не работает.
Положительная сторона синхронных фильтров - это отсутствие распространения ошибок . Если при передаче бит изменит свое значение, что намного вероятнее его потери, то только испорченный бит будет дешифрован неправильно. Все предшествующие и последующие биты не изменятся .
Генератор должен выдавать один и тот же поток ключей и для шифрования, и для дешифрирования, следовательно, выход генератора должен быть предопределен. Если он реализуется на конечном автомате (т.е., компьютере), последовательность со временем повторится. Такие генераторы потока ключей называются периодическими. За исключением одноразовых блокнотов все генераторы потока ключей являются периодическими .
Генератор потока ключей должен обладать длинным периодом, намного более длинным, чем количество битов, выдаваемых между сменой ключей. Если период меньше, чем размер открытого текста, то различные части открытого текста будут зашифрованы одинаковым образом, что сильно ослабляет безопасность системы . Если криптоаналитику известна часть открытого текста, он может раскрыть часть потока ключей и использовать ее для дальнейшего раскрытия открытого текста. Даже если у аналитика есть только шифротекст, он может выполнить XOR над разделами, шифрованными одинаковым потоком ключей, и получить XOR соответствующих участков открытого текста. При этом используемый алгоритм превращается в простой алгоритм XOR с очень длинным ключом.
Конкретная длина периода зависит от приложения. Генератор потока ключей, шифрующий непрерывный канал Т1, будет шифровать 2 бит в день. Период генератора должен быть на несколько порядков больше этого значения, даже если ключ меняется ежедневно. Если период имеет достаточную длину, ключ можно будет менять раз в неделю или даже раз в месяц.
Синхронные потоковые шифры также предохраняют от любых вставок и удалений шифротекста , так как они приводят к потере синхронизации и будут немедленно обнаружены. Однако, они не защищают полностью от битовых сбоев. Как и при блоковых шифрах в режиме СРВ, Мэллори может изменить отдельные биты потока. Если ему известен открытый текст, он может изменить эти биты так, чтобы эти биты дешифрировались так, как ему надо. Дальнейшие биты при дешифрировании превратятся в чепуху (пока система не восстановится) , но в определенных приложениях Мэллори может принести заметный ущерб .
Вскрытие вставкой
Синхронные потоковые шифры чувствительны к вскрытию вставкой . Пусть Мэллори записал поток шифротекста, но не знает ни открытого текста, ни потока ключей, использованного для шифрования открытого текста.
Оригинальный открытый текст: р! р! рЗ Pi Оригинальный поток ключей: kl k! kj ki Оригинальный шифротекст: cl с! сЗ ci
Мэллори вставляет один известный ему бит, w', в открытый текст после р! и затем пытается получить модифицированный открытый текст, шифрованный тем же потоком ключей. Он записывает получившийся новый шифротекст:
Новый открытый текст: р! р'pi pi pi Оригинальный поток: k. k! k-i ks k!, Обновленный шифротекст: cl c'z c'3 c'i c'i
Так как он знает значение р', он может определить весь открытый текст после этого бита по оригинальному и новому шифротекстам:
k! = c'z s р', затем р! = с! s k! kj = с'З Spt, затем рЗ = сЗ Sfc3 kt = с', S рЗ, затем р„ = cs S ks
Мэллори даже не нужно знать точное положение вставленного бита, он может просто сравнить оригинал ь-ный и обновленный шифротексты, чтобы обнаружить, где они начинают отличаться . Для предотвращения такого вскрытия никогда не используйте один поток ключей для шифрования двух различных сообщений .