Слаб ключ в криптографията — дефиниция, рискове и защита
Научете какво е слаб ключ в криптографията, какви рискове крие и как да се защитите — практични съвети за сигурно шифроване и избор на надеждни ключове.
В криптографията слабият ключ е ключ, който, когато се използва с определен шифър, кара шифъра да се държи по някакъв нежелан начин и улеснява разбиването (кракването) на шифровия текст.
Слабите ключове обикновено представляват много малка част от общото пространство от ключове, което означава, че ако някой генерира случаен ключ за криптиране на съобщение, слабите ключове рядко могат да причинят проблем със сигурността. Въпреки това се счита, че е добър дизайн на шифър, който няма слаби ключове ("качествен шифър"). За шифър без слаби ключове се казва, че има плоско или линейно ключово пространство.
Примери на слаби ключове
Слабите ключове могат да се появят както в симетричните, така и в асиметричните схеми:
- DES класически пример — за оригиналния DES са известни малък брой наистина слаби ключове и полу-слаби двойки; при тези ключове шифрирането може да се обърне лесно или две различни ключови стойности да доведат до сходно поведение на шифъра.
- Stream шифри и RC4 слабости в начина на инициализация или в статистическите разпределения на първите байтове могат да доведат до изтичане на информация за ключа.
- RSA асиметричните ключове могат да бъдат „слаби“, ако простите множители на модула са твърде малки, ако генерацията на простите числа използва слаб или повторяем източник на ентропия, или ако два различни ключа споделят общ прост множител (споделен прост).
- Diffie–Hellman / ECC избор на неподходящи параметри (малък порядък на подгрупата, неправилна крива или генератор) или използване на частни ключове със стойност 0/1 може да доведе до уязвимости.
Какви са рисковете
- Лесно възстановяване на секретна информация — атакуващ може да възстанови ключа с по-малко усилия от очакваното.
- Нарушаване на доверителност и целостта — компрометиран ключ позволява декриптиране, подписване или манипулиране на данни.
- Широко приложение на компрометирани ключове — ако ключът е използван в множество системи (кажи, подписен сертификат или споделен ключ), може да последва масивна компрометация.
Как да се предпазим — добри практики
- Използвайте криптографски сигурен генератор на случайни числа (CSPRNG) при създаване на ключове — лошите източници на ентропия са чест причинител на слаби ключове.
- Ползвайте добре поддържани и стандартизирани библиотеки и алгоритми (например AES вместо DES/3DES; модерни ECC криви) — избягвайте „домашни“ решения.
- Проверявайте ключовете при генериране — за известни шифри (напр. DES) има списъци със слаби ключове; за RSA извършете базови проверки (достатъчна дължина на простите, проверка за споделени фактори и т.н.).
- Използвайте KDF (key derivation functions) при извеждане на ключове от пароли или други източници — добрите KDF добавят сол и трудоемка итерация, намалявайки шанса за слаб ключ.
- Планирайте ротация и оттегляне на ключове — редовната смяна и бързото изтегляне на компрометирани ключове намаляват риска.
- Давайте приоритет на протоколи с forward secrecy (например използване на Ephemeral Diffie–Hellman), за да ограничите последиците от компрометиран дълготраен ключ.
- Осигурете достатъчно дължина на ключа — по-големите размери (приемащи се като сигурни от общото мнение) правят атаките чрез груба сила непрактични.
- Обучение и правилна конфигурация — много инциденти са резултат от неправилна употреба или конфигуриране на криптотехнологии.
Откриване и проверка на слаби ключове
Някои техники за намиране или предпазване от слаби ключове:
- Сравнение с известни списъци на слаби ключове (за алгоритми, при които такива списъци съществуват).
- За RSA — извършване на тестове за споделени прости множители между голям брой публични ключове (batch GCD), проверка на размера и произхода на простите числа.
- Статистически тестове на низовете, генерирани от RNG (ентропийни тестове), за да се открие повторяем или ниско ентропиен източник.
- Пенетрационни тестове и одит на криптографските операции и конфигурации.
Какво да направите, ако откриете слаб ключ
- Незабавно оттеглете/анулирайте и сменете компрометирания ключ.
- Извършете преглед на причините — дали е недостатъчна ентропия, грешка в библиотеката, неправилна конфигурация или злонамерена намеса.
- Аудитирайте системите, свързани с ключа (сертификати, сесии, защитени файлове), и предприемете мерки за отстраняване на последствията (ревокация, преиздаване и т.н.).
- Актуализирайте процедури и инструменти за генериране и съхранение на ключове, за да избегнете повторение.
Заключение
Въпреки че слабите ключове обикновено са рядкост при правилно генерирани ключове, последствията от използването им могат да бъдат сериозни. Добрата практика включва използване на доказани алгоритми и библиотеки, осигуряване на надежден източник на ентропия, валидация на ключовете и план за бърза реакция при откриване на компрометация.
Примери за 128-битови слаби ключове
- Всички нули (0x0000000000000000)
- Всички единици (0xFFFFFFFFFFFFFFFF)
- Редуване на '1' + '0' (0x0101010101010101)
- Редуване на 'F' + 'E' (0xFEFEFEFEFEFEFEFE)
- Редуващи се 'E' + '1' (0xE1E1E1E1E1F0F0F0F0) или (0x1E1E1E1E0F0F0F0F)
обискирам