Kulcskérdés: A kulcscsere mint a leggyengébb láncszem
Cikksorozatunk előző cikkében megismerhettük a különböző titkosítási eljárásokat. Kiválaszthatjuk akár a legjobb és legerősebb eljárást is, ha azonban a kulcscsere kérdését nem kezeljük megfelelően, az eredmény egy könnyen visszafejthető adatátvitel lehet. A titkosított adatátvitel folyamán az egyik legfontosabb kérdés a titkos kulcsok kicserélése, maga a kulccsere folyamata.
Kulcscserének nevezzük a titkosításban az olyan eljárásokat, melyek során a rejtjelző kulcsok gazdát cserélnek a felhasználók között, lehetővé téve a titkosító algoritmusok használatát.
Ha Andi és Sanyi titkosított üzeneteket szeretne váltani egymással, mindkettőnek szüksége van olyan eszközre, mely képes a beérkezett üzenetek visszafejtésére és az elküldött üzenetek titkosítására. A titkosítási eljárástól függően ehhez a feladathoz valamilyen információra van szükségük. Ha valamilyen kódot használnak, akkor mindkettőjüknek rendelkeznie kell ugyanazon kódkönyvvel. Ha kódolót használnak, a megfelelő kulcsokra lesz szükségük. Ha a kódoló egy szimmetrikus kulcsú kódoló, mindkettőnek szüksége lesz egyazon kulcs egy-egy példányára. Ha egy nyilvános/privát kulccsal dolgozó asszimetrikus kódolóról van szó, akkor mindkettőnek szüksége lesz a másik nyilvános kulcsára.
A kulcscsere-probléma
A kulcscsere-probléma: hogyan cseréljünk úgy bármilyen jellegű kulcsokat, vagy egyéb információkat, hogy senki más ne férhessen hozzá a kulcs egy példányához? Hagyományosan ehhez egy küldöncre van szükség (csuklójukhoz bilincselt aktatáskával, vagy a nélkül), diplomatatáskára vagy más egyéb biztonságos csatornára. A nyilvános kulcs/privát kulcs algoritmusok előnye, hogy használatukkor a titkosító kulcs (más néven: nyilvános kulcs) nyilvánosságra kerülhet, mivel - legalábbis a jobb algoritmusok esetében - a visszafejtő kulcs (privát kulcs) nélkül senki nem lesz képes visszafejteni az üzenetet.
Elviekben az egyetlen fennmaradó probléma: miként bizonyosodjunk meg arról, hogy a nyilvános kulcs a feltehető tulajdonosához tartozott. Mivel többféle módon is kiadhatja magát az ember egy másik személynek, ez nem egy könnyen megoldható probléma, különösen olyan esetekben nem, mikor a két személy korábban nem találkozott egymással, illetve semmit nem tudnak a másikról.
Diffie-Hellman-féle kulcscsere
1976-ban Whitfield Diffie és Martin Hellman megjelentetett egy kriptogárfiai prokollt (Diffie-Hellman féle kulcscsere), melyben a felhasználóknak lehetőségük van egy biztonságos csatornát létrehozniuk, kulcscsere nélkül, még abban az esetben is, ha az "ellenfél" is figyeli a kommunikációs csatornát. Ugyanakkor a D-H kulcscsere nem orvosolta a másik személyazonosságáról való meggyőződés problémáját.
Habár a D-H kulcsegyeztetés önmagában egy névtelen (nem hitelesített) kulcsegyeztető protkoll, biztosítja az alapot több hitelesített protkoll variációjához, és arra használatos, hogy biztosítsa a tökéletes továbbítási biztonságot a TLS ephemeral módjaihoz. A D-H protokollt korábbi cikkünkben már részletesebben is bemutattuk.
RSA algoritmus
Az RSA egy nyilvános kulcsú titkosítási algoritmus. Ez az első algoritmus, mely aláíráshoz és titkosításhoz is megfelelő, egyike a nyilvános kulcsú kriptográfiában történt nagy előrelépéseknek. Az RSA széles körben használatos elektronikus kereskedelmi protokollokban, vélhetően biztonságos a kellően hosszú kulcsoknak és a korszerű implementációknak köszönhetően.
Az RSA algoritmus három lépésből áll: kulcsgenerálás, titkosítás, visszafejtés.
Kulcsgenerálás
Az RSA nyilvános és privát kulcspárokat használ. A nyilvános kulcsot bárki ismerheti, és az üzenetek titkosítására használják. Azon üzeneteket, melyeket nyilvános kulccsal titkosítottak, csak a privát kulccsal lehet visszafejteni. A kulcsok az RSA algoritmushoz az alábbi módon generálódnak:
- Válasszunk két prímszámot, melyek legyenek p és q
- Számoljuk ki n-t: n =pq
- Az n-et mind a nyilvános mind privát kulcs modulusaként használjuk
- Számoljuk ki a totient-et:
- Válasszunk ki egy e egész számot úgy, hogy
és e-nek és
-nek nincs közös ösztója az 1-en kívül
- Az e lesz a nyilvános kulcs exponense
- Keressük meg a d-t amely megfelel a következő egyenletnek:
- A d lesz a privát kulcs exponense
Megjegyzés a lépésekkel kapcsolatban:
- Első lépés: biztonsági okok miatt p és q egész számokat egyaránt véletlenszerűen válasszuk, bithosszúságuk legyen egyforma.
- Második lépés: prím egészeket könnyen találhatunk egy prímteszt használatával.
- Harmadik lépés: PKCS#1 v2.0 specifikusan használjunk
, ahol lcm a legkisebb közös osztó
helyett.
- Negyedik lépés: válasszuk ki e-t viszonlag alacsony Hamming súllyal. A kis méretű nyilvános exponsensek (pl. e=3) alkalmanként magasabb biztonsági kockázathoz vezethetnek.
A nyilvános kulcs az n modulusából, és a publikus e exponensből áll. A privát kulcs az n modulusból és a privát d exponensből áll – és ezt titokban kell tartani.
- Hatékonysági szempontból a következő értékeket előre ki lehet számítani, és tárolni lehet a privát kulcsban:
- P és q: a prímszámok melyek a kulcs generáláshoz kellettek,
,
.
Titkosítás
A átadja a nyilvános kulcsát (n, e) B-nek, míg a privát kulcsot titokban tartja. Ezek után B egy M üzenetet szeretne küldeni A-nak. Először az M-et egy egész számmá alakítja ( 0<m<n) mégpedig egy előzőleg egyeztetett visszafordítható prokoll, a "padding scheme” használatával. Ezután kiszámolja a
üzenetet, és végül B elküldi c-t A-nak.
Visszafejtés
“A” visszafejtheti az m üzenetet a c-ből, a saját d privát exponensének használatával, a következő számítás szerint:
M ismeretében, az eredeti üzenet (M) is visszaállítható.
A fenti visszaállítási algoritmus működését a következő összefüggések igazolják:
Mivel .
A választás
Célszerűnek találtuk, ha a felhasználónak lehetősége van megválasztani a kulcscsere módját, ezért jó megoldás, ha több titkosítási módszert is elérhetővé teszünk. A mi esetünkben ez négy különböző szintent jelent:
- Nulladik szint - nincs titkosítás
- Első szint – szimmetrikus titkosítás, használat előtt biztonságos módon kicserélt szimmetrikus kulccsal
- Második szint – hibrid szimmetrikus és aszimmetrikus titkosítás használata
- Harmadik szint – hibrid szimmetrikus és aszimmetrikus titkosítás használata, járukékos session kulccsal
A választott megoldásban a titkosított hívás felépítéséhez feltétlenül szükséges a nulladik – titkosítatlan – szint. Ekkor felépül a media stream kapcsolat, amely a tikosított csatorna, és az ehhez kapcsolódó kézfogás szállítócsatronája lesz.
1-es szintű titkosítás esetén a két felhasználó személyesen kicseréli egymás között a titkos, szimmetrikus kulcsot. A módszer előnye, hogy használata egyszerű, nincs szükség komolyabb ismeretekre a titkosított kommunikáció megkezdéséhez. További előnye, hogy akár személyesen is meggyőződhet a felhasználó arról, hogy a titkos szimmetrikus kulcsot a megfelelő féltől kapta. A titkosítási szint hátránya, hogy a szimmetrikus kulcs megszerzése esetén harmadik fél képes lehet a beszélgetés lehallgatására, sőt akár a két fél valamelyikének nevében történő kommunikációra is. A titkosítási eljárás lehet AES és Blowfish, mégpedig 128 és 448 közötti kulcsméretekkel.
2-es szint esetén egy kétkulcsos, asszimetrikus titkosítást használunk a felek azonosítására, és itt csak a publikus kulcs kicserélésére van szükség. Ennek ismeretében megtörténhet a felek azonosítása és a menet közben generált szimmetirkus kulcs biztonságos továbbítása is. A módszer használatának előfeltétele, hogy a felhasználók a nyilvános kulcsokat előre kicseréljék bármilyen titkosítatlan módon. Az egyetlen dolog, amelyre ügyelni kell, hogy a partner nyilvános kulcsának átvételekor győződjünk meg: valóban a partnertől kaptuk-e?
A második szint fő előnye, hogy alkalmas a távoli fél azonosítására is. Hátránya, hogy a kulccsere folyamata kicsit nehezebb.
3-as szint esetén a használat azonos a 2-es szinttel, azonban a felhasználó meggyőzésere további biztonsági elemet építettünk be, egy session kulcs formájában. A 2-es szint kódolásának kimenetén (vagyis az aszimmetrikus adatátvitellel átadott szimetrikus kulccsal elvégzett titkosított stream kiemenetén) egy további hash-elést végzünk el a falhasználó által beírt szöveges adatsor segítségével. Ennek hatására a távoli felhasználó csak akkor tudja megérteni a beszédhangot, ha az azonos adatsort szintén beírja a 3-as szintű titkosítás rejtjelező egységébe.
Következtetés
A fentieket figyelembe véve elmondható, hogy a titkosítási algoritmusok legérzékenyebb pontja a kulcscsere, valamint a kulcs megszerzését követően ennek biztonságos megtartása. Legyen szó akár egy szimmetrikus titkosítás kulcsáról, akár egy aszimmetrikus titkosítás privát kulcsáról, a kulcs tárolása biztonsági szempontbó döntő jelentőségű.
Ugrás a cikksorozat hatodik részére...
Jelen publikáció eredményei a GOP-1.1.1-08/1-2008-0015 számú, “Biometrikus azonosításon alapuló titkosított hangátvitelt megvalósító, szolgáltató-független, hordozható távközlési végberendezés prototípusának kifejlesztése” című projekt keretében került kidolgozásra.
Kapcsolat: zoltan.hegyes@bh-bess.com