Létezésének első pár évtizedében a számítógép-hálózatokat elsődlegesen egyetemi kutatók elektronikus levelek küldésére, illetve hivatalokban nyomtatók megosztására használták. Ilyen feltételek mellett a biztonság kérdésének nem sok figyelmet szenteltek. Napjainkban azonban, amikor hétköznapi emberek milliói használják a hálózatokat banki műveletek közben, vásárláshoz és adóbevallásuk elkészítéséhez, a hálózati biztonság kérdése komoly problémaként dereng fel a láthatáron. A most következő részekben a hálózati biztonságot több nézőpontból fogjuk megvizsgálni, megmutatva számos buktatóját, és ismertetve azokat az algoritmusokat és protokollokat, amelyek alkalmazásával a hálózatok biztonságosabbá tehetők.
A biztonság igen tág fogalom, és a támadási módok széles skálája elleni védekezést tartalmazza. Legegyszerűbb formája, amikor biztosítani szeretnénk, hogy kíváncsi emberek ne olvashassák el, és ami még rosszabb, ne módosíthassák különböző címzettekhez küldött üzeneteinket. Tartalmazza azokat az eseteket, amikor felhasználók olyan távoli szolgáltatásokat szeretnének elérni, amelyekhez nincs joguk. Foglalkozik azzal a kérdéssel, hogy hogyan döntsük el a következő, látszólag az adóhatóságtól érkezett üzenetről, hogy valóban az adóhatóságtól és nem a maffiától jött: „Fizess péntekig, különben…”. A biztonság azokra a problémákra is választ keres, hogyan lehet azonosítani az elfogott és újra lejátszott üzeneteket, valamint azokat a személyeket, akik tagadják, hogy bizonyos üzeneteket elküldtek.
A legtöbb biztonsági problémát rosszindulatú emberek szándékosan okozzák, hogy előnyhöz jussanak, a figyelmet magukra vonják vagy másoknak kárt okozzanak. A leggyakoribb elkövetők közül mutat be párat a 8.1. ábra. Az ábra alapján világosnak kell lennie: egy hálózat biztonságossá tételéhez sokkal több kell, mint pusztán a programhibák kijavítása. Gyakran intelligens, specializálódott, megfelelő alapokkal rendelkező támadók eszén kell túljárni. Az is nyilvánvaló, hogy az egyszerű alkalmi támadókat megfékező intézkedések nem jelentenek számottevő akadályt a komoly betolakodóknak. A rendőrségi feljegyzések pedig azt mutatják, hogy a legtöbb károkozó támadást nem a telefonvonalat lehallgató kívülállók, hanem sértett alkalmazottak követik el. A biztonsági rendszereket tehát ennek tudatában kell megtervezni.
A hálózati biztonsággal kapcsolatos problémák nagyjából négy, szorosan összefüggő területre oszthatók: titkosság (secrecy vagy confidentiality), hitelesség (authentication), letagadhatatlanság (nonrepudiation) és sértetlenség (integrity). A titkosság azzal foglalkozik, hogy az információ ne juthasson illetéktelen kezekbe. Általában ez az, ami az embereknek a hálózati biztonságról az eszükbe jut. A hitelesség abban segít, hogy meggyőződjünk arról, kivel állunk kapcsolatban, mielőtt érzékeny adatokat fednénk fel vagy üzleti megállapodást kötnénk. A letagadhatatlanság aláírásokkal foglalkozik: hogyan bizonyítható, hogy ügyfeled elektronikus úton 10 millió darab bal kezes bokszkesztyűt rendelt 89 centért, amikor később azt állítja, hogy az ár 69 cent volt? Vagy az is lehet, hogy azt állítja, soha nem küldött semmilyen megrendelést. Végül, hogyan bizonyosodhatunk meg arról, hogy a kapott üzenet valóban az, amelyiket elküldték, nem pedig egy a rosszindulatú ellenfél által a továbbítás alatt módosított vagy kitalált küldemény.
Mindezek a kérdések (a titkosság, a hitelesség, a letagadhatatlanság és a sértetlenség biztosítása) a hagyományos rendszerekben is jelentkeznek, azonban némi eltéréssel. A titkosságot és a sértetlenséget ajánlott levéllel és az iratok lezárásával oldják meg. Egy postavonat kirablása ma már jóval nehezebb, mint Jesse James idején volt.
Ugyanígy, az emberek többnyire meg tudják különböztetni az eredeti dokumentumot a fénymásolattól, ami gyakran lényeges. Próbaképpen készíts másolatot egy eredeti csekkről. Próbáld meg beváltani a csekket hétfőn a bankodban. Azután kedden próbálkozz a fénymásolattal. Vizsgáld meg a bank viselkedésében beállt változást. Az elektronikus csekkeknél az eredeti és a másolat megkülönböztethetetlenek. Időbe telhet, míg a bankok használni kezdik ezeket.
Az embereket az arcuk, hangjuk és kézírásuk alapján azonosítunk. Aláírásunk bizonyítéka lehet a céges levélpapírra tett kézjegyünk, domború bélyegző vagy más egyéb. A hamisítványt többnyire leleplezik a kézírás-, papír- vagy festékszakértők. E lehetőségek közül egyik sem áll rendelkezésünkre az elektronikus világban. Nyilvánvalóan más megoldásokat kell találni.
Mielőtt maguk a módszerek tárgyalását megkezdenénk, érdemes egy kis időt szánni arra, hogy meghatározzuk, vajon mindegyik protokollréteghez hozzátartozik-e a hálózati biztonság. Könnyen megeshet, hogy nem helyezhető kizárólag egyetlen helyre. Minden réteg hozzájárulhat valamivel. A fizikai rétegben a vezeték megcsapolását meghiúsíthatjuk a vezetéknek lepecsételt és argon gázzal feltöltött csőbe helyezésével. Minden kísérlet, amelynek során a csőbe szeretnének hatolni, a gáz elszökésével, és így nyomáscsökkenéssel jár, ami riasztást válthat ki. Néhány katonai rendszerben használják ezt a módszert.
Az adatkapcsolati rétegben kétpontos vonalon haladó kereteket kódolással titkosíthatjuk, amikor elhagyja az egyik gépet, és a titkosítást visszakódolhatjuk, visszafejthetjük, amikor a keret a másikra megérkezik. Minden lépést elvégezhetünk az adatkapcsolati rétegben anélkül, hogy a felsőbb rétegek tudnának róla. Ennek a megoldásnak akkor jelentkeznek a korlátai, amikor a csomagoknak több útválasztón kell keresztüljutniuk, mivel ekkor mindegyik eszközön vissza kell kódolni a csomagot, sebezhetővé téve az útválasztón belüli támadásokkal szemben. Emellett nem teszi lehetővé, hogy csak egyes kapcsolatokat védjünk (például online vásárlást bankkártyával), másokat pedig nem. Mindezek ellenére az adatkapcsolati titkosítás (link encryption), ahogy a fenti módszert nevezik, könnyen használható bármilyen hálózaton, és gyakran hatásos.
A hálózati rétegben tűzfalakat telepíthetünk, hogy egyes csomagokat a hálózaton belül, vagy másokat azon kívül tartsunk. Az IP-s biztonsági funkciók szintén ebben a rétegben működnek.
A szállítási rétegben teljes összeköttetéseket titkosíthatunk, végponttól végpontig, vagyis alkalmazási folyamattól alkalmazási folyamatig. A maximális biztonság eléréséhez ilyen végponttól végpontig terjedő eljárásokra van szükség.
Végül olyan kérdések is vannak – ilyen például a felhasználók hitelesítése vagy a letagadhatatlanság –, melyeket csak az alkalmazási rétegben lehet kezelni.
Mivel a biztonság egyik rétegbe sem illik igazából, nem illett bele a könyv egyik fejezetébe sem, ezért kapott egy saját fejezetet.
Jóllehet, ez a fejezet hosszú, műszaki jellegű és alapvető fontosságú, ugyanakkor pillanatnyilag nem teljesen a tárgyhoz tartozónak számít. Jól dokumentált ugyanis az a tény, hogy a legtöbb biztonsági hiba, például a bankokban, sokkal inkább a hanyag biztonsági eljárások és a nem hozzáértő alkalmazottak, valamint a megvalósításkor elkövetett számos hiba kövekezménye, amelyek lehetővé teszik, hogy illetéktelen felhasználók távolról betörjenek, továbbá az ún. social engineering[42] támadások következménye, ahol az ügyfeleket trükkel ráveszik arra, hogy kiadják bankszámlájuk részleteit. Ezek a biztonsági problémák sokkal gyakoribbak, mint az, hogy ügyes bűnözők lehallgatják a telefonvonalakat és azután visszafejtik a titkosított üzeneteket. Ha valaki simán besétálhat bármelyik bankfiókba egy utcán talált bankkártyával, azt állítva, hogy elfelejtette a PIN-kódját, és erre ott rögtön kap egy újat (a jó ügyfélkapcsolatra törekvés nevében), akkor a világ összes rejtjelezésével sem lehet megelőzni a visszaéléseket. E tekintetben Ross Anderson [2008a] könyve igazi leleplezésnek minősül, mivel számos iparágból több száz biztonsági hibára ad példát, melyek közül szinte mind – finoman szólva – a hanyag üzleti gyakorlatnak vagy nemtörődömségnek a következménye. Mindazonáltal az a műszaki alap, amelyre az e-kereskedelem épül, ahol mindezeket a dolgokat jól csinálják, a kriptográfia.
A fizikai rétegbeli biztonságot leszámítva szinte minden biztonsági eljárás kriptográfiai elveken alapszik. A biztonság tárgyalását ennélfogva mi is a kriptográfia részletesebb tanulmányozásával kezdjük. A 8.1. szakaszban áttekintjük a főbb alapelveket, a 8.2–8.5. szakaszokban pedig a kriptográfiában használatos alapvető algoritmusok és adatszerkezetek közül vizsgálunk meg néhányat. Ezt követően részletesen is megnézzük, hogyan lehet ezeket az elveket a gyakorlatban is alkalmazni a hálózati biztonság elérésére. A sort néhány rövid, a technikáról és a társadalomról szóló gondolattal zárjuk.
Mielőtt nekivágnánk, még valamit meg kell említenünk: mi az, amit nem tárgyalunk? Nos, igyekeztünk nem belemélyedni az operációs rendszerek és az alkalmazások biztonsági kérdéseibe, és pusztán a hálózatok területére összpontosítani, bár gyakran nehéz meghúzni a határt. Könyvünkben nem esik szó például a biometriai alapú felhasználó-hitelesítésről, a jelszavas biztonságról, puffer-túlcsordulásos támadásokról, trójai falovakról, a bejelentkezéskori megtévesztésről, kódbeszúrásról, vírusokról, férgekről és hasonlókról. Ezeket témákat hosszasan tárgyalja a Modern operációs rendszerek [Tanenbaum, 2007] 9. fejezete. Az érdeklődő olvasó ugyanebben a könyvben a biztonság rendszervonatkozású kérdéseiről is olvashat. Most pedig kezdjük meg utazásunkat!
A kriptográfia (cryptography) elnevezés a görög „titkos írás” szavakból ered. Hosszú és színes története évezredekre nyúlik vissza. Ebben a szakaszban csak a legfontosabb részletei közül vázolunk fel párat, hogy háttér-információt biztosítsunk a későbbi szakaszokhoz. Aki a kriptográfia teljes történelmére kíváncsi, annak ajánljuk Kahn [1995] könyvét. A jelenleg használt legmodernebb biztonsági és kriptográfiai algoritmusokról, protokollokról és alkalmazásokról Kaufman és mások [2002] műve ad átfogó tájékoztatást. A biztonsági kérdések matematikai megközelítésével Stinson [2002] művében, egy kevésbé matematikai megközelítéssel pedig Burnett és Paine [2001] írásában találkozhatunk.
A szakértők különbséget tesznek a rejtjel és a kód között. A rejtjel (cipher) egy karakterről karakterre vagy bitről bitre történő átalakítást takar, mely nem veszi figyelembe az üzenet nyelvi szerkezetét. Ezzel szemben a kód (code) egy szót helyettesít egy másik szóval vagy szimbólummal. A kódok ma már nem használatosak, pedig igazán dicsőséges múltra tekinthetnek vissza. A valaha kidolgozott legsikeresebb kódot az amerikai hadsereg használta a II. világháborúban a Csendes-óceánon. Ők egész egyszerűen egymással beszélő navajo indiánokat állítottak hadrendbe, akik sajátos navajo szavakat használtak a katonai kifejezésekre, például chay-dagahi-nail-tsaidi-nak (szó szerint: teknősölő) mondták a páncéltörő fegyvert. A navajo nyelv erősen tonális, rendkívül bonyolult, és nincs írott formája. Japánban ráadásul senki nem tudott róla semmit.
1945 szeptemberében a San Diego Union a következőket írta a kódról: „A japánok három éven át a tengerészgyalogosok minden partraszállásánál különös, kotyogó hangokra lettek figyelmesek, melyekbe más hangok is vegyültek: ezek egy tibeti szerzetes kiáltására és a forralt víz kitöltésének hangjára emlékeztettek.” A japánok sosem fejtették meg a kódot, sok Navajo „kódbeszélőt” pedig magas katonai érdemrenddel tüntettek ki kiemelkedő szolgálatáért és bátorságáért. Az amerikaiak csendes-óceáni győzelmeiben döntő szerepet játszott az a tény, hogy az amerikaiaknak sikerült feltörniük a japán kódot, a japánok viszont sohasem tudták feltörni a Navajo-kódot.
Eredetileg négy csoport alkalmazta és vitte tovább a kriptográfia mesterségét: a hadsereg, diplomáciai testületek, naplóírók és a szerelmesek. Ezek közül a hadseregnek volt a legfontosabb szerepe, és ez alakította ki leginkább ezt a területet. A katonai szervezetekben a titkosítandó üzeneteket régebben alacsonyan fizetett hivatalnokok kezébe adták, hogy azokat kódolják és küldjék tovább. Csupán az üzenetek óriási mennyisége is megakadályozta, hogy ezt a munkát pár elit specialista végezze el.
A számítógépek eljöveteléig a kriptográfia egyik legnagyobb korlátját a kódolást végző tisztségviselők azon képessége jelentette, hogyan képesek egyszerű eszközökkel, gyakran háborús körülmények között elvégezni a szükséges transzformációkat. További nehézséget okozott az egyik titkosító módszerről egy másikra való gyors áttérés, mivel ez sok ember átképzését vonta maga után. Mindezek ellenére a veszély, amit egy titkosító ügynök elfogása jelentett, szükségessé tette, hogy ilyen esetekben azonnal megtörténhessen a módszerbeli váltás. Ezek az egymásnak ellentmondó követelmények hozták létre a 8.2. ábrán látható modellt.
A kódolandó üzeneteket, melyeket nyílt szövegnek (plaintext) hívunk, egy olyan függvénnyel transzformálunk, melynek paramétere egy kulcs (key). A titkosító eljárás kimenetét, melyet titkosított szövegnek (ciphertext) hívunk, továbbítjuk gyakran rádió vagy futár segítségével. Feltételezzük, hogy az ellenség vagy a támadó hallja és pontosan lemásolhatja a teljes, titkosított szöveget. Ennek ellenére, az eredeti címzettel ellentétben, a támadó (intruder) nem ismeri a visszakódoláshoz szükséges kulcsot, és így nem képes az üzenet egyszerű visszaalakítására. Néha a támadó nemcsak hallhatja a kommunikációs csatornát (passzív támadó), hanem a felvett üzeneteket később visszajátszhatja, saját üzeneteit indíthatja útnak, vagy egyébként valódi üzeneteket változtathat meg, mielőtt azok a címzetthez megérkeznének (aktív támadó). A titkosírás megfejtésének mesterségét kriptoanalízisnek (cryptoanalysis) hívjuk. A titkosító eljárások kifejlesztésének tudománya (kriptográfia) és azok feltörése (kriptoanalízis) együttesen a kriptológia (cryptology) témakörét alkotják.
Gyakran hasznos lesz a továbbiakban, ha egységes jelölést vezetünk be a nyílt és titkosított üzenet, valamint a kulcs jelölésére. A kifejezés azt jelenti, hogy a P nyílt szöveget a K kulcsot használva kódoljuk, és így a C titkosított üzenetet kapjuk. Hasonlóan a
a C üzenet nyílt szöveggé történő visszakódolását reprezentálja. Ezek után nyilvánvaló, hogy:
A jelölés azt sejteti, hogy az E, valamint a D műveletek tulajdonképpen matematikai függvények, ami így is van. Az egyedüli trükk, hogy mindkettő kétparaméteres függvény, és az egyik paramétert (a kulcsot) alsó indexként tüntettük fel normál paraméter helyett, hogy élesen megkülönböztessük az üzenettől.
A kriptográfia alaptörvénye szerint feltételezzük a kriptoanalitikusról, hogy ismeri a kódoláshoz használt módszer algoritmusát. Más szavakkal, a kódfejtő pontosan tudja, hogy a titkosító (kódoló) eljárás (E) és a dekódoló eljárás (D) (lásd 8.2. ábra) hogyan működik. Egy új módszer kifejlesztéséhez, teszteléséhez és telepítéséhez szükséges erőfeszítések, melyeket akkor kell tennünk, ha módszerünket kitalálták, vagy úgy gondoljuk, hogy kitalálták, minden esetben célszerűtlenné tette, hogy a módszert titokban tartsuk, és feltételezzük azt, hogy valóban titok.
Itt lépnek be a képbe a kulcsok. A kulcs egy (aránylag) rövid karaktersorozatból áll, mely egyet választ ki a számos lehetséges kódolás közül. Az általános eljárással ellentétben, melyet legfeljebb néhány évente változtathatunk meg, a kulcsot olyan gyakran cserélhetjük, amilyen gyakran csak szükséges. Így az alapmodellünk egy stabil és mindenki által ismert eljárásból áll, melyet egy titkos és könnyen változtatható kulccsal paraméterezünk. Auguste Kerckhoff flamand hadikriptográfus 1883-ban megfogalmazott felismerése [Kerckhoff, 1883] után Kerckhoff elvének nevezzük azt az ötletet, mely szerint a kriptoanalitikus ismeri az algoritmust, és a titkosság kizárólag a kulcsokban rejlik. Azaz:
Kerckhoff elve: Minden algoritmusnak nyilvánosnak kell lennie; csak a kulcsok titkosak.
Az algoritmusok nyilvánosságát nem győzzük hangsúlyozni. A kereskedelemben az ismeretlenség biztonsága (security by obscurity) néven ismert fogalom, vagyis az, hogy az algoritmust megpróbáljuk titokban tartani, sosem vezet célra. Az eljárás publikálása viszont azt is lehetővé teszi, hogy a kriptográfus több elméleti szakemberrel ismertesse módszerét, akik aztán megpróbálják feltörni azt, hogy publikációkat írhassanak ravaszságuk demonstrálására. Ha számos szakértőnek 5 év próbálkozás után sem sikerül az algoritmus feltörése, akkor az már egészen megbízhatónak tekinthető.
Mivel az igazi titkosság a kulcsban rejlik, annak hossza alapvető fontosságú tervezési kérdés. Vegyünk egy egyszerű kombinációs zárat. Az általános alapelv az, hogy sorrendben számjegyeket adunk meg. Ezt mindenki tudja, de a kulcs titok. Két számjegy hosszúságú kulcs 100 lehetőséget rejt magában. Egy három számjegy hosszúságú esetén már 1000 lehetőség adódik, és hat számjegy alkalmazásakor elérjük az egymilliót. Minél hosszabb a kulcs, annál nagyobb munkatényezővel (work factor) kell számolnia a kódfejtőnek. Egy rendszer feltörésének munkaigénye – a kulcstér elemeinek végigpróbálásával – a kulcs hosszával exponenciálisan növekszik. A titkosság alapja egy erős (de nyilvános) algoritmus és egy hosszú kulcs. Ha meg szeretnéd akadályozni, hogy gyermeked elolvassa e-leveleidet, egy 64 bites kulcs megteszi. A kormányzati hivatalok sakkban tartásához azonban legalább 256 bites kulcs szükséges.
A kódfejtő nézőpontjából a kriptoanalízis problémája három területre osztható. Amikor számos titkos szöveggel, de egyetlen nyílt szöveggel sem rendelkezik, a csak titkosított szövegalapú (chipertext only) problémával áll szemben. Az újságok rejtvény oldalain megjelenő kriptogrammák ebbe a problémakörbe tartoznak. Amikor néhány nyílt szöveggel és azok titkosított párjaival rendelkezik a támadó, az ismert nyílt szövegalapú (known plaintext) problémát kell leküzdenie. Végül, amikor a kódtörőnek lehetősége van saját maga által választott szövegrészletek titkosított párjainak előállítására, a választott nyílt szöveg típusú (chosen plaintext) támadással találkozunk. Az újságok kriptogrammái triviális módon megfejthetők lennének, ha megengednénk az olyan típusú kérdéseket, hogy „Mi az ABCDEFGHIJKL titkosított párja?”
A kriptográfia területén kezdőnek számító emberek gyakran azt gondolják, hogy egy kód biztonságos, ha ellenáll a csak titkosított szöveg típusú támadásoknak. Ez a feltételezés nagyon naiv. A kódfejtő sok esetben jó becslést tud adni a nyílt szöveg bizonyos részeire. Bejelentkezéskor például sok számítógép kezdi azzal a válaszát, hogy „login: ”. Néhány ilyen összetartozó nyílt szöveg – kódolt szövegpár birtokában – a kódtörő munkája jelentősen leegyszerűsödik. A biztonság eléréséhez tehát a kriptográfusnak óvatosnak kell lennie, és biztosítania kell, hogy a rendszer akkor is feltörhetetlen legyen, ha az ellenfél tetszőleges mennyiségű választott nyílt szöveget kódolhat.
A titkosító módszereket történelmileg két csoportba soroljuk: a helyettesítő típusú rejtjelezés és a keverő típusú rejtjelezés. Most ezeket tekintjük át röviden, hogy alapot adjanak a modern kriptográfia megértéséhez.
Egy helyettesítő titkosítóban (substitution cipher) minden betű vagy betűcsoport egy másik betűvel vagy betűcsoporttal helyettesítődik a titkosság elérése érdekében. Az egyik legrégebbi ismert módszer a Caesar-titkosító (Caesar cipher), amely nevét Julius Caesarról kapta. A módszert alkalmazva az a betűből D lesz, a b-ből E, a c F-fé alakul … és a z C-vé válik. Például az attack szó titkosított párja a DWWDFN szó lesz. Példáinkban a nyílt üzeneteket kisbetűvel, míg a kódolt változatokat csupa nagybetűvel fogjuk megadni.
A Caesar-titkosító kissé általánosabb változata megengedi, hogy a titkosított szöveg ábécéje k karakterrel legyen eltolva a korábbi fix 3 helyett. Ebben az esetben a k szám a ciklikus eltolást alkalmazó általános módszer mellett kulcsként viselkedik. A Caesar-titkosító talán becsaphatta a karthágóiakat, de azóta már senkit nem vezet félre.
Egy kicsit fejlettebb módszer, amikor a nyílt szöveg minden szimbólumához – legyen ez most az egyszerűség kedvéért pusztán 26 karakter – egy másik karaktert rendelünk. Vegyük a következő hozzárendelést:
Nyílt szöveg: |
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
Kódolt szöveg: |
Q |
W |
E |
R |
T |
Y |
U |
I |
O |
P |
A |
S |
D |
F |
G |
H |
J |
K |
L |
Z |
X |
C |
V |
B |
N |
M |
A fenti általános módszert egybetű-helyettesítéses titkosításnak (monoalphabetic substitution cipher) nevezzük, ahol a kulcs az a 26 karakterből álló karaktersorozat, mely a nyílt szöveg teljes ábécéjének felel meg. A fenti kulcsot alkalmazva az attack nyílt üzenetet a kódoló a QZZQEA titkosított üzenetté transzformálja.
Első látásra ez a rendszer biztonságosnak tűnik, mivel a kódtörő – bár ismeri az általános módszert (betűhelyettesítés) – nem ismeri, hogy a szóba jöhető lehetséges kulcs közül melyiket használtuk. Ellentétben a Caesar-kódolóval, minden egyes kulcs kipróbálása nem ígéretes megközelítés. Még ha egy kombináció kipróbálása 1
s időt venne csupán igénybe, egy számítógépnek 10 000 évig tartana minden kulcs végigpróbálása.
Ennek ellenére meglepően kevés titkosított üzenet alapján a kód könnyűszerrel megfejthető. A támadás alapvetően a természetes nyelvek statisztikai tulajdonságait használja ki. Az angolban például az e a leggyakoribb karakter, sorrendben őt követik a t, o, a, n, i stb. A leggyakoribb betűpárok vagy más néven betűkettősök (digrams) a th, in, er, re és az an. A leggyakrabban előforduló három egymás mellett álló betű: betűhármasok (trigrams) a the, ing, and és az ion.
Az a kódfejtő, aki egybetű-helyettesítéses titkosító törésébe fog, a kódolt üzenetben szereplő betűk relatív gyakoriságának meghatározásával kezdi a munkáját. Ezek után próbálkozhat a leggyakoribb karakter e-vel való helyettesítésével, és a második leggyakoribbhoz a t-t rendelni. Ennek alapján megvizsgálhatja a betűhármasokat a tXe alakú mintákat keresve, mivel itt erős a gyanú, hogy az X helyén a h betű áll. Ehhez hasonlóan, ha a thYt minta gyakran felbukkan, az Y helyére célszerű az a betűt próbálni. Az így nyert információval nekiláthat az aZW betűhármasok felkutatásának, ami valószínűleg az and szót fogja lefedni. Gyakori karakterek, betűkettősök és betűhármasok megsejtésével és magánhangzó-mássalhangzó minták lehetséges kombinációinak ismeretével a kódtörő némi kísérletezéssel felépítheti a nyílt szöveget, betűről betűre.
Egy másik megközelítés szerint teljes szavakat, illetve kifejezéseket érdemes keresni. Példaképpen vizsgáljuk meg a következő titkosított üzenetet, amit egy könyvelőség küldött (ötös karaktercsoportokba szedve):
CTBMN |
BYCTC |
BTJDS |
QXBNS |
GSTJC |
BTSWX |
CTQTZ |
CQVUJ |
QJSGS |
TJQZZ |
MNQJS |
VLNSX |
VSZJU |
JDSTS |
JQUUS |
JUBXJ |
DSKSU |
JSNTK |
BGAQJ |
ZBGYQ |
TLCTZ |
BNYBN |
QJSW |
Egy ilyen jellegű cégtől érkező levélben gyakori szó lehet a financial. Felhasználva a szónak azt a tulajdonságát, hogy az i betű kétszer szerepel benne, közrefogva négy másikat. A titkos üzenetben ilyen távolságban levő karakterismétlődéseket fogunk keresni. A fenti szövegben ennek alapján 12 találatunk van: a 6., 15., 27., 31., 42., 48., 56., 66., 70., 71., 76. és 82. pozícióban. Ezek közül azonban csak kettőnél, a 31-nél és a 42-nél ismétlődik a következő karakter (ami az n-nek felelne meg) megfelelően. E kettő közül pedig csak a 31. pozícióban levőnél megfelelő a hipotetikus a karakterek ismétlődése. Ennek alapján erős a gyanúnk, hogy a 30. helyen a financial szó kezdődik. Ettől a ponttól kezdve, ha felhasználjuk a betűk előfordulásának relatív gyakoriságát, illetve az angol nyelv ezzel kapcsolatos statisztikai jellemzőit, továbbá közel teljes szavakat keresünk a befejezéshez, könnyű a kulcs megfejtése.
A helyettesítő kódolók megtartották a nyílt szöveg karaktereinek sorrendjét, csak azokat más alakkal ruházták fel. Ezzel ellentétben a keverő kódolók (transposition ciphers) nem keresnek másik betűalakot, viszont az eredeti sorrendet átalakítják. A 8.3. ábra egy egyszerű keverő kódolót mutat be, az oszlopalapú keverőt. A titkosító kulcsként egy olyan szót vagy kifejezést használ, mely nem tartalmaz ismétlődő betűket. Példánk kulcsa a MEGABUCK lesz. A kulcs szerepe az oszlopok megszámozása lesz oly módon, hogy az első oszlopot az a kulcskarakter fogja kijelölni, amelyik az ábécében legelőször szerepel, a többi oszlop sorrendje is hasonlóképpen alakul. A nyílt üzenetet vízszintes sorokba írjuk, a titkosított üzenetet pedig függőlegesen olvassuk ki az oszlopok előbb megállapított sorrendjének megfelelően.
Egy keverő kódoló feltöréséhez a kódfejtőnek először rá kell jönnie, hogy egy ilyen típusú kóddal áll szemben. Az E, T, A, O, I karakterek gyakoriságát könnyen összevetheti a nem kódolt üzenetekben levő gyakoriságukkal. Ha ez nagy hasonlóságot mutat, akkor kétségkívül egy keverő kódolóval van dolga, mivel itt az egyes betűk önmaguknak felelnek meg, vagyis a gyakoriság eloszlása változatlan marad.
A következő lépés az oszlopok számának meghatározása. Sok esetben egy – az üzenetben szereplő – szó vagy kifejezés kitalálható az üzenet környezetéből. Például elképzelhető, hogy a kódtörő gyanítja: a nyílt üzenetben a milliondollars kifejezés szerepel valahol. Az MO, IL, LL, LA, IR és OS betűkettősök előfordulásait keresve a titkos üzenetben ennek a kifejezésnek a deformált darabjait találhatja meg. A kódolt üzenetben szereplő O betű az M-et követi (fenti példánkban egymás alatt szerepelnek a 4. oszlopban), mivel a vizsgált kifejezésben a feltételezett kulcstávolságra vannak egymástól. Ha hét hosszúságú kulcsot használtunk volna, akkor az MD, IO, LL, LL, IA, OR és NS betűkettősök után kellene keresnünk. Valójában minden egyes kulcshosszhoz különböző betűkettős tartozik a titkosított üzenetben. A különböző lehetőségeket megvizsgálva a kódfejtő gyakran könnyen meghatározhatja a kulcshosszt.
A hátralevő feladat az oszlopok sorrendjének meghatározása. Ha az oszlopok száma (k) kicsi, az összes db oszloppár megvizsgálható a betűkettősök előfordulási gyakorisága szempontjából. Annak a párnak a sorrendjét fogadjuk el, amely legjobban kielégíti az angol nyelv törvényszerűségeit. A megtalált pár után következő oszlopot további próbákkal határozhatjuk meg, azt a jelöltet választva, amelyik a legjobban megfelel a betűkettősök és betűhármasok szabályszerűségeinek. A megelőző oszlopot is hasonlóképpen határozzuk meg. Az eljárást a végleges oszlopsorrend meghatározásáig folytatjuk. Igen valószínű, hogy ezek után az eredeti üzenet felismerhetővé válik (például ha a milloin szót látjuk, világos, hogy hol a hiba).
Néhány keverő kódoló fix hosszúságú bemenetből ugyancsak kötött hosszúságú kimeneti blokkot készít. Ezeket a kódolókat egyszerűen leírhatjuk azzal a sorrenddel, ahogy a bemeneti karakterek a kimeneten megjelennek. A 8.3. ábrán bemutatott kódoló például egy 64 karakteres blokk-kódoló. Ennek kimenete: 4, 12, 20, 28, 36, 44, 52, 60, 5, 13, …, 62. Más szavakkal: a negyedik bemeneti karakter (a) lesz a kimenet első karaktere, amit a bemenet 12. szimbóluma követ (f) és így tovább.
Feltörhetetlen kódolót készíteni egyébként kifejezetten egyszerű; a módszer évtizedek óta ismert. Először is, válasszunk kulcsnak egy véletlen bitsorozatot! Ezután a kódolandó üzenetet szintén alakítsuk át bitsorozattá, mondjuk a karakterek ASCII-kódját felhasználva. Végül számoljuk ki a két sorozat kizáró vagy (xor) művelettel adott eredményét bitről bitre. Az így kapott üzenet feltörhetetlen, mivel egy kellően hosszú üzenetmintában minden egyes karakter előfordulási valószínűsége azonos lesz, akárcsak a betűkettősöké és a betűhármasoké. Ez az egyszer használatos bitminta (one-time pad) néven ismert módszer ellenáll minden jelenlegi és jövőbeli támadásnak, függetlenül attól, hogy mennyi számítási kapacitással rendelkezik a támadó. Ennek oka az információelméletben keresendő: az üzenet ugyanis egyszerűen nem hordoz információt, mivel az összes lehetséges, adott hosszúságú nyílt üzenet egyformán valószínű lehet.
Az egyszer használatos bitminták alkalmazására a 8.4. ábra ad példát. Az „I love you” tartalmú 1-es üzenetet először 7 bites ASCII-formátumra alakítjuk. Ezután vesszük az egyszer használatos 1-es bitmintát, és kizáró vagy (xor) kapcsolatba hozzuk az üzenettel, így kapjuk meg a titkosított szöveget. A kódtörő kipróbálhatja az összes lehetséges bitmintát, hogy megnézze, melyik milyen nyílt szöveget eredményezne. Próbálkozhat például az ábrán megadott 2-es bitmintával, ami a 2-es nyílt szöveget adja, vagyis azt, hogy „Elvis lives”, ami lehet elfogadható is, meg nem is (ez már túlmutat a könyv keretein). Valójában minden 11 karakteres ASCII nyílt szöveghez létezik egy azt előállító egyszer használatos bitminta. Ezt értjük azalatt, hogy nincs információ a titkosított szövegben, hiszen abból bármilyen, megfelelő hosszú üzenetet elő lehet állítani.
8.4. ábra - Titkosítás egyszer használatos bitminták segítségével. Bármilyen lehetséges nyílt szöveg előállítható a titkosított szövegből egy másik bitminta alkalmazásával
Az egyszer használatos bitminták elvileg nagyszerűek, de a gyakorlatban számos hátrányuk van. Először is, a kulcsot nem lehet megjegyezni, így mind a küldőnek, mind a fogadónak egy írott másolatot kell magánál tartania. Az írott kulcsok pedig egyértelműen nemkívánatosnak számítanak abban az esetben, ha van esély arra, hogy a támadók valamelyik másolatot megszerezzék. Ráadásul az elküldhető üzenet hosszát is korlátozza a rendelkezésre álló kulcs hossza. Ha egy titkos ügynök megüti a főnyereményt, és nagy mennyiségű adat birtokába jut, könnyen találhatja magát abban a helyzetben, hogy képtelen azt a központ felé továbbítani, mivel elfogyott a rendelkezésére álló kulcs. A módszer további problémája, hogy rendkívül érzékeny az elveszett vagy közbeékelődött karakterekre. Ha a küldő és a fogadó egy ponton kiesnek a szinkronból, akkor onnantól kezdve minden üzenet zagyvaságnak tűnik számukra.
A számítógépek megjelenésével az egyszer használatos bitminták mégis hasznosnak bizonyulhatnak egyes alkalmazásokban. A kulcs forrása lehet egy speciális DVD, mely több gigabájtnyi információt tárol. Ha ezt egy közönséges DVD-tokba rejtjük, és az elejére még pár percnyi mozgóképet is rögzítünk, akkor senki nem fog gyanakodni. Gigabites hálózati sebességek mellett persze kissé fárasztó lehet 30 másodpercenként új DVD-lemezt berakni. Mindennek tetejébe a DVD-ket személyesen kell elvinni a küldőtől a fogadóhoz, még azelőtt, hogy bármilyen üzenetet elküldenénk. Ez azonban nagyban csökkenti a módszer gyakorlati használhatóságát.
Érdekes módon talán mégis van egy megoldás az egyszer használatos bitminta hálózaton történő átvitelére. Ez pedig egy nagyon valószínűtlen forrásból származik: a kvantummechanika területéről. A munka még kísérleti fázisban van, de a kezdeti tesztek ígéretesek. Ha a módszert sikerül tökéletesíteni és hatékonyabbá tenni, akkor gyakorlatilag minden kriptográfia egyszer használatos bitmintákon fog alapulni, mivel azok bizonyíthatóan biztonságosak. A következőkben röviden elmagyarázzuk, hogyan működik a kvantumkriptográfia (quantum cryptography) módszere. Konkrétan a BB84 nevű protokollt ismertetjük, mely alkotóiról és közlésének évéről kapta nevét [Bennet és Brassard, 1984].
Az Aliz nevű felhasználó szeretne létrehozni egy, a Bob nevű felhasználóval közös, egyszer használatos bitmintát. Aliz és Bob történetünk két főszereplője (principals). Bob lehet például egy bankár, akivel Aliz üzletelni szeretne. Az elmúlt évtizedben gyakorlatilag az összes kriptográfiával foglalkozó cikkben és könyvben „Aliz” és „Bob” volt a főszereplő. A kriptográfusok szeretik a hagyományokat. Ha mi most „Andyt” és „Barbarát” használnánk főszereplőként, akkor senki nem hinne el a fejezetből egy szót sem. Maradjon hát Aliz és Bob.
Ha Aliznak és Bobnak lenne közös egyszer használatos bitmintájuk, akkor azzal biztonságosan kommunikálhatnának. A kérdés csak az: hogyan állapodhatnak meg egy ilyen bitmintában anélkül, hogy előzőleg DVD-ket cseréltek volna? Feltehetjük, hogy Aliz és Bob egy fényvezető szál két végénél helyezkedik el, melyen keresztül fényimpulzusokat küldhetnek és fogadhatnak. Van azonban egy elszánt támadó is, Trudy, aki megvágja az üvegszálat, hogy beillesszen abba egy aktív csatolót. Trudy olvashatja a biteket, és hamis üzeneteket is küldhet mindkét irányban. Aliz és Bob helyzete immár reménytelennek tűnhet, de a kvantumkriptográfia új fényt vethet mindenre.
A kvantumkriptográfia azon a tényen alapul, hogy a fény bizonyos sajátos tulajdonsággal bíró, fotonnak (photon) nevezett kis részecskékben érkezik. A fényt ezenfelül polárszűrők segítségével polarizálni is lehet, amint azt a napszemüveget viselők és a fényképészek is jól tudják. Ha egy fénysugár (vagyis egy fotonfolyam) egy polárszűrőn halad keresztül, akkor az összes kilépő foton a szűrő tengelyének megfelelő irányban polarizált lesz (például vízszintesen). Ha ezt a sugarat most egy második polárszűrőn visszük keresztül, akkor az abból kilépő fény erőssége arányos lesz a szűrők tengelyei által bezárt szög koszinuszának négyzetével. Ha a tengelyek merőlegesek egymásra, akkor egyetlen foton sem jut át. A két szűrő abszolút helyzete nem lényeges, csak a tengelyeik által bezárt szög számít.
Az egyszer használatos bitminta előállításához Aliznak két polárszűrőkészletre van szüksége. Az első készlet egy függőleges és egy vízszintes szűrőből áll, ezt egyenes vonalú (rectilinear) bázisnak nevezzük. A bázis tulajdonképpen csak egy koordináta-rendszer. A másik szűrőkészlet ugyanilyen, de 45 fokkal el van forgatva, vagyis az egyik szűrő tengelye a bal alsó sarokból a jobb felső sarok, a másik szűrő tengelye pedig a bal felső sarok felől a jobb alsó sarok irányába mutat. Ezt a készletet átlós (diagonal) bázisnak nevezzük. Aliznak tehát két bázisa van, melyeket tetszése szerint, gyorsan be tud illeszteni a sugara útjába. A valóságban Aliznak nem négy különálló szűrője van, hanem egy olyan kristálya, melynek polarizációját nagy sebességgel, elektronikus úton lehet a négy lehetséges irány közül bármelyikre átkapcsolni. Bob ugyanilyen felszereléssel rendelkezik. Az a tény, hogy mindkettőjüknek két bázisa van, alapvető fontosságú a kvantumkriptográfiában.
Aliz minden bázis esetében hozzárendeli az egyik irányhoz a 0-t, a másikhoz pedig az 1-et. Az alábbi példában feltesszük, hogy a függőlegest választja 0-nak és a vízszintest 1-nek. Ettől függetlenül a bal alsó–jobb felső irányhoz is hozzárendeli a 0-t és a bal felső–jobb alsó irányhoz az 1-et. Választásait nyílt szövegként küldi el Bobnak.
Aliz ezután kiválaszt egy egyszer használatos bitmintát, például egy véletlenszám-generátor segítségével (ez már egy önmagában is bonyolult kérdés). A mintát bitről bitre átviszi Bobnak, és eközben minden egyes bitnél véletlenszerűen használja valamelyiket a két bázisa közül. A bitet úgy küldi el, hogy a fotonágyúja mindig az adott bitnél használt bázisnak megfelelően polarizált fotont bocsát ki. Választhatja például rendre az átlós, linearizált, linearizált, átlós, linearizált stb. bázisokat. Az 1001110010100110 ezen bázisokkal való elküldéséhez tehát a 8.5.(a) ábrán jelölt fotonokat kell kiadnia. A bitminta és a bázissorozatok együttesen minden egyes bit esetében egyértelműen meghatározzák, hogy milyen polarizációt kell használni. Az egyszerre egy foton segítségével elküldött biteket kubiteknek (qubits) nevezik.
Bob nem tudja, hogy milyen bázisokat kell használnia, ezért minden beérkező fotonhoz egyszerűen véletlenszerűen választ egyet, és azt használja, ahogy azt a 8.5.(b) ábra mutatja. Ha eltalálja a helyes bázist, megkapja a helyes bitet. Ha rossz bázist választ, akkor egy véletlenszerű bitet kap, mert ha egy foton egy, a saját polarizációjához képest 45 fokban polarizált szűrőn halad át, akkor egyforma valószínűséggel, véletlenszerűen fog átugrani a szűrővel megegyező, vagy az arra merőleges polarizációra. A fotonoknak ez a tulajdonsága alapvetőnek számít a kvantummechanikában. Egyes bitek tehát helyesek lesznek, mások véletlenszerűek, de Bob nem tudja, hogy éppen melyik melyik. Bob eredményei a 8.5.(c) ábrán láthatók.
Hogyan tudja meg Bob, hogy mely bázisokat találta el és melyeket nem? Úgy, hogy egy nyílt szövegben egyszerűen közli Alizzal, hogy milyen bázist használt az egyes bitekhez, Aliz pedig szintén egy nyílt szövegben elmondja neki, hogy melyiket találta el, és melyiket nem, amint azt a 8.5.(d) ábra mutatja. Ebből az információból mindketten felépíthetnek egy bitfüzért a helyes találgatásokról, amint ez a 8.5.(e) ábrán is látszik. Ez a bitfüzér átlagosan fele olyan hosszú lesz, mint az eredeti bitfüzér, de mivel mindkét fél ismeri, felhasználhatják egyszer használatos bitmintaként. Aliznak mindössze annyit kell tennie, hogy a kívántnál valamivel több mint kétszer hosszabb bitfüzért ad le, így ő is és Bob is a kívánt hosszúságú bitmintát kapják. A probléma tehát meg van oldva.
De várjunk csak egy percet! Trudyról megfeledkeztünk. Tegyük fel, hogy ő nagyon kíváncsi a szereplők mondanivalójára, ezért elvágja az üvegszálat, és beilleszti a saját vevőjét és adóját. Balszerencséjére ő sem tudja, hogy melyik fotonhoz melyik bázist kell használni. Akárcsak Bob, ő is mindössze annyit tehet, hogy véletlenszerűen választ ki egyet minden fotonhoz. Választásaira a 8.5.(f) ábra mutat egy lehetséges példát. Amikor Bob később (nyílt szövegben) jelenti, hogy milyen bázisokat használt, és Aliz (szintén nyílt szövegben) elmondja neki, hogy mely tippek voltak helyesek, Trudy tudni fogja, hogy mely biteket vette jól és melyeket rosszul. Az ábrán eltalálta a 0., 1., 2., 3., 4., 6., 8., 12. és 13. bitet. Aliz 8.5.(d) ábrán látható válaszából azonban tudja, hogy csak az 1., 3., 7., 8., 10., 11., 12. és 14. bitek részei az egyszer használatos bitmintának. Ezek közül négy bitnél (1., 3., 8. és 12.) ő is helyesen tippelt, így rendelkezik a helyes bittel. A maradék négynél (7., 10., 11. és 14.) azonban rossz volt a tippje, és nem ismeri az akkor átvitt bitet. Bob tehát tudja már, hogy a bitminta 01011001-gyel kezdődik [8.5.(e) ábra], Trudynak viszont csak annyi van meg, hogy 01?1??0? [8.5.(g) ábra].
Aliz és Bob természetesen tudják, hogy Trudy megszerezhette a bitmintájuk egy részét, szeretnék tehát csökkenteni a Trudy rendelkezésére álló információ mennyiségét. Ezt egy transzformáció segítségével érhetik el. Feloszthatják például a bitmintájukat 1024 bites blokkokra, majd a blokkokat négyzetre emelhetik, és az így kapott 2048 bites számok egymás után fűzését használhatják bitmintának. Ha Trudy csak részlegesen ismeri az átvitt bitfüzért, akkor semmilyen úton sem képes előállítani annak négyzetét, vagyis nem ért el semmit. Azt a transzformációt, mely úgy alakítja át az eredeti bitmintát, hogy azzal csökkentse Trudy tudását, személyiségi jogok erősítésének (privacy amplification) nevezzük. A gyakorlatban a négyzetre emelés helyett olyan bonyolult átalakításokat használnak, melyekben minden kimeneti bit függ minden bemeneti bittől.
Szegény Trudy! Nemcsak hogy fogalma sincs a bitmintáról, de a jelenléte sem marad titokban. Továbbítania kell ugyanis minden vett bitet Bobnak, hogy elhitesse vele, hogy Alizzal beszél. A baj csak az, hogy ő legfeljebb a vett kubitet tudja leadni, azzal a polarizációval, mellyel ő vette azt, így az esetek kb. felében tévedni fog, ezzel pedig sok hibát okoz Bob bitmintájában.
Amikor Aliz végül megkezdi az adatküldést, akkor egy hathatós hibajavító kódot alkalmaz. Bob szemében egy bithiba az egyszer használatos bitmintában ugyanolyan, mint egy 1 bites átviteli hiba, hiszen mindkét esetben rossz bitet vesz. Ha megfelelő mértékű hibajavítást alkalmaznak, akkor a hibák ellenére is vissza tudja állítani az eredeti üzenetet, és közben könnyen megszámolhatja azt is, hogy hány hibát javított ki. Ha ez a szám jóval több, mint a berendezés várható hibaaránya, akkor tudni fogja, hogy Trudy megcsapolta a vonalat, és ennek megfelelően cselekedhet (például szólhat Aliznak, hogy kapcsoljon át egy rádiós csatornára, vagy hívja a rendőrséget stb.). Ha Trudy képes lenne klónozni a fotonokat, vagyis lenne egy fotonja, amit megvizsgálhatna és egy ugyanolyan, amit elküldhetne Bobnak, akkor elkerülhetné a lebukást, de jelenleg nem ismeretes olyan módszer, amivel tökéletesen le lehetne másolni egy fotont. De még ha Trudy képes lenne is fotonokat klónozni, az sem csökkentené a kvantumkriptográfia értékét az egyszer használatos bitmintákról való megegyezésben.
Jóllehet, a kvantumkriptográfia működőképességét egy 60 km-es üvegszálon már bebizonyították, a hozzá szükséges felszerelés azonban rendkívül bonyolult és drága. Az ötlet ennek ellenére ígéretes. A kvantumkriptográfiáról további információt Mullins [2002] művében találhatunk.
Bár a következőkben számos különböző kriptográfiai rendszert fogunk megismerni, ezek mégis megegyeznek abban, hogy két fontos elv szolgál alapjukként, amelyeket fontos megértenünk. Figyeljünk tehát oda, mert ha megszegjük, saját magunknak okozunk kárt.
Az első alapelv szerint a titkosított üzeneteknek némi redundanciát kell hordozniuk, vagyis olyan információt, ami nem szükséges az üzenet megértéséhez. Egy példán keresztül beláthatjuk ennek fontosságát. Vegyünk egy olyan céget, amelytől levélben rendelhetünk valamit. Legyen ez a Korszerű Játszótéri Bútorok (KJB) cég, mintegy 60 000 termékkel. Képzeljük el, hogy igen hatékonyan működnek, és a KJB programozói úgy döntenek, hogy minden megrendelőlevél alakja a következőképpen nézzen ki: 16 bájt hosszú ügyfél-azonosító, majd egy 3 bájtos adatmező (1 bájt a mennyiségnek, 2 bájt pedig a termékkód számára). Az utolsó 3 bájtot egy nagyon hosszú kulccsal titkosítják, amit csak a megrendelő és a KJB programozói ismernek.
Első látásra biztonságosnak tűnik a fenti módszer, és bizonyos értelemben az is, mivel passzív támadók nem tudják megfejteni az üzeneteket. Sajnálatos módon egy súlyos hiányossága van, ami használhatatlanná teszi. Tegyük fel, hogy egy frissen elbocsátott alkalmazott bosszút szeretne állni a cégen. Mielőtt távozna a vállalattól, magával viszi az ügyfelek listáját, vagy annak egy részét. A következő éjszaka elkészít egy programot, mely fiktív rendeléseket generál valódi ügyfél-azonosítókkal. Mivel nem ismeri a titkos kulcsokat, az utolsó három bájtot véletlenszerűen tölti fel, majd rendelések százait juttatja el a KJB -hez.
Amikor az üzenetek megérkeznek, a KJB számítógépei az ügyfelekhez rendelt kulcsok segítségével visszafejtik az üzenetet. A KJB szerencsétlenségére, mivel majdnem minden 3 bájtos kombináció értelmes, a számítógépek elkezdik a rendelések teljesítését. Bár furcsának tűnhet, hogy a vásárló 837 gyermekhintát és 540 homokozót rendelt, a programok csak annyit „gondolhatnak”, hogy minden bizonnyal játszótér-hálózatot szeretne nyitni az ügyfél. Ily módon egy aktív támadó (az elbocsátott alkalmazott) nagy kárt okozhat még úgy is, hogy fogalma sincs a programja által generált üzenetek tartalmáról.
A veszély jelentősen csökkenthető, ha az üzenetekbe redundanciát csempészünk. Ha például a rendeléssel kapcsolatos részt 12 bájt hosszú mezőn tároljuk, az első 9 karakter helyére nullákat írva, a fenti támadás már nem jár sikerrel, mivel a volt alkalmazott nem képes valódinak tűnő üzenetek nagyszámú előállítására. A történet mondanivalója, hogy minden üzenetnek számottevő redundanciát kell hordoznia ahhoz, hogy aktív támadók ne áraszthassanak el bennünket valódinak tűnő hamis üzenettel.
A redundancia növelésével azonban a kódfejtőnek egyre könnyebb dolga lesz az üzenet feltörésekor. Tegyük fel, hogy a levélen keresztüli rendelés versenyképes üzletággá válik, és a KJB fő riválisa, a Játszótér Fejlesztő és Kivitelező (JFK) cég mindent megadna azért, hogy megtudja, hány homokozót ad el a KJB. Így aztán megcsapolja a KJB telefonvonalát. Az eredeti 3 bájtos sémát használva a kriptoanalízis reménytelen, mivel egy kulcs megsejtése után a kódtörő nem ellenőrizheti kellőképpen, hogy valóban kulcsot talált-e, mivel minden üzenet gyakorlatilag érvényes. A módosított 12 bájtos módszert alkalmazva azonban a kriptoanalízist végző támadónak könnyű dolga van egy kulcs ellenőrzésekor. Ezek szerint:
A kriptográfia 1. alapelve: Az üzeneteknek valamilyen redundanciát kell tartalmazniuk.
Más szóval, egy üzenet visszafejtésekor a vevőnek egy egyszerű vizsgálattal vagy egy kisebb számítással meg kell tudnia állapítani, hogy az vajon érvényes-e. Erre a redundanciára azért van szükség, hogy az aktív támadó ne küldhessen el mindenféle zagyvaságot, becsapva ezzel a vevőt, aki a zagyvaságot visszafejtve az így kapott „nyílt szöveg” alapján cselekedne. Másfelől viszont a nagyobb redundancia épp a passzív támadóknak kedvez, vagyis itt némi ellentét húzódik meg. Továbbá, a redundanciát sosem szabad az üzenet elején vagy végén, csupa nulla karakter beiktatásával elérni, mivel néhány kriptográfiai algoritmus az ilyen sorozatokból előre megjósolható kimenetet gyárt, ami leegyszerűsíti a kódfejtő munkáját. Sokkal jobb egy CRC-polinom, mint egy 0-kból álló sorozat, mivel a vevő azt egyszerűen ellenőrizheti, a kódtörőnek mégis több munkát jelent. Ennél is jobb a kriptografikus hash, melynek ötletét később fogjuk tanulmányozni. Pillanatnyilag gondoljunk arra, hogy ez olyan, mint egy jobb CRC.
Egy pillanatra visszatérve a kvantumkriptográfiára láthatjuk, hogy a redundancia ott is szerepet játszik. Bob egyszer használatos bitmintájában egyes bitek hibásak lesznek, köszönhetően annak, hogy Trudy elfogja a fotonokat. Bobnak tehát bizonyos redundanciára lesz szüksége a beérkező üzenetekben, hogy észrevegye a hibák meglétét. A redundancia egyik nagyon durva formája az, ha az üzenetet egyszerűen megismétlik. Ha a két másolat nem azonos, akkor Bob tudja, hogy vagy az üvegszál nagyon zajos, vagy valaki beavatkozott az átvitelbe. A kétszeres küldés persze túlzás: egy Hamming- vagy Reed–Solomon-kód sokkal hatékonyabb módot biztosít a hibajelzésre és a hibajavításra. Annak mindenesetre nyilvánvalónak kell lennie, hogy némi redundanciára szükség van ahhoz, hogy meg lehessen különböztetni egy érvényes üzenetet egy érvénytelentől, különösen egy aktív támadó jelenlétében.
A második kriptográfiai alapelv szerint valamilyen módon biztosítani kell, hogy minden vett üzenetnél ellenőrizni lehessen az üzenet frissességét, vagyis azt, hogy csak nemrég küldték-e el. Erre azért van szükség, hogy egy aktív támadó ne játszhasson vissza régi üzeneteket. Ha nem tennénk semmi óvintézkedést, akkor az elbocsátott alkalmazottunk lehallgathatná a KJB telefonvonalát, és sorra megismételhetné az előzőleg elküldött érvényes üzeneteket. Még egyszer megfogalmazva:
A kriptográfia 2. alapelve: Kell egy módszer az ismétléses támadások meghiúsítására.
Egy lehetséges intézkedés például, ha minden üzenetet időbélyeggel látunk el, mely mondjuk 10 másodpercig érvényes. A vevő ezután egyszerűen megőrzi az üzeneteket kb. 10 másodpercig, és összehasonlítja az újonnan érkezetteket a régebbiekkel, hogy kiszűrhesse a másodpéldányokat. A 10 másodpercnél régebbi üzeneteket ki lehet dobni, mivel a több mint 10 másodperccel később elküldött ismétléseket rögtön visszautasítják azzal, hogy túl régiek. Az időbélyegek mellett más lehetőségek is vannak, ezeket a későbbiekben tekintjük át.
[42] A social engineering azoknak a módszereknek, megoldásoknak az összessége, amelyek alkalmasak arra, hogy embereket manipuláljanak annak érdekében, hogy tőlük bizalmas adatokat nyerjenek, vagy rávegyék őket arra, hogy olyan cselekedeteket hajtsanak végre, amelyeket maguktól nem tennének meg. Jóllehet a tipikus módszerek között csalás, trükközés vagy becsapás szerepel információgyűjtés vagy számítógéphez történő hozzáférés céljából, a támadó ezeknek a módszereknek az alkalmazása során sohasem kerül az áldozattal személyes kapcsolatba. (A lektor megjegyzése)