Алгоритмите със симетричен ключ са метод в криптографията. Те се прилагат, когато ключовете за декриптиране и криптиране са точно една и съща споделена тайна. Тайната може да се генерира на случаен принцип, да бъде извлечена от парола или да бъде обменена чрез процедура за обмен на тайни ключове, като например Diffie-Hellman. Симетричните алгоритми са основна част от практическата сигурност при предаване и съхранение на данни.

Алгоритмите със симетричен ключ са много важни, защото са по-бързи за компютрите от другите видове — алгоритми с публичен ключ. При криптографията с публичен ключ (асиметрична криптография) ключът за криптиране може да се даде публично и всеки може да ви изпраща тайни съобщения. Този подход е много полезен, но алгоритмите за публичен ключ са значително по-бавни, затова обикновено се използват само за сигурна размяна на секретен ключ. След това симетричните алгоритми се използват за самото криптиране на големи обеми данни, защото са по-ефективни.

Съществуват два основни вида алгоритми със симетричен ключ, наречени поточни и блокови шифри. Поточните шифри криптират съобщението като поток от битове или байтове последователно. Блоковите шифри обработват данните на блокове (напр. 64 или 128 бита), шифроват всеки блок като една единица и могат да използват резултата от предишни блокове (чрез режим на работа). Обикновено по-старите блокови шифри използват 64-битови блокове; съвременни шифри като Advanced Encryption Standard (AES) използват 128-битови блокове за по-висока сигурност и по-добра устойчивост към някои атаки.

Примери за популярни симетрични шифри са Twofish, Serpent, AES (известен още като Rijndael), Blowfish, CAST5, RC4, TDES и IDEA. Някои от тези алгоритми са стандарти в индустрията; други вече са смятани за остарели или небезопасни при неправилна употреба.

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

Други термини за криптиране със симетричен ключ са криптиране със секретен ключ, криптиране с един ключ, криптиране със споделен ключ и накрая криптиране с частен ключ. Последният термин няма същото значение, каквото има терминът "частен ключ" в криптографията с публичен ключ.

Режими на работа на блоковите шифри

  • ECB (Electronic Codebook) — прост, но несигурен при повтарящи се блокове (не трябва да се използва за повечето приложения).
  • CBC (Cipher Block Chaining) — използва IV и свързва всеки блок с предишния; изисква правилно управление на IV и подходящо падиране.
  • CFB, OFB — режими, които осигуряват функционалност, подобна на поточен шифър.
  • CTR (Counter) — превръща блоков шифър в поток чрез брояч; бърз и паралелизирам.
  • GCM (Galois/Counter Mode) — комбинира CTR с автентикация (AEAD), което осигурява едновременно конфиденциалност и интегритет; често препоръчван за модерни приложения.

Специфики на AES и Blowfish

AES (Advanced Encryption Standard) е приет като стандарт и използва 128-битов блок. Поддържа ключови дължини 128, 192 и 256 бита; броят на рундовете зависи от дължината на ключа (10/12/14 рунда). AES е бърз, добре изучен и широко използван, особено в режими като AES-GCM (за автентицирана криптография) и AES-CTR.

Blowfish е блоков шифър, проектиран от Брус Шнайър. Използва 64-битови блокове и ключ от 32 до 448 бита. Работи като Feistel мрежа и е подходящ за приложения, където ключовете се сменят рядко (например файлово криптиране). Поради 64-битовия блок обаче, при големи обеми данни съществува риск от повторение на блокове; поради това за нови системи често се предпочитат 128-битови блокови шифри като AES. Blowfish има наследник — Twofish — който предлага 128-битови блокове и също е силен конкурент.

Други важни алгоритми и тенденции

  • Twofish, Serpent — конкуренти на AES, силни и сигурни за много приложения.
  • 3DES (TDES) — наследник на DES; сигурен в ограничени случаи, но бавен и с по-малка ефективност от AES.
  • RC4 — поточен шифър, който е широко употребяван в миналото, но в днешно време се счита за компрометиран и трябва да се избягва.
  • ChaCha20 — модерен поточен шифър, често комбиниран с Poly1305 за автентикация (ChaCha20-Poly1305); добро алтернативно решение при мобилни и вградени системи.

Сигурност и добри практики

  • Използвайте достатъчно големи ключове (напр. AES-128 или AES-256) и избягвайте остарели алгоритми (RC4, DES).
  • Използвайте режими с автентикация (AEAD), като AES-GCM или ChaCha20-Poly1305, за да защитите както конфиденциалността, така и целостта на данните.
  • Правилно генерирайте и управлявайте IV/nonce — никога не повтаряйте стойности, които трябва да са уникални (напр. за CTR или GCM).
  • Избягвайте повторно използване на един и същ ключ и IV за различни съобщения; за някои режими повтарянето може да доведе до компрометиране на данните.
  • Прилагайте безопасно падиране (напр. PKCS#7) и внимателно се пазете от padding oracle атаки.
  • Защитете ключовете чрез подходящи механизми за съхранение (HSM, ключови магазини) и използвайте асиметрична криптография за сигурен обмен на симетрични ключове.
  • Вземете предвид страничните канали (timing, power analysis) — хардуерните реализации трябва да са устойчиви на такива атаки.

Примери за приложение

  • Шифроване на файлове и дискове (BitLocker, VeraCrypt) — използват AES в подходящ режим.
  • Защита на мрежови връзки (TLS) — асиметрична криптография установява връзката и обменя симетричен ключ; последният се използва за бързо криптиране на данните с AES или ChaCha20.
  • Криптирани архиви и бази данни — използват симетрично криптиране за масово криптиране на съдържание.

Заключение

Симетричното криптиране остава критично важно за информационната сигурност — то е бързо и ефективно за големи обеми данни. Изборът на алгоритъм и режим, правилното управление на ключовете и използването на автентикация са ключови за безопасността на системата. Като общо правило: използвайте съвременни, добре изучени алгоритми (напр. AES) в подходящи режими (напр. GCM) и следвайте добрите практики за генериране и съхранение на ключовете.