Kodėl ilgesnis Blowfish raktas nepataiso 64 bitų bloko
Blowfish raktai gali siekti 448 bitus, o blokas lieka 64 bitų. Patikrinkite suderintą šifrą ir suplanuokite palaikomą pakeitimą vietoj ilgesnio rakto.
VPN profilis siūlo Blowfish su 448 bitų raktu, ir kažkas siūlo naudoti ilgiausią raktą šifrui išsaugoti. Rakto ilgis yra tikras, bet tai netinkamas skaičius optimizuoti. Blowfish transformuoja 64 bitų blokus neatsižvelgiant į rakto ilgį, o bloko plotis yra tai, kas riboja, kiek srauto vienas raktas gali saugiai apsaugoti. Atlikite toliau nurodytus patikrinimus iš eilės ir sustokite ties pirmuoju, kuris išlaisvina paslaugą, nes vėlesnis žingsnis negali pataisyti ankstesnio.
Patikrinkite, ką šalys iš tikrųjų suderina
Perskaitykite duomenų kanalo šifrą abiejuose galuose, o ne iš profilio, kurį ketinote įdiegti. Kliento konfigūracija gali išvardyti kelias šifras, o pasirinktoji yra derybų tarp dviejų implementacijų ir jų versijų rezultatas. Padidinkite žurnalo detalumą bandomojoje jungtyje ir perskaitykite duomenų kanalo eilutę, kurioje nurodyta faktiškai inicijuota šifra ir rakto dydis.
Jei suderinta šifra yra AES-GCM arba ChaCha20-Poly1305, sustokite čia. Šios konstrukcijos naudoja 128 bitų bloką ir autentifikuoja naudingąją apkrovą, todėl toliau pateiktas 64 bitų susidūrimų argumentas joms netaikomas.
Atskirkite rakto ilgį nuo bloko pločio
Blowfish priima raktus nuo 32 iki 448 bitų, o algoritmo autoriaus dokumentacija abu skaičius pateikia atskirai. Raktas yra paslaptis; blokas yra transformacijos vienetas. Ilgesnė paslaptis apsunkina spėjimą ir nieko nekeičia bloko, kurį šifra apdoroja, pločiui.
CBC režimu šifra taikoma fiksuoto pločio blokams, sujungtiems su ankstesniu šifruoto teksto bloku ir papildytiems pabaigoje. Blowfish atveju šis plotis yra 64 bitai, arba aštuoni baitai. Raktų tvarkaraštis gali būti koks norite didelis; grandinė vis tiek juda po aštuonis baitus.
Todėl ilgesnis raktas nėra švelninimas. Jis skirtas grubiai jėgai prieš raktą, o toliau pateikta susidūrimų rizika yra bloko pločio ir režimo savybė.
Taikykite gimtadienio aritmetiką bloko dydžiui
64 bitų blokas turi maždaug 2^32 blokų gimtadienio skalę, užšifruotų vienu raktu, kol susidūrimai tampa tikėtini. Kiekvienas blokas neša aštuonis baitus, todėl ta pati skalė yra apie 2^35 baitų, arba 32 GiB duomenų po vienu raktu.
Traktuokite tai kaip skalę, o ne kvotą. Susidūrimai yra tikimybiniai, o ar kuris nors ką nors atskleis, priklauso nuo režimo, srauto modelio ir nuo to, ar užpuolikas gali atpažinti ar paveikti aplinkinį atvirą tekstą. Pirmasis baitas po 32 GiB nėra iššifravimo įvykis, o pirmieji 32 GiB nėra sertifikuoti kaip saugūs.
Sweet32 tyrėjai 2016 metais pademonstravo praktines atakas prieš 64 bitų blokų šifrus, įskaitant OpenVPN scenarijų, sąlygomis, kurioms reikėjo stebėjimo ir srauto generavimo. Jų paskelbtos numatytosios vertės ir programinės įrangos versijos yra istorinis kontekstas, o ne jūsų diegimo aprašymas.
Nuspręskite, ar CBC pakartotinis naudojimas čia svarbus
CBC atveju pasikartojantis šifruoto teksto blokas reiškia, kad du atviro teksto blokai skiriasi žinomu ryšiu, nes grandinės XOR panaikina save. Užpuolikas, galintis stebėti šifruotą tekstą ir žinantis ar galintis paveikti vieną iš atvirų tekstų, gali atgauti informaciją apie kitą. Blowfish raktas tam niekada nereikalingas.
Taigi svarbūs klausimai yra, kiek ilgai raktas naudojamas, kiek srauto praeina po juo ir ar kas nors gali stebėti ir valdyti tą srautą. Raktų atnaujinimas sumažina blokų skaičių vienam raktui, bet laiko intervalas nėra baitų riba: užimtas tunelis per tą pačią valandą gali perkelti daug daugiau duomenų nei tuščias. Jei išlaikote senesnę šifrą, ribą išveskite iš konstrukcijos ir faktinio kiekio, o ne iš apvalaus skaičiaus.
Jei išmatuotas kiekis vienam raktui išlieka daug žemiau gimtadienio skalės, poveikis yra mažesnis. Jis vis tiek nėra nulis ir vis tiek yra priežastis planuoti migraciją, o ne nustoti nerimauti.
Pakeiskite šifrą, o ne raktą
Perkelkite paslaugą į palaikomą AEAD šifrą ir patvirtinkite, kad abi šalys, jų versijos ir jų kriptografinės galinės sistemos gali ją suderinti. Ilgesnis Blowfish raktas nekeičia nieko svarbaus, o naujos direktyvos spėjimas viename kliente yra būdas, kaip veikiantis tunelis tampa sugedęs. Išbandykite pakeitimą viename kliente ir viename serveryje prieš liesdami likusį parką. Laikykite seną profilį prieinamą atsukimui, kol nauja šifra praeis visą prisijungimo ciklą.
Pakeitimo metu išlaikykite sertifikatų tikrinimą ir paskyrų autentifikavimą. Jie atsako į skirtingus klausimus: sėkmingas prisijungimas negali praplėsti bloko, o geresnė duomenų šifra nepateisina pasitikėjimo netinkamu serveriu.
Užbaikite patikrinimą dar kartą perskaitydami suderintą šifrą naujoje jungtyje ir patvirtindami, kad sena šifra nebepriimama. Jei šalis ją dar siūlo, migracija nebaigta, ką bebūtų sakoma profilyje kitoje pusėje.