Nõrk võti krüptograafias: definitsioon, riskid ja ennetus
Krüptograafias on nõrk võti selline võti, mida kasutades koos konkreetse salakirjaga, paneb salakirja käituma mõnel ebasoovitaval viisil ja lihtsustab salakirjateksti murdmist (kräkkimist). Nõrk võti võib tekitada nähtavaid või olemuslikke kahjustusi — näiteks toodab ta krüpteerimisel hästi ette ennustatavat väljundit, muundab krüpteermise neutraalseks või vähendab efektiivselt võtmeruumi suurust, muutes sõnumi lahtikrakkimise lihtsamaks.
Nõrgad võtmed moodustavad tavaliselt väga väikese osa kogu võtmeruumist, mis tähendab, et kui keegi genereerib sõnumi krüpteerimiseks juhusliku võtme, siis on haruldane, et nõrgad võtmed põhjustavad turvaprobleemi. Siiski peetakse heaks disainiks, et salakirjal ei oleks nõrku võtmeid ("kvaliteetne šifter"). Nõrkade võtmete puudumise korral nimetatakse salakirja, millel on lame ehk lineaarne võtmeruum.
Nõrkade võtmete tüübid ja näited
- Topelt- või neutraalsed võtmed: võtmed, mis annavad krüpteerimisel identse või tuntud teisenduse (näiteks mõned DES-i nõrgad võtmed, mis annavad tagasi algse teksti või tekitavad perioodilise käitumise).
- Poolnõrgad (semi-weak) võtmed: võtmed, mille paariline võti taastab sama teisenduse — ründaja võib neid paare ära kasutada võtmeotsingus.
- Väljastpoolt vigased võtmed (implementatsioonivead): kehv juhuslikkuse generaator (PRNG/CSPRNG) võib toota korduvaid või ebaõigeotavaid võtmeid (näiteks halva algseemne tõttu korduvad RSA või ECDSA võtmed).
- Matemaatiliselt nõrgad võtmed: RSA puhul liiga väikesed faktorisatsiooniparameetrid, korduvad või jagatud algebralised faktoriid (ühised algarvud); ECC puhul avalike punktide valideerimata kasutamine, mis lubab väikesubgrupi rünnakuid.
- Seotud-võtme ründed (related-key attacks): kui krüptosüsteem on vastuvõtlik võtmetevaheliste väikeste erinevuste ärakasutamisele, võivad teatud võtmed anda ründajale eelise.
Miks nõrgad võtmed on ohtlikud
Nõrkade võtmete kasutamisel väheneb krüptosüsteemi praktiline turvalisus: ründaja võib kasutada väiksemat otsinguruumi, tunnetatavaid mustreid või numbrilisi omadusi, et taastada salajane võti või dekodeerida salakirjateksti. Mõned konkreetsed ohud:
- Võimalus käivitada kiirelt võtmeotsing või otsida vastavaid võtmegruppe.
- Mitme protsessi või isendi vahel jagunenud võtmete tuvastamine (nt sama PRNG viga) võimaldab massilisi GCD-analüüse RSA-modulite seast.
- Protokollide murdumine, kui avalikud võtmed ei ole valideeritud (näiteks rünnakud Diffie–Hellmani või ECDH korral, kus vastu võetud avalik punkt ei kuulu õigele algrupile).
Kuidas nõrku võtmeid ennetada ja avastada
- Kasu usaldusväärsetest juhuslikkuse allikatest: kasuta krüptograafiliselt tugevate juhuslikkegeneraatorite (CSPRNG) allikaid ja piisavalt entroopiat võtmete genereerimisel.
- Võtmete valideerimine: kontrolli, et genereeritud võtmed ei kuulu tuntud nõrkade võtmete nimekirja (näiteks DES-i teadaolevad nõrgad võtmed) ning et avalikud ECC-punktid kuuluvad õigele kõverale ja alagrupile.
- Standardid ja raamistike kasutamine: järgi tuntud soovitusi (nt NIST, ISO) võtmete pikkuse, KDF-ide ja võtmevalideerimise kohta.
- Võtme tuletamine turvaliste KDF-idega: kui võtmeid tuletatakse paroolidest või muust piiratud entropiast, kasuta PBKDF2/scrypt/Argon2 ja piisavat parameetrite seadet, et kasvatada otsimiskulu.
- Riistvaraline kaitse: HSM-id ja TPM-id aitavad vähendada võtmete lekkimise ja kehva genereerimise riske.
- Püsiv testimine: tee üksuse- ja süsteemiteste, mis püüavad tuua välja korduvad võtmed, väikse entropiaga võtmed või matemaatiliselt ebasoodsad parameetrid.
Konkreetseid praktilisi soovitusi
- Võimalusel kasuta kaasaegseid algoritme, millel on laialdane analüüs (nt AES, tugevad ECC-kõverad, RSA piisava suurusega võtmetega) ning väldi vananenud šifreid nagu DES.
- Kui kasutad avaliku võtme algoritme, valideeri alati partneri avalikud võtmed enne nende kasutamist.
- Ära tuleta võtmeid otse paroolidest ilma KDF-ita; ära luba madala entropiaga võtmete kasutust tootmiskeskkonnas.
- Hoolitse võtmete rotatsiooni ja lunastamise (revocation) protsesside eest — kui kahtlus tekib, keera võtmed tagasi ja genereeri uued turvalised võtmed.
- Kasuta tuntud krüptograafilisi raamatukogusid ja hoia need ajakohasena — paljud nõrgad võtmed ilmnevad implementatsioonivea tõttu, mitte teoreetilise nõrkuse tõttu.
Kuidas teste läbi viia ja tööriistu kasutada
Võid kasutada automaatseid tööriistu ja skripte, mis kontrollivad võtmete omadusi: DES-i nõrkade võtmete tabeli vastu võrdlemine, RSA-modulite GCD-analüüs suure hulga võtmete peal, ECC avalike punktide validaatorid jpm. Samuti on kasulik läbi viia auditid ja koodiülevaatused, et avastada halbu juhuslikkuse allikaid või valesid parameetreid.
Kiirkontrolli nimekiri:
- Kas võtmete genereerimiseks kasutatakse CSPRNG-i?
- Kas genereeritud võtmed on valideeritud ja ei kuulu tuntud nõrkade võtmete hulka?
- Kas avalikud võtmed (ECC/DH) kontrollitakse alagrupi ja kõvera kuulumise suhtes?
- Kas paroolidest tuletatud võtmed kasutavad tugevaid KDF-e ja piisavat parameetrite seadistust?
- Kas võtmete käsitlemine (salvestus, rotatsioon, hävitamine) järgib turvapõhimõtteid?
Kokkuvõttes: kuigi nõrgad võtmed on haruldased, võivad need põhjustada suuri turvanõrkusi. Hea praktikaga — turvaline generaator, valideerimine, kaasaegsed algoritmid ja korrapärased testid — saab riske oluliselt vähendada ning tagada, et salakirja ja selle võtmeruum jäävad tugevaks ja usaldusväärseks.
Näiteid 128-bitiste nõrkade võtmete kohta
- Kõik nullid (0x00000000000000000000)
- Kõik ühikud (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
- Vahelduv '1' + '0' (0x010101010101010101010101)
- Vahelduv 'F' + 'E' (0xFEFEFEFEFEFEFEFEFEFEFEFE)
- Vahelduv 'E' + '1' (0xE1E1E1E1E1E1F0F0F0F0F0) või (0x1E1E1E1E1E1E0F0F0F0F0F)