- Doelstellingen
- Achtergronden
- Definities
- Tijdlijnen
- Soorten cijfers
- Secret Key Cryptography
- Caesar Cipher
- Monoalfabetische substitutie
- Homofone substitutie
- Eenvoudige Vigenère
- Auto-Key Vigenère
- Moderne Auto-Key Ciphers
- One Time Pad
- Playfair
- Vier-kwadraat
- Simple Block Transposition
- Kolom transpositie
- Rail Fence
- Combineren van Substitutie en Transpositie
- Bifid
- Trifid
- Enigma
- Moderne Cryptografische Methoden
- DES
- IDEA
- RC4
- RC6
- Blowfish
- Twofish
- AES
- Key Exchange
- Public Key Cryptography
- RSA Cryptosysteem
- Cryptographic Hashing
- Message Authentication Codes
- Digitale handtekeningen
- RSA voor Digitale Handtekeningen
- DSA
- Cryptanalysis
- Programmeervoorbeelden
- JavaScript Voorbeelden
- Python Voorbeelden
- Java Voorbeelden
Doelstellingen
Achtergronden
Alice en Bob kunnen mensen zijn, maar ook clients en servers, peer computers, dataopslagplaatsen, netwerkrouters, enzovoort. Mallory kan een van de deelnemers spoofen, actuele berichten toevoegen, wijzigen of verwijderen, de verbinding kapen, een denial of service uitvoeren, malware injecteren, enz.
Doelstellingen:
- Vertrouwelijkheid: Het moet Eve meer kosten om $m$ terug te krijgen dan $m$ waard is.
- Authenticatie: Bob moet kunnen verifiëren dat het Alice was die $m$ heeft verstuurd.
- Integriteit: Bob moet kunnen verifiëren dat er niet met $m$ is geknoeid.
- Onweerlegbaarheid: Alice mag de verzending van $m$ niet kunnen ontkennen.
De beste cryptosystemen gaan ervan uit dat Eve en Mallory $E$, $D$, $c$ kennen, en, als $k_e \neq k_d$, dan ook $k_e$. De meeste cryptosystemen vertrouwen er niet op dat hun algoritmen geheim worden gehouden, omdat:
- Als je geheime algoritme wordt gecompromitteerd (iemand zou je groep kunnen verlaten), moet je het veranderen, en dat is veel moeilijker dan alleen een sleutel veranderen!
- Publieke algoritmen kunnen worden onderworpen aan duizenden experts op zoek naar gebreken, zodat je een zekere mate van vertrouwen hebt in degenen die de kritische blik doorstaan.
Verder lezen:Security Through Obscurity, Kerchoff’s Principle en deze discussie.
De studie van cryptologie omvat het ontwerp van verschillende cijfers, cryptoanalyse methoden (aanvallen), sleuteluitwisseling, sleutelauthenticatie, cryptografische hashing, digitaal ondertekenen, en sociale kwesties (juridische, politieke, enz.). Zie Wikipedia’s onderwerpen in cryptografie pagina.
DOE DEZE STUFF NIET OP JE EIGEN IN ECHTE TOEPASSINGEN
Zeker, het is prima om thuis wat te spelen, maar probeer NOOIT je eigen cryptografie voor iets echts te gebruiken. Laat het over aan de profs. Als je zelf een pro wordt, dan, mmmmm, okay.
Dit is een belangrijke publieke aankondiging geweest.
Definities
Woorden om te weten:
Cryptografie De kunst en wetenschap van het maken van vercijferingen. Cryptanalyse De kunst en wetenschap van het breken van cijfers, d.w.z. de extractie van $m$ gegeven $c$, $E$, $D$, en eventueel $k_e$. Cryptologie De studie van cryptografie en cryptoanalyse.
Cryptosysteem Een bepaalde reeks algoritmen en protocollen voor encryptie, decryptie en sleutelgeneratie. Voorbeelden: Cramer-Shoup cryptosysteem, Rabin cryptosysteem, Benaloh cryptosysteem, RSA cryptosysteem. Cryptografisch systeem Elk systeem dat gebruik maakt van cryptografie. Cijfer Een algoritme dat in een cryptosysteem wordt gebruikt.
Confusion De eigenschap dat de relatie tussen de klare tekst, de cijfertekst en de sleutel zo ingewikkeld is dat ze nutteloos is voor de cryptoanalist. Verspreiding De eigenschap dat statistische patronen in de klare tekst wijd verspreid zijn in de cijfertekst.
Tijdlijnen
Als u van geschiedenis houdt….
- Wikipedia’s Geschiedenis van Cryptografie Artikel
- Wikipedia’s Tijdlijn
- Carl Ellison’s Tijdlijn
Soorten cijfers
Hier volgen enkele nuttige categorieën van cijfers. Merk op dat een bepaald cijfer tot meer dan één van deze categorieën kan behoren.
- Klassiek: Een cijfer dat eenvoudig genoeg is om met de hand te worden uitgevoerd, meestal op karakters gebaseerd. Ook wel handmatig genoemd.
- Modern: Zo’n beetje elk cijfer dat niet klassiek is.
- Substitutie: Elk karakter van de klare tekst wordt vervangen door een of meer karakters om de cijfertekst te maken.
- Transpositie: Tekens in de klare tekst worden herschikt om de cijfertekst te vormen.
- Monoalfabetisch: Een substitutiecijfer waarbij een karakter van de klare tekst steeds door hetzelfde karakter wordt vervangen.
- Polyalfabetisch: Een substitutiecijfer dat in wezen meerdere monoalfabetische substitutiemappings gebruikt.
- Homofoon: Een substitutie waarbij één karakter kan worden toegewezen aan één van een reeks karakters.
- Polygrafisch: Een substitutie van blokken karakters voor blokken karakters.
- Periodiek: Een polyalfabetisch cijfer waarbij het vervangingsschema zich herhaalt.
- Niet-periodiek: Spreekt voor zich als je periodiek begrijpt.
- Blok: Encryptie vindt niet plaats per karakter maar per blok van karakters.
- Stream: Een cijfer dat werkt op een datastroom van onbekende lengte, meestal met terugkoppeling.
- Geheime sleutel: Een cijfer waarbij $k_e$ en $k_d$ hetzelfde zijn of gemakkelijk van elkaar kunnen worden afgeleid; vereist dat de partijen elkaar in het geheim ontmoeten om de te gebruiken sleutels uit te wisselen. Ook symmetrisch genoemd.
- Public Key: Een schema waarbij ieders encryptiesleutel publiekelijk bekend is, maar hun decryptiesleutel geheim wordt gehouden. Ook wel asymmetrisch genoemd.
Secret Key Cryptography
Secret key (a.k.a. symmetrische sleutel) cijfers zijn veel sneller dan publieke sleutel cijfers, maar sleutelbeheer kan een enorm probleem zijn.
- Als $n$ mensen in een groep met elkaar moeten communiceren, hebben ze $n(n-1)}{2}$ sleutels nodig.
- Sleutels moeten veilig (in het geheim) worden gedistribueerd.
- Sleutels moeten veilig worden bewaard.
- Sleutels moeten vaak worden veranderd, wat weer leidt tot hoofdpijn bij de distributie.
OPMERKING
In de karakter-gebaseerde voorbeelden hieronder, gaan we (zonder verlies van generaliteit) uit van een alfabet met 26 symbolen (
A..Z
).
Caesar Cipher
Een volkomen zielig en onveilig cijfer naar moderne maatstaven. De vercijferingssleutel $k_e$ is een klein geheel getal en $k_d = k_e$. Om te vercijferen telt u $k_e$ bij elk karakter van de klaartekst op; om te ontcijferen trekt u er $k_e$ van af.
ATTACKATDAWN
FYYFHPFYIFBS
Triviaal te kraken: gewoon $k_e$ raden.
Monoalfabetische substitutie
In plaats van eenvoudig een vaste offset aan elk karakter toe te voegen, kunt u een substitutietabel vooraf berekenen door een willekeurige permutatie van uw alfabet te genereren. Bijvoorbeeld:
ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX
Nu ATTACKATDAWN
is nu MNNMHRMNPMDB
.
Je kraakt dit niet door de sleutel te raden (er zijn $n!$ mogelijke sleutels), maar frequentie analyse kan elk monoalfabetisch substitutiecijfer kraken, mits het bericht lang genoeg is.
Voor technieken waarvan de sleutel een permutatie is, is een manier om de sleutel gemakkelijker te onthouden, een zin te kiezen, de unieke letters ervan te leggen, en dan de ontbrekende letters in volgorde in te vullen. Bijvoorbeeld, PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL
levert deze substitutie op:
PREMATUOIZNSHFLVBCDGJKQWXY
Homofone substitutie
Elke letter in de klare tekst komt overeen met een of meer symbolen in de cijfertekst. Het aantal targets moet evenredig zijn met de frequentie ervan (om frequentie-analyse te verslaan). Voorbeeld:
A 12 15 36 50 56 70 81 95 B 51 84 C 16 44 65 D 04 06 48 82 E 01 17 19 34 47 49 58 60 67 77 85 90 F 13 27 G 09 28 H 26 42 53 59 68 71 I 35 73 76 86 91 96 J 18 K 07 L 29 40 54 87 M 25 30 N 21 61 62 69 74 94 O 02 03 08 10 57 75 93 P 41 98 Q 97 R 32 38 43 45 80 83 S 14 22 39 79 89 99 T 00 20 23 33 46 52 72 78 88 U 11 64 66 V 37 W 63 92 X 31 Y 24 55 Z 05
Om te vercijferen, kies willekeurig uit de mogelijkheden. Voorbeeld, een mogelijke vercijfering van ATTACKATDAWN
is
56 78 20 95 65 07 12 72 06 50 92 61
Eenvoudige Vigenère
Het cijfer dat bekend staat als het eenvoudige shift Vigenère cijfer is helemaal niet uitgevonden door Vigenère… het schijnt voor het eerst beschreven te zijn door Giovan Battista Bellaso. De sleutel is een string die je aan de klare tekst toevoegt met modulaire optelling, zoals in dit voorbeeld (A=0, B=1, C=2, …, Z=25):
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI
Om cijfertekst met de hand te genereren kun je een codeerwiel of een tabula recta gebruiken.
Dit schema is niet veilig omdat de sleutel zich herhaalt. Als de sleutellengte kan worden bepaald, kan de cryptoanalist meerdere frequentie-analyses doen (één voor elke verschuivingswaarde in de sleutel). Methoden om de sleutellengte te bepalen zijn de Kaisiski Methode en de Friedman test.
Voor binaire gegevens (d.w.z. een reeks bits) is modulaire optelling base-2 gewoon een eenvoudige xor. Voorbeeld:
Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011
Auto-Key Vigenère
Vigenère creëerde eigenlijk een autokey cijfer dat sterker is omdat de sleutel nooit wordt herhaald. In plaats daarvan bestaat de “sleutel” uit de sleutelzin gevolgd door de klare tekst, zoals dit:
Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU
Die gebruikte de klare tekst als deel van de sleutel. Je kunt ook de cijfertekst gebruiken. Zie je hoe?
Moderne Auto-Key Ciphers
Je kunt nog steeds autokey Vigenère cijfers kraken door linguïstische analyse, omdat de sleutel tekst bevat en dus waarschijnlijk hoog-frequente letters bevat. Moderne auto-sleutel cijfers genereren de shift waarden met een random nummer generator. De sleutel zaaide de generator.
One Time Pad
Als de sleutel:
- even lang is als of langer dan het te coderen bericht
- werkelijk willekeurig wordt gegenereerd
- slechts eenmaal en slechts eenmaal wordt gebruikt
Dan heb je een aantoonbaar veilig cijfer dat het one time pad wordt genoemd. Je eigenlijke algoritme kan polyalfabetische substitutie gebruiken of zelfs eenvoudige xoring van het bericht met de sleutel, zolang je maar aan de drie bovenstaande criteria voldoet.
Het one-time pad kan nooit gekraakt worden. Het is een perfect encryptie schema, vanuit een wiskundig perspectief, in ieder geval.
Playfair
Dit is een voorbeeld van een polygrafisch substitutiecijfer. Het vervangt paren van karakters. De sleutel is een permutatie van {A..I,K..Z}, bijvoorbeeld:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
Om te vercijferen, schrijf de klare tekst uit (zonder spaties of leestekens), en zet een X tussen dubbele letters en aan het eind indien nodig om de tekst even lang te maken.Voor elk paar letters:
- Laat $(a,b)$ de rij en kolom van het eerste teken zijn en $(c,d)$ de rij en kolom van het tweede.
- Als $a gelijk is aan c$ en $b gelijk aan d$ dan geeft u $(a,d)(b,c)$ terug.
- Als $a = c$ dan is $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
- Als $b = d$ dan is $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.
THEN ATTACK FROM THE EAST
⇒ TH EN AT XT AC KF RO MT HE XE AS TX
⇒ UT HW GO FO DB TV YK ZK NH NA DX OF
⇒ UTHWGOFODBTVYKZKNHNADXOF
Ontcijfering volgt de regels in omgekeerde volgorde. Het Playfair cijfer is vrij onveilig.
Vier-kwadraat
Versleutelt bigrammen zoals Playfair, maar iets sterker omdat het dubbele letters toestaat en geen omgekeerde cijfertekst digrammen oplevert voor omgekeerde plaintext digrammen. Voorbeeld
a b c d e G I V E M f g h i k L B R T Y l m n o p O D A H C q r s t u F K N P Q v w x y z S U W X Z P R E M A a b c d e T U O I Z f g h i k N S H F L l m n o p V B C D G q r s t u K Q W X Y v w x y z
THEN ATTACK FROM THE EAST
⇒ TH EN AT TA CK FR OM TH EE AS TX
⇒ NI VL EV FM MO BV DF NI MA VV NX
Okee, dus iets sterker dan Playfair maar wat dan nog? Computers kunnen deze dingen kraken in seconden, of misschien minuten (gegeven genoeg cijfertekst).
Simple Block Transposition
Het eenvoudigste transpositiecijfer breekt het bericht op in blokken van grootte n, en vervormt dan elk blok volgens een permutatie van $(1..n)$.
GETTHATHEALTHINSPECTOR
TGATEHATTEHLSHENIPRCOT
.Kolom transpositie
Schrijf het bericht rij per rij in een raster, en lees het dan in kolommen uit. Volkomen onveilig. De sleutel is gewoon het aantal rijen. Raad het.
Rail Fence
De rail fence is niet beter dan de vorige, alleen grappiger. De sleutel is het aantal rails waarop je de klare tekst op een op en neer gaande manier schrijft, en de cijfertekst genereert door een rail per keer te lezen.
Voorbeeld: Om "fill out and file a WS2475 form"
te coderen op 4 rails:
f t l 4 m i u a i e 2 7 r l o n f a s 5 o l d w f
lees dan de cijfertekst "ftl4miuaie27rlonfas5oldwf"
uit. Dit is triviaal om te kraken. Raad gewoon $k$.
Combineren van Substitutie en Transpositie
Transpositie alleen is erg zwak; substitutie is zwak; ze combineren is beter. Je kan veel van de klassieke substitutiecijfers mengen met verschillende transposities, of enkele speciale combinatiecijfers gebruiken zoals bifid. Ook de meeste beroemde rotormachines en moderne cijfers gebruiken deze combinatie; in feite passen zij deze transformaties vele malen toe.
Bifid
Deze vervangt letters door hun coördinaten in een raster en doet een kolomtranspositie op de coördinaten. Voorbeeld:
Z C B M L G D A Q E T U O K H F S X V N P I Y R W
Schrijf de (rij, kolom) coördinaten onder elke letter van de klare tekst (bijv, “A” staat op rij 1, kolom 2; “T” staat op rij 2, kolom 0, enz.):
ATTACKATDAWN 122102121143 200213201244
Lees dan in rijen, groepeer per twee en zoek de letters van de cijfertekst op:
122102121143200213201244 A U B A D R T B Q T A W
Trifid
Zoals Bifid, maar dan op een kubus. Voorbeeld:
Z C B M L F V N P G D A Q E X I R W T U O K H S Y . J
Om te vercijferen, schrijf eerst de coördinaten:
ATTACKATDAWN 000001000022 122102121110 200210201221
000001000022122102121110200210201221 Z C Z O S F H Q V I N .
Enigma
De Enigma was de beroemde Duitse rotormachine uit de Tweede Wereldoorlog (eigenlijk een familie van machines).De meeste versies implementeerden een polyalfabetisch substitutiecijfer met een periode van 16900 plus een stekkerbord voor scrambling (transpositie). De sleutel bestond uit de volgorde van de rotors, de startpositie van elke roter, de ringinstellingen en de instellingen van het stekkerbord (ongeveer 1,6 × 1020 mogelijkheden). Er was elke dag een nieuwe sleutel (min of meer) voorgepubliceerd in codeboeken.
De Geallieerden waren in staat deze te kraken dankzij enkele zwakheden in het ontwerp…
- Geen letter zou naar zichzelf versleutelen
- Zelfontcijfering betekende dat er minder scrambler setup mogelijkheden waren
…maar nog belangrijker, veel zwakheden in de manier waarop het gebruikt werd…
- Het was erg makkelijk om cribs te vinden. De meeste berichten begonnen met een weerbericht.
- Al vroeg verschenen berichtsleutels twee keer achter elkaar.
…en door het verkrijgen van codeboeken van buitgemaakte schepen.
U kunt lezen over hoe de Enigma werd gebroken van de NSA, en van Wikipedia.
Moderne Cryptografische Methoden
Nu we Shannon’s informatietheorie, zeer krachtige computers, en eeuwen van theorie en praktijk achter ons hebben, zijn de meeste moderne technieken:
- werken op bit strings, niet op karakter strings
- zijn voorzichtig om patronen en redundanties in de klare tekst volledig te maskeren
- gebruiken willekeurige sleutels (die ook hergebruikt kunnen worden)
- zorgen ervoor dat zeer kleine veranderingen in de klare tekst een groot deel van de cijfertekst beïnvloeden (en vice versa). Dit wordt het lawine-effect genoemd.
Daarnaast is het prettig als het cijfer:
- efficiënt
- fouttolerant
De meeste cijfers zijn ofwel blokcijfers ofwel stroomcijfers. Blokcijfers vereisen padding en kunnen in verschillende modi werken (Zie Schnier’s boek of het Wikipedia-artikel.)
- ECB – Electronic Codebook
- CBC – Cipher Block Chaining
- CFB – Cipher Feedback
- OFB – Output Feedback
- CTR – Teller
- BC – Blokketting
- PCBC – Propagating Cipher Block Chaining
- CBCC – Cipher Block Chaining met controlesom
DES
Bij Wikipedia
IDEA
Bij Wikipedia
RC4
Bij Wikipedia
RC6
Bij Wikipedia
Blowfish
Bij Wikipedia
Twofish
Bij Wikipedia
AES
Bij Wikipedia
AES is de nieuwe standaard, die DES vervangt. Het was de winnaar van de competitie (in 2001), waar het was ingediend onder de naam Rijndael, en versloeg daarmeeRC6, Serpent, MARS, en Twofish.
Key Exchange
Diffie en Hellman (de Turing Award-winnaars van 2015) en hun vriendMerkle toonden in 1976 aan dat het voor twee mensen mogelijk was om een geheime sleutel uit te wisselen zonder elkaar in het geheim te hoeven ontmoeten:
- Alice kiest een priemgetal $n$ en stuurt dit in het geheim naar Bob
- Alice kiest een primitiveroot mod $n$ (hoe te vinden), genaamd $g$, en stuurt dit in het geheim naar Bob
- Alice kiest een geheim geheel getal $a$, en stuurt $g^a \bmod n$ ongecodeerd naar Bob
- Bob kiest een geheim geheel getal $b$, en stuurt $g^b \bmod n$ ongecodeerd naar Alice
- Alice berekent ($g^b \bmod n)^a \bmod n$ en Bob berekent ($g^a \bmod n)^b \bmod n$. Dit is de sleutel! (Het is $g^{ab} \bmod n$)
Dit is waarschijnlijk veilig, mits $n$ erg groot is en $g^a \bmod n$ ook priem is, want hoewel Eve $g$, $n$, $g^a \bmod n$, en $g^b \bmod n$ kent, is er geen bekende efficiënte manier om $a$ of $b$ hieruit te halen.Dat is het discrete logaritme probleem, weet je nog?
Voorbeeld met kleine $n$:
- Alice kiest $n=208799$ en $g=13$ en stuurt deze naar Bob
- Alice kiest $a=152335$ en Bob kiest $b=98113$
- Alice stuurt Bob $13^{152335}
- Bob stuurt Alice $13^{98133} \bmod 208799 = 147540$
- Alice berekent $147540^{152335}
- Bob berekent $73033^{98133}
- De geheime sleutel is $8435$.
Doe dit niet echt met kleine waarden van $n$.
In het algemeen, tenzij je een certificatie hebt, probeer niet om real-world systemen te beveiligen in je eentje. Maar natuurlijk kun je de algoritmen leren en het coderen oefenen.
Public Key Cryptography
Public key ciphers lossen de nachtmerrie op van het sleutelbeheer van geheime sleutelciphers, ten koste van de snelheid. In een groep van $n$ mensen heeft men slechts $n$publieke sleutels en $n$privésleutels nodig.
RSA Cryptosysteem
Diffie-Hellman versleutelt niet; het wisselt alleen een sleutel uit. RSA kan versleutelen en ontsleutelen. Zo gaat dat. Elke persoon
- Genereert twee grote priemgetallen, $p$ en $q$.
- Kiest een waarde $e$ relatief priem tot $(p-1)(q-1)$.
- Publiceert zijn of haar publieke sleutel $(N,e)$ waarbij $N = pq$.
- Berekent $d$ = modulaire inverse van $e$ ten opzichte van $(p-1)(q-1)$, en houdt die geheim.
- Verwijdert $p$ en $q$.
Kijk hier nu eens naar:
- Als Alice een bericht van $m$ naar Bob wil sturen, stuurt ze $c = m^e \bmod N$.
- Bob ontcijfert dit gemakkelijk omdat $m = c^d \bmod N$.
Een Triviaal Voorbeeld:
WAARSCHUWING!
Dit voorbeeld is alleen bedoeld ter illustratie. Implementeer nooit uw eigen crypto algoritme. Zorg er ook voor dat je begrijpt hoe verschrikkelijk publieke sleutel cryptografie is met zulke kleine sleutels. Echte sleutels zouden duizenden bits moeten hebben.
Laten we een 16 bit sleutel gebruiken (doe dit niet IRL). Genereer twee willekeurige 8-bits priemgetallen:
$p = 163 = 173$
Genereer een 16-bits priemgetal voor de encode exponent:
$e = 64013$
Nu:
$n = pq = 28199 \d = \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$
Laten we de string ¿Dónde está ud.?
coderen. Hier is het in UTF-8:
c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f
In decimaal:
194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63
Laten we nu de codeerfunctie toepassen op elk::
$194^{64013}
$194^{64013}
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$63^{64013} \bmod 28199 = 18384$
De cijfertekst is:
15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384
Om te decoderen:
$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$16824^{6797}
We krijgen het originele bericht terug!
Trouwens
Sinds symmetrische encryptie zoveel sneller is, kun je eerst een geheime sleutel genereren en die over een lijn zenden die beveiligd is met publieke sleutel cryptografie. Nu kan alle toekomstige communicatie de geheime sleutel gebruiken.
Cryptographic Hashing
Een hash, ook wel vingerafdruk, checksum, message digest genoemd, is een bitpatroon (meestal zo’n 160 bits), gegenereerd uit een bericht door een cryptografische hash-functie. Om veilig of cryptografisch te zijn, moet het computationeel ondoenlijk zijn om een bericht te vinden dat een hash heeft van een bepaalde waarde (onewayness)
Mathematisch produceert een cryptografische hashfunctie $H$ een hash van een bericht, $H(m) = c$, zodanig dat $m$ niet efficiënt kan worden bepaald uit $c$, en men niet efficiënt $m_1 \neq m_2$ kan vinden zodanig dat $H(m_1) = H(m_2)$,
Uiterlijk zal de verandering van slechts één bit in het bericht ervoor zorgen dat de digest er volledig en totaal anders uit zal zien.
$ cat willThis is my will.I leave 1000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum willc18feb890752c9e680c99d1e909fd761 will$ sed "s/1/9/g" will > Will$ cat WillThis is my will.I leave 9000 dollars to Aliceand everything else to Bob.Signed, Eve.$ md5sum Will85570bc2d0458b1f98f484261dee7d4d Will
Een veilige hash is een manier om te bepalen of er met een bericht geknoeid is.
Zie Steve Friedl’s Illustrated Guide to Cryptpgraphic Hashes.
Message Authentication Codes
Deze zijn vergelijkbaar met cryptografische hashes, behalve dat ze een geheime sleutel gebruiken, terwijl hashes alleen het bericht zelf gebruiken.
$MAC(m, k) = c$
Voor meer informatie:
- MACs vs. Hashes bij StackOverflow
- Digitale handtekeningen bij Wikpedia
- MACs bij Wikipedia
Digitale handtekeningen
Hoe kan Bob er zeker van zijn dat het bericht van Alice komt en niet van iemand anders? Door Alice het te laten ondertekenen; dat is hoe. In de praktijk ondertekent men meestal een hash, niet het hele bericht.
RSA voor Digitale Handtekeningen
Als Alice een bericht naar Bob stuurt,
- Alice codeert m met haar privésleutel
- Alice codeert met de openbare sleutel van Bob
- Bob decodeert met zijn privésleutel
- Bob decodeert met Alice’s publieke sleutel
$m = A(B'(A'(m)))$
DSA
Op Wikipedia
Cryptanalysis
Dit is een groot onderwerp en zal hier niet behandeld worden. In plaats daarvan, hier is een lijst van technieken.
- Frequentie-analyse
- Kennisloze-tekst-aanval
- Kennisloze-tekst-aanval
- Keuze-klare-tekst-aanval
- Keuze sleutelaanval
- Lineaire cryptanalyse
- Differentiële cryptanalyse
- Diefstal
- Omkoping
- Blackmail
Programmeervoorbeelden
Heh, we gaan niet laten zien hoe je je eigen crypto kunt rollen. We gaan kijken naar een aantal bestaande bibliotheken.
Zend je data over een IP netwerk?
Gebruik TLS.
Lees verder, als je een paar leuke crypto bibliotheken wilt gebruiken.
JavaScript Voorbeelden
Reference: Node crypto
.
Python Voorbeelden
Reference:Python cryptografische bibliotheken -Python hashlib
-Python secrets