Könnyű titkosítás Hogyan lehet integrálni a biztonságos titkosítást
A titkosítás integrálása saját alkalmazásba a fejlesztők általános vágya. Ez a cikk rövid bevezetést kíván nyújtani ehhez a hihetetlenül összetett témához. Sajnos nincs ezüst golyó az adatok biztonságos titkosításához.

Titkosítás, de helyes
Mielőtt elgondolkodna azon, hogyan kell technikailag titkosítani és mely algoritmusokat kell használni, vissza kell lépnie. A biztonságos titkosítás beépítése a saját alkalmazásába nem csupán technikai, hanem inkább koncepcionális kérdés.
Az első megválaszolandó kérdés: Mely adatokat akarom kitől megvédeni? A válasz erre a kérdésre az abszolút alap, amely nélkül nem lehet biztonságos titkosítási módszert használni.
Egyrészt egyértelművé kell tenni, hogy mely adatokat kell titkosítani. Ez elsőre egyszerű kérdésnek tűnik, de egyáltalán nem az. Példa: Online boltot vagy CRM rendszert fejleszt, és titkosítani szeretné az ügyfelek adatait. Eleinte remekül hangzik. De hogyan szándékozik akkor feldolgozni ezeket az adatokat? Hogyan szeretné újra megtalálni ezeket az adatokat - a titkosított adatok keresése eleinte nem lehetséges.
Kitől akarom megvédeni az adatokat?
Miután meghatározta, mely adatokat kell titkosítani, felmerül a következő kérdés: kitől akarom megvédeni az adatokat?
A következő példák ennek a kérdésnek a bemutatására szolgálnak. Védeni szeretné az alkalmazás adatbázisának hozzáférési adatait. A forgatókönyv szerint a támadó gyenge pontot talál az alkalmazásában, és el tudja olvasni a helyi adatokat. Ha a konfiguráció letöltésére használja, akkor legalább nem szabad közvetlenül rendelkeznie az adatbázis-hozzáférési adatokkal. Ezért egyértelmű, hogy a titkosításnak és a visszafejtésnek a szerver oldalon kell történnie. Hozzáférési adatok nélkül az alkalmazás nem férhet hozzá az adatbázis-kiszolgálóhoz.
Egy másik példa: Meg akarja védeni az adatokat a rendszergazdáktól, mert biztonságos üzenetküldő szolgáltatást működtet. Ez azt jelenti, hogy a titkosításnak és a visszafejtésnek meg kell történnie az ügyfélen. Ebben az esetben nem segít egy alternatív megoldás, amint azt egy penetrációs tesztben már láttam, hogy az adatokat elküldjük egy szervernek, és ez aztán titkosít vagy visszafejt. Az adatok egyszerű szöveggel érhetők el a szerveren, még akkor is, ha csak a fő memóriában vannak.
Fontos kérdések a megfelelő titkosítási architektúra megtalálásához
A legfontosabb kérdéssel már foglalkoztunk: "Mely dátumokat"és kinek a. A "Miért"Ezután ismét kapcsolódik a" kinek ". Ez felhasználható a pontosításra "Hol„A titkosításnak meg kell történnie.
Miután mindez tisztázott, elkötelezheti magát a technikai megvalósítás, vagyis a "Mint".
A titkosítás biztonságosan megvalósítva
Mint már említettük, a titkosítás technikai részleteit ebben a cikkben tárgyaljuk. A kulcskezelés egy különálló, nagyon összetett téma, amelyet egy következő blogcikk tárgyal majd.
Ebben a részben először azt szeretném kérni Öntől: Ne készítse el saját titkosítási módszerét. Bruce Schneier egyszer szépen összefoglalta (ma Schneier-törvény néven ismert), amelyet nagyon szabadon lefordítanék:
Bárki kifejlesztheti a titkosítást, amely annyira okos, hogy maga sem tudja megtörni. A kihívás egy olyan fejlesztése, amelyet hosszú évekig tartó elemzés után sem tud megszakítani.
Sajnos már sok olyan auditon volt részünk, amelyek során az ügyfelek kifejlesztették saját kriptorendszerüket, és sajnos még egyszer sem érdemelte ki ezt a nevet.
A második fontos pont az, hogy ha egy meglévő algoritmus használata mellett dönt, ne saját maga hajtsa végre azt. Szinte lehetetlen elképzelni az összes mellékcsatorna-támadást és egyéb támadást, amely használhatatlanná teheti a titkosítást.
A só a levesben: libsodium
Szerencsére manapság vannak olyan könyvtárak, amelyek rengeteg munkát végezhetnek az Ön számára a titkosítás használatával kapcsolatban. A Daniel J. Bernstein, Tanja Lange és Peter Schwabe körüli csapat nagy lépést tett, amikor elindították a NaCl (ejtsd: só) projektet. A NaCl számos olyan funkciót biztosít, amelyekre szükség van egy biztonságos kriptográf rendszerhez. Ennek alapján fejlesztették ki a "libsodium" könyvtárat, amely hordozhatóvá és szinte az összes elérhető programnyelv számára hozzáférhetővé teszi. A nagyon megengedő ISC licenc minden projektben lehetővé teszi a felhasználást, még akkor is, ha ezek kereskedelmi jellegűek (figyelem, egyes programozási nyelvek burkolói különböző licenceket használhatnak).
Mit tesz a libsodium az Ön számára
Még akkor is, ha van alapvetően biztonságos algoritmus, óriási kihívást jelent a biztonságos végrehajtása. Egyrészt vannak mellékcsatornás támadások. A támadás nem közvetlenül a titkosításon megy végbe, de megpróbálnak következtetéseket levonni az egyszerű szövegről vagy a kerülő utakon használt kulcsról. A libsodium már figyelembe veszi ezt az opciót, ezért a fejlesztőknek nem kell aggódniuk emiatt.
Az olyan nehéz kérdéseket is, mint a kitöltés és a hitelesítés, a libsodium teljesen kezeli. A blokk titkosításoknál mindig szükséges a kitöltés, mivel ezek csak egész blokkokban működhetnek. Például AES esetén ezek mindig 16 bájtos blokkok. Ha a titkosítandó adatok csak 8 bájt hosszúak, a fennmaradó 8 bájtot ki kell tölteni. Egy másik nehézség a titkosítás hitelesítése. Ebben az összefüggésben a hitelesítés azt jelenti, hogy felismerhető a rejtjelszöveg (a titkosított adatok) manipulációja. Az AES például nem kínál integrált hitelesítést, ezt csak a GCM titkosítási móddal adjuk hozzá.
Kombinálva: A kitöltéssel kapcsolatos problémák és a hitelesítés hiánya oda vezethet, hogy a sima szöveget vissza lehet állítani, mivel lehetséges a kitöltő orákulum.
Egyébként ez csak egy kis részlet abból, amit rosszul tehet a kriptográfiával. Szerencsére a libsodium gondoskodik az összes titkosítási kérdésről.
A libsodium telepítése
A libsodiumot minden platformon maga állíthatja össze. Kész Windows-fájlok is rendelkezésre állnak. Sajnos ezek nincsenek digitális aláírással, ezért magának kell ellenőriznie a DLL-eket.
Kár, hogy a fejlesztők valóban aláírják a PGP-t, de a kulcs csak a kezdőlapon található meg, és mások nem hitelesítették. Ellenkező esetben a Minisign eszköz továbbra is használható, amikor megbízni kell a kezdőlapon megadott kulcsban.
Fontos azonban, hogy az ellenőrzés megtörténjen! A legjobb kriptográfiai könyvtár természetesen nem használható, ha elkészült, és például rossz véletleneket generál, vagy egy másik hátsó ajtót integrál.
A többi programozási nyelv összes kötése libsodiumon alapul, vagyis használja a DLL-t vagy a megosztott objektumot. A fájlt ezért használat előtt integrálni kell. Ennek működése pontosan különbözik a programozási nyelvtől függően, de az egyes projektekben nagyon jól leírják.
Most mi következik?
A következő lépés az, hogy megismerkedj a megfelelő programozási nyelv kötéseivel, és játssz egy kicsit. Rövid megjegyzés: ha az egyik kötés dokumentációja rossz, csak vegyen egyet. Például a Java-ban sok könyvtár van, de némelyiket jobban karbantartják és mindenekelőtt dokumentálják.
Alapvetően azonban a következő megjegyzéseket szeretném tenni:
Ne hagyjon semmit a véletlenre, vagy legalábbis?
A jó titkosítás kriptográfiailag biztonságos esélyt igényel. A libsodium az operációs rendszer belső funkcióit használja véletlenszerű adatok előállításához, ezért bízhat bizalommal a véletlenszerű függvényben (pl. randombytes_buf).
Megjegyzések a szimmetrikus titkosításról
Szimmetrikus titkosítással meg kell mondani, hogy nem szabad kulcsot használni többször. A nonce - amely "nem egyszer" -ből származik - csak egyszer használható (!). A véletlenszerű függvény használatával hozzon létre újra és újra egy új nonce-t.
Ha a magas szintű funkciót használja a titkosításhoz, akkor a libsodium az XSalsa20 Stream Cipher titkosításhoz, a Poly1305 pedig a hitelesítéshez használ 2017. októberétől. Lehetőség van az AES-GCM használatára is. Ez előny lehet, ha teljesítenie kell bizonyos feltételeket. Ezt az algoritmust nem használják standardként, mert csak akkor érhető el, ha a CPU támogatja az AES-NI utasításokat.
Aszimmetrikus titkosítás
Az aszimmetrikus titkosítással a libsodium funkciókat kínál a kulcspárok előállításához, és - mint fentebb említettük - gondoskodik a kitöltésről és a hitelesítésről. A használt algoritmusok (2017 októberétől): X25519 a kulcshoz, XSalsa20 adatfolyam titkosítás titkosításhoz és Poly1305 hitelesítéshez.
Hash
A libsodium által kínált hash funkciók lehetővé teszik az egyszerű hash-t, vagyis ugyanaz a bemenet ugyanahhoz a kimenethez vezet, vagy a HMAC-szcenárióhoz tartozó jelszóval kombinálva. Az alkalmazott algoritmus (2017 októberétől) a BLAKE2b az SHA-3 egyik döntőse.
Jelszó
Erről a jelszavak biztonságos tárolásáról szóló cikkünkben írtunk. Szerencsére a libsodium már rendelkezik megfelelő funkciókkal a biztonságos jelszó tároláshoz. A standard megvalósításban a jelenlegi libsodium verzió az Argon2-t használja.
kilátások
A következő hetekben részletesebben megvizsgáljuk ezt a kritikus kérdést. A cél az, hogy megtanulja, hogyan kell a libsodiumot a legjobban használni, és hogy valóban integrálhatja a biztonságos titkosítást az alkalmazásába. Ha ez egy kicsit akutabb, természetesen közvetlenül tanácsot is adhatunk Önnek. Várjuk visszajelzését is!