Поточен шифър в криптографията: дефиниция, принцип и рискове
Научете всичко за поточния шифър: дефиниция, принцип на работа (XOR и ключов поток), предимства, рискове и как да избегнете критични грешки при използване.
В криптографията поточният шифър е шифър със симетричен ключ, при който битовете на открития текст се комбинират с псевдослучаен поток от шифрови битове (ключов поток), като се използва операцията ексклузивен или (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 в много нови реализации).
Заключение
Поточните шифри предлагат ефективен начин за криптиране на потоци от данни, но тяхната сигурност зависи силно от качеството на генератора на ключов поток и от начина на използване (особено от правилното управление на началните вектори и ключовете). За да се избегнат сериозни рискове, използвайте съвременни, добре прегледани алгоритми, прилагайте автентикация и следвайте утвърдени практики при управление на ключове.

Работата на генератора на ключови потоци в A5/1 - поточен шифър, базиран на LFSR, използван за криптиране на разговори по мобилни телефони.
Видове поточни шифри
Поточният шифър генерира последователни елементи на ключовия поток въз основа на вътрешно състояние. Това състояние се актуализира по два начина:
- Ако състоянието се променя независимо от съобщенията с открит или шифрован текст, шифърът се класифицира като синхронен поточен шифър.
 - Ако състоянието се актуализира въз основа на предишни промени на цифрите на шифровия текст, шифърът се класифицира като самосинхронизиращ се поточен шифър.
 
Синхронни поточни шифри
При синхронния поточно-цифров шифър поток от псевдослучайни цифри се генерира независимо от съобщенията с открит и шифрован текст, след което се комбинира с открития текст (за криптиране) или с шифрования текст (за декриптиране). В най-разпространената форма се използват двоични цифри(битове), а потокът от ключове се комбинира с открития текст, като се използва операцията exclusive or (XOR). Това се нарича двоичен адитивен поточен шифър.
При синхронния поточен шифър изпращачът и получателят трябва да са в синхрон, за да бъде декриптирането успешно. Ако по време на предаването се добавят или премахват цифри от съобщението, синхронизацията се губи. За да се възстанови синхронизацията, могат систематично да се изпробват различни отмествания, за да се получи правилно декриптиране. Друг подход е да се маркира шифрованият текст с маркери в редовни точки на изхода.
Ако обаче дадена цифра е повредена при предаването, а не е добавена или изгубена, се засяга само една цифра в открития текст и грешката не се разпространява в други части на съобщението. Това свойство е полезно, когато честотата на грешките при предаване е висока; то обаче намалява вероятността грешката да бъде открита без допълнителни механизми. Освен това поради това свойство синхронните поточни шифри са много податливи на активниатаки - ако нападателят може да промени цифра в шифровия текст, той може да е в състояние да направи предвидими промени в съответния бит на обикновения текст; например обръщането на бит в шифровия текст води до обръщане(Toggled) на същия бит в обикновения текст.
Самосинхронизиращи се поточни шифри
Самосинхронизиращите се поточни шифри са друга техника, която използва част от предишните N цифри на шифровия текст за изчисляване на ключовия поток. Такива схеми са известни още като асинхронни поточни шифри или автоключ на шифротекста (CTAK). Идеята за самосинхронизация е патентована през 1946 г. и има предимството, че приемникът автоматично се синхронизира с генератора на ключовия поток след получаването на N цифри от шифровия текст, което улеснява възстановяването, ако цифрите са изпуснати или добавени към потока от съобщения. Единичните грешки са с ограничен ефект, като засягат само до N цифри от открития текст. Извършването на активни атаки срещу самосинхронизиращи се поточни шифри е малко по-трудно, отколкото срещу синхронни аналози.
Пример за самосинхронизиращ се поточен шифър е блоков шифър в режим на обратна връзка с шифъра (CFB).
Поточни шифри, базирани на регистър за преместване с линейна обратна връзка
Двоичните поточни шифри често се конструират с помощта на регистри с линейна обратна връзка (LFSR), тъй като могат лесно да се реализират хардуерно и бързо да се анализират математически. Използването само на LFSR обаче е недостатъчно за осигуряване на добра сигурност. Разработени са различни схеми за повишаване на сигурността на LFSR.
Нелинейни функции за комбиниране
Тъй като LFSR са линейни по своята същност, една от техниките за премахване на линейността е да се подадат изходите на група паралелни LFSR към нелинейна булева функция, за да се формира генератор на комбинации. Различни свойства на такава комбинираща функция са важни за гарантиране на сигурността на получената схема, например за да се избегнат корелационни атаки.
Генератори с тактово управление
Обикновено LFSRs се стъпват редовно. Един от начините за въвеждане на нелинейност е LFSR да се тактува неравномерно, като се контролира от изхода на втори LFSR. Такива генератори са генераторът "стоп и ход", генераторът с променлива стъпка и генераторът за свиване.
Генераторът "stop-and-go" (Beth and Piper, 1984) се състои от два LFSR. Единият LFSR се тактува, ако изходът на втория е "1", в противен случай той повтаря предишния си изход. След това този изход (в някои версии) се комбинира с изхода на трети LFSR, който се тактува с постоянна скорост.
Генераторът за свиване използва различна техника. Използват се два LFSR, като и двата се тактуват редовно по следния начин:
- Ако изходът на първия LFSR е "1", изходът на втория LFSR става изход на генератора.
 - Ако изходът на първия LFSR е "0", изходът на втория се изхвърля и генераторът не извежда никакъв бит.
 
Тази техника страда от атаки по отношение на времето на втория генератор, тъй като скоростта на изхода се променя по начин, който зависи от състоянието на втория генератор. Това може да се подобри чрез буфериране на изхода.
Генератор на филтри
Друг подход за подобряване на сигурността на LFSR е да се предаде цялото състояние на един LFSR в нелинейна филтрираща функция.
Други дизайни
Вместо линейно управляващо устройство може да се използва нелинейна функция за актуализация. Например Климов и Шамир предлагат триъгълни функции (Т-функции) с един цикъл върху n битови думи.
Сигурност
За да бъде сигурен, периодът на ключовия поток (броят на цифрите, които се извеждат, преди потокът да се повтори) трябва да бъде достатъчно голям. Ако поредицата се повтаря, тогава припокриващите се шифротекстове могат да бъдат подравнени един спрямо друг "в дълбочина" и съществуват техники, които позволяват извличането на обикновен текст от шифротекстове, генерирани по тези методи.
Употреба
Потоковите шифри често се използват в приложения, в които откритият текст е с неизвестна дължина, като например при сигурни безжични връзки. Ако блоков шифър се използва в такъв тип приложение, дизайнерът ще трябва да избере или ефективността на предаване, или сложността на изпълнение, тъй като блоковите шифри не могат да работят директно с блокове, по-къси от техния размер. Например, ако 128-битов блоков шифър получи отделни 32-битови серии от открит текст, три четвърти от предаваните данни се нуждаят от подложка. За да се избегне подплънка, блоковите шифри трябва да се използват в режим на кражба на шифротекст или прекратяване на остатъчен блок, докато поточните шифри елиминират този проблем, като работят с най-малката предавана единица (обикновено байтове).
Друго предимство на поточното шифриране във военната криптография е, че поточното шифриране може да се генерира от устройство за шифриране, което подлежи на строги мерки за сигурност, след което да се подаде към други устройства, например радиоприемник, които ще изпълняват операцията xor като част от своята функция. Другото устройство може да бъде предназначено за използване в среда с по-ниска степен на сигурност.
RC4 е най-широко използваният в софтуера поточен шифър; други включват: A5/1, A5/2, Chameleon, FISH, Helix, ISAAC, MUGI, Panama, Phelix, Pike, SEAL, SOBER, SOBER-128 и WAKE.

RC4 е един от най-широко използваните поточни шифри.
Сравнение на поточни шифри
|   StreamCipher  |    CreationDate  |    Скорост  |    (битове)  |    Атака  |  |||
|   Ефективен  |    Вектор за инициализация  |    InternalState  |    Най-известните  |    Изчислителна сложност  |  |||
|   A5/1  |    1989  |    Глас (Wphone)  |    54  |    114  |    64  |    Активен KPA OR  |    ~2 секунди OR239.91  |  
|   A5/2  |    1989  |    Глас (Wphone)  |    54  |    114  |    64?  |    Активен  |    4,6 милисекунди  |  
|   РИБИ  |    1993  |    Доста бързо (Wsoft)  |    Огромен  |    Атака с познат текст (Known-plaintext attack)  |    211  |  ||
|   Зърно  |    Преди 2004 г.  |    Бърз  |    80  |    64  |    160  |    Деривация на ключове  |    243  |  
|   HC-256  |    Преди 2004 г.  |    4 (WP4)  |    256  |    256  |    65536  |  ||
|   ISAAC  |    1996  |    2.375 (W64-bit)   |    8-8288обикновено  |    N/A  |    8288  |    (2006 г.) Първи кръг-Слаба вътрешна държава-Деривация  |    4.67×101240 (2001)  |  
|   MUGI  |    1998-2002  |    128  |    128  |    1216  |    N/A (2002 Г.)  |    ~282  |  |
|   PANAMA  |    1998  |    2  |    256  |    128?  |    1216?  |    Сблъсъци на хеш-памети (2001)  |    282  |  
|   Феликс  |    Преди 2004 г.  |    до 8 (Wx86)  |    256 + 128-битов Nonce  |    128?  |    Диференциал (2006 г.)  |    237  |  |
|   Pike  |    1994  |    0,9 x FISH (Wsoft)  |    Огромен  |    N/A (2004 Г.)  |    N/A (2004 Г.)  |  ||
|   Py  |    Преди 2004 г.  |    2.6  |    8-2048?  |    64  |    8320  |    Криптоаналитична теория (2006)  |    275  |  
|   Заек  |    2003-февруари  |    3,7 (WP3) - 9,7 (WARM7)  |    128  |    64  |    512  |    N/A (2006 Г.)  |    N/A (2006 Г.)  |  
|   1987  |    Впечатляващ  |    8-2048обикновено  |    8  |    2064  |    Шамир Първоначално байтно разделяне на ключове OR KPA  |    213 OR 233  |  |
|   Салса20  |    Преди 2004 г.  |    4,24 (WG4) -11  |    128 + 64-битов Nonce  |    512  |    512 + 384 (ключ+IV+индекс)  |    Диференциал (2005 г.)  |    N/A (2005 Г.)  |  
|   Scream  |    2002  |    4 - 5 (Wsoft)  |    128 + 128-битов Nonce  |    32?  |    64-битова функция за закръгляне  |  ||
|   SEAL  |    1997  |    Много бързо (W32-битова версия)  |    32?  |  ||||
|   SNOW  |    Преди 2003 г.  |    Много добър (W32-bit)  |    128 ИЛИ 256  |    32  |  |||
|   SOBER-128  |    2003  |    до 128  |    Съобщение Forge  |    2−6  |  |||
|   SOSEMANUK  |    Преди 2004 г.  |    Много добър (W32-bit)  |    128  |    128  |  |||
|   Trivium  |    Преди 2004 г.  |    4 (Wx86) - 8 (WLG)  |    80  |    80  |    288  |    Атака с груба сила (2006 г.)  |    2135  |  
|   Turing  |    2000-2003  |    5.5 (Wx86)  |    160  |  ||||
|   VEST  |    2005  |    42 (WASIC) -64 (WFPGA)  |    Променлива обикновено  |    Променлива обикновено  |    256 - 800  |    N/A (2006 Г.)  |    N/A (2006 Г.)  |  
|   WAKE  |    1993  |    Бърз  |    8192  |    CPA И CCA  |    Уязвим  |  ||
|   StreamCipher  |    CreationDate  |    Скорост  |    (битове)  |    Атака  |  |||
|   Ефективно  |    Вектор за инициализация  |    InternalState  |    Най-известните  |    Изчислителна сложност  |  |||
Свързани страници
- eSTREAM
 
Въпроси и отговори
В: Какво представлява поточният шифър?
О: Поточният шифър е шифър със симетричен ключ, при който битовете на открития текст се комбинират с псевдослучаен поток от битове на шифъра (ключов поток), като се използва операцията ексклузивен или (xor).
В: По какво се различава от блоковите шифри?
О: Поточните шифри обикновено се изпълняват с по-висока скорост от блоковите шифри и имат по-ниски хардуерни изисквания. Блоковите шифри работят с големи блокове с фиксирана дължина, докато поточните шифри криптират цифрите една по една и трансформацията на последователните цифри се променя по време на състоянието на криптиране.
Въпрос: Какъв тип ключове се използват?
О: Поточните шифри използват много по-малки и по-удобни криптографски ключове, например 128-битови ключове.
В: Как се генерира потокът от ключове?
О: Потокът от ключове се генерира въз основа на използвания криптографски ключ, подобно на алгоритъма за криптиране с еднократна подложка. Тъй като обаче ключовият поток е псевдослучаен, а не наистина случаен, не може да се приложи сигурността, свързана с еднократната подложка.
Въпрос: Защо никога не трябва да използвате едно и също начално състояние два пъти?
О: Използването на едно и също начално състояние два пъти може да доведе до сериозни проблеми със сигурността, тъй като улеснява нападателите да декриптират данни, без да знаят или да имат достъп до вашия криптографски ключ.
Въпрос: Има ли някакъв риск, свързан с използването на поточни шифри?
О: Да, ако се използват неправилно или без да се вземат подходящи предпазни мерки, съществува риск, свързан с използването на поточни шифри, тъй като те могат да бъдат напълно несигурни, ако не се работи правилно с тях.
обискирам