[[oktatas:programozás|< Programozás]] ====== Titkosítás ====== * **Szerző:** Sallai András * Copyright (c) 2024, Sallai András * Szerkesztve: 2024 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== A titkosításokról ===== * egyirányú - hash algoritmusok * két irányú Itt most a hash algoritmusokkal foglalkozunk, amit jelszavak titkosításához használunk. A hash algoritmusok valójában egy kivonatot képeznek az eredeti tartalomból. A kivonat mérete a tartalom méretétől függetlenül mindig ugyanakkora. Az első hash algoritmusok egyike volt az md5, amit nagyon sokáig használtak. Használata ma már erőteljesen ellenjavallott. ===== A hash végső formája ===== A hash függvénnyel előállított (titkosított) bájt sorozatot át szokás alakítani nyomtatható karakterekké. Ez lehet hexa kimenet, de gyakrabban használt a base64 kódolás. Lehetőségek: * hexa kimenet * base64 A hexa kódolás és a base64 nem titkosító algoritmusok! ===== Sózás és borsozás ===== Mit jelent a sózás és borsozás? Tegyük fel, hogy van egy jelszavunk, például "titok". A titok szót nem önmagában titkosítjuk, hanem megsózzuk, megborsozzuk, ami azt jelenti, hogy véletlenszerű karakterek teszünk elé és vagy mögé. | jelszó | titok | | só | aaaaaaaaa | | bors (alkalmazás kulcs) | bbbbbbbbb | A só és a bors mérete a gyakorlatban nagyobb méretű kell legyen, és véletlenszerű karakterekből kell álljon. A borost sok helyen úgy ismerik, hogy alkalmazás kulcs vagy APPY_KEY. Ha a fenti táblázatban használható jelszót, sót és boros használjuk, akkor például ezt titkosítjuk le: aaaaaaaaatitokbbbbbbbbb De nem tiltott egyéb variációk megvalósítása: * aaaaaaaaatitokaaaaaaaaabbbbbbbbb * bbbbbbbbbaaaaaaaaatitokaaaaaaaaabbbbbbbbb * stb. ==== Tárolás ==== A **sót** mindig a **jelszó mellett** tároljuk. Minden egyes jelszóhoz külön só tartozik. A **bors** az alkalmazáshoz tartozik. Egy alkalmazás egy borsot tartalmaz. Jellemzően az alkalmazás **beállító állományában** helyezzük el. Elterjedt elnevezések a beállítófájlokban: APP_KEY, APP_SECRET. ==== Méretek ==== * A sózáshoz ajánlott min. 16 bájt, de jobb 32 bájt. * A bors legalább 14 bájt. ==== Iterálás ==== A kivonatolást (titkosítást) érdemes többször elvégezni, több ciklusban. Lehet például 1000. ===== UI követelmények ===== * Legyen másolható * Legyen a láthatóság ki és bekapcsolható ===== Néhány algoritmus ===== * argon2 * PBKDF2 * bcrypt ===== Elfogadott jelszavak ===== Ajánlott: * minimum 8 karakter * maximum 64 karakter A 64 karakternél hosszabb jelszavak értelmetlenek. Havonta jelszó változtatás nem ajánlott. Annak eredménye, hogy a felhasználók könnyen hozzáférhető teszik saját maguknak, például monitorral teszik. Érdemes egy listát összeállítani a visszautasítandó jelszavakról. Az entrópiát követeljük meg, de nem kell túlzásba vinni (kis- és nagybetű, szám stb). A jelszó emlékeztetőt a biztonság miatt a nem ajánlott kategória.