В криптографията поточният шифър е шифър със симетричен ключ, при който битовете на открития текст се комбинират с псевдослучаен поток от шифрови битове (ключов поток), като се използва операцията ексклузивен или (xor). При поточното шифриране цифрите на открития текст се шифроват една по една, като трансформацията на последователните цифри се променя по време на състоянието на шифриране. Алтернативно наименование е шифър на състоянията, тъй като криптирането на всяка цифра зависи от текущото състояние. На практика цифрите обикновено са единични битове или байтове.

Поточните шифри представляват различен подход към симетричното криптиране от блоковите шифри. Блоковите шифри работят с големи блокове с фиксирана дължина. Потоковите шифри обикновено се изпълняват с по-висока скорост от блоковите шифри и имат по-ниски хардуерни изисквания. Въпреки това, при неправилно използване на поточните шифри може да възникнат сериозни проблеми със сигурността; например, в частност, едно и също начално състояние никога не трябва да се използва два пъти.

Поточният шифър използва много по-малък и по-удобен криптографски ключ, например 128-битов ключ. Въз основа на този ключ той генерира псевдослучаен ключов поток, който може да се комбинира с цифрите на открития текст по начин, подобен на алгоритъма за еднократно криптиране. Въпреки това, тъй като ключовият поток е псевдослучаен, а не наистина случаен, сигурността, свързана с еднократната подложка, не може да бъде приложена и е напълно възможно един поточен шифър да бъде напълно несигурен.

Принцип на действие

Основната идея е да се генерира дълга последователност от битове (ключов поток), която да се комбинира чрез операцията XOR с битовете на открития текст. Ако ключовият поток беше истински случаен и използван само веднъж, това би било еквивалент на алгоритъма за еднократно криптиране (one-time pad) и би бил абсолютно сигурен. В реалните поточни шифри обаче ключовият поток се произвежда от детерминистичен генератор, и затова е псевдослучаен. Това налага допълнителни мерки и внимателно използване, за да се избегнат уязвимости.

Видове поточни шифри

  • Синхронни поточни шифри — генераторът зависи само от ключа и евентуално от уникален начален вектор (IV/nonce). Изходът се синхронизира по позиция в потока; при загуба на няколко бита на връзката синхронизацията се губи. Примерни проблеми: повторно използване на една и съща двойка ключ/IV води до компрометиране.
  • Самосинхронизиращи (ciphertext-feedback) поточни шифри — генераторът зависи от последните n бита от криптограмата; при загуба на данни синхронизацията може да се възстанови автоматично след няколко бита. Този тип е полезен при ненадеждни връзки.

Генератори на ключов поток

Ключовият поток може да бъде произведен по различни начини:

  • Линейни регистри със изместване (LFSR) и техни нелинейни варианти (NLFSR).
  • Комбинация от няколко LFSR с нелинейна функция (combiner/filtered generator).
  • Криптографски псевдослучайни генератори (PRNG) и потокообразуващи функции, базирани на блокови шифри (например режим CTR) или на блочни конструкции.
  • Съвременни алгоритми като ChaCha20 и Salsa20, които използват блоково-ориентирани конструкции, но се прилагат като поточни шифри.

Предимства и недостатъци

  • Предимства: висока скорост при софтуерни и хардуерни реализации, ниски изисквания за памет и изчислителна сложност, добра подходящост за поточни данни (стрийминг).
  • Недостатъци: уязвимости при неправилно използване (особено при повторение на начално състояние или IV), някои алгоритми имат статистически пристрастия (напр. исторически проблеми с RC4), и липсата на вградено автентикиране на съобщението.

Рискове и чести атаки

  • Повторна употреба на ключ/IV (двойна подложка) — при употреба на един и същ ключов поток за два различни текста XOR на криптограмите дава XOR на откритите текстове, което често води до бързо възстановяване на съдържанието.
  • Биас и статистически атаки — ако генераторът има статистически отклонения, атакуващ може да извлече информация за ключа или открития текст (примери: слабости в RC4 доведоха до компрометиране на протоколи като WEP).
  • Корелационни атаки — при комбиниране на няколко LFSR може да съществува корелация между ключовия поток и отделни регистри, позволяваща възстановяване на състоянието.
  • Атаки при компрометирано състояние — ако състоянието на генератора бъде разкрито (напр. чрез странични канали), бъдещите потоци могат да бъдат предвидени.
  • Липса на автентикация — самото XOR криптиране не проверява целостта; затова е нужно използване на MAC или по-добре на authenticated encryption (AE).

Добри практики

  • Избягвайте алгоритми с доказани слабости (напр. не използвайте RC4 в нови решения).
  • Гарантирайте уникалност на началното състояние/IV/nonce за всяко криптиране при един и същ ключ. Никога не използвайте едно и също начало два пъти.
  • Използвайте схеми за автентикация на данните (например AEAD — Authenticated Encryption with Associated Data), като ChaCha20-Poly1305 или AES-GCM.
  • Правилна генерация и съхранение на ключовете и използване на достатъчно дълги ключове (напр. 128/256 бита) и безопасни процедури за ротация и обновяване.
  • Защитете имплементациите от странични канали (timing, power, fault), особено в хардуерни устройства.

Примери и приложения

Поточните шифри са широко използвани в системи, където се изисква бързо и ефективно криптиране на трафик: телекомуникации, VoIP, поточно видео, криптиране на сесии в протоколи като TLS (в определени режими) и в устройства с ограничени ресурси. Исторически критични случаи като WEP показаха как неправилна употреба на поточен шифър може да доведе до пълна компрометация. Съвременните препоръки насочват към използване на доказани и ревюирани алгоритми и схеми с вградена автентикация (например ChaCha20-Poly1305 в много нови реализации).

Заключение

Поточните шифри предлагат ефективен начин за криптиране на потоци от данни, но тяхната сигурност зависи силно от качеството на генератора на ключов поток и от начина на използване (особено от правилното управление на началните вектори и ключовете). За да се избегнат сериозни рискове, използвайте съвременни, добре прегледани алгоритми, прилагайте автентикация и следвайте утвърдени практики при управление на ключове.