Kryptologi

author
18 minutes, 23 seconds Read
Krypteringsmateriale? Lyder sjovt.

Enhedens mål

At forstå ret godt, hvad kryptografi og kryptoanalyse går ud på, og især at vide, hvad det kan og ikke kan garantere.

Baggrund

Alice og Bob kan være personer, men også klienter og servere, peer-computere, datalagre, netværksroutere osv. Mallory kan forfalske en af deltagerne, tilføje, ændre eller slette faktiske meddelelser, kapre forbindelsen, lave et lammelsesangreb (denial of service), injicere malware osv.

Mål:

  • Fortrolighed: Det bør koste Eve mere at genvinde $m$, end $m$ er værd.
  • Autentifikation: Bob skal kunne bekræfte, at det var Alice, der sendte $m$.
  • Integritet: Bob skal kunne verificere, at $m$ ikke er blevet manipuleret.
  • Nonrepudiation: Alice bør ikke kunne benægte at have sendt $m$.

De bedste kryptosystemer antager, at Eve og Mallory kender $E$, $D$, $c$ og, hvis $k_e \neq k_d$, så også $k_e$. De fleste kryptosystemer er ikke afhængige af, at deres algoritmer holdes hemmelige, fordi:

  • Hvis din hemmelige algoritme bliver kompromitteret (nogen kunne forlade din gruppe), skal du ændre den, og det er meget sværere end blot at ændre en nøgle!
  • Offentlige algoritmer kan udsættes for tusindvis af eksperter, der leder efter fejl, så du har en vis grad af tillid til dem, der tåler en nærmere undersøgelse.

Videre læsning: Security Through Obscurity,Kerchoffs Principle andthis discussion.

Studiet af kryptologi omfatter udformning af forskellige krypteringskoder, kryptoanalysemetoder (angreb), nøgleudveksling, nøgleautentificering, kryptografisk hashing, digital signering og sociale spørgsmål (juridiske, politiske osv.). Se Wikipedias side om emner inden for kryptografi.

GØR IKKE DETTE SELV I REELLE ANVENDELSER

Sikkert, det er fint nok at lege derhjemme, men prøv ALDRIG at rulle din egen kryptografi til noget reelt. Overlad det til de professionelle. Hvis du selv bliver professionel, så, mmmmmmm, okay.
Dette har været en vigtig public service-meddelelse.

Definitioner

Ord, du skal vide:

Kryptografi Kunsten og videnskaben om at lave kryptering. Kryptoanalyse Kunsten og videnskaben om at bryde kryptering, dvs. udtrækning af $m$ givet $c$, $E$, $D$ og eventuelt $k_e$. Kryptologi Studiet af kryptografi og kryptanalyse.

Opgave: Find ud af noget om steganografi. Hvordan adskiller den sig fra kryptografi?

Kryptosystem En bestemt pakke af algoritmer og protokoller til kryptering, dekryptering og nøglegenerering. Eksempler: Cramer-Shoup-kryptosystem, Rabin-kryptosystem, Benaloh-kryptosystem, RSA-kryptosystem. Kryptografisk system Ethvert system, der anvender kryptografi. Cipher En algoritme, der anvendes i et kryptosystem.

Øvelse: Hvordan er en “kode” forskellig fra en “cipher”? Er koder mere sikre end kryptering? Hvorfor bruges de ikke så ofte?

Forvirring Den egenskab, at forholdet mellem klartekst, ciffertekst og nøgle er så kompliceret, at det er ubrugeligt for kryptoanalytikeren. Diffusion Den egenskab, at statistiske mønstre i klarteksten spredes bredt i hele cifferteksten.

Tidslinjer

Hvis du kan lide historie….

  • Wikipedia’s History of Cryptography Article
  • Wikipedia’s Timeline
  • Carl Ellison’s Timeline

Kyper af krypteringstyper

Her er nogle nyttige kategorier af krypteringstyper. Bemærk, at en bestemt kryptering kan tilhøre mere end én af disse kategorier.

  • Klassisk: En kryptering, der er let nok til at kunne udføres i hånden, normalt baseret på tegn. Også kaldet manuel.
  • Moderne: Stort set enhver kryptering, der ikke er klassisk.
  • Substitution: Hvert tegn i klarteksten erstattes med et eller flere tegn for at lave en ciffertekst.
  • Transposition: Karakterer i klarteksten omarrangeres for at danne cifferteksten.
  • Monoalfabetisk: En substitutionsciffer, hvor et tegn i klarteksten altid erstattes af det samme tegn.
  • Polyalfabetisk: En polyalfabetisk ciffer, hvor et tegn i klarteksten altid erstattes af det samme tegn: En substitutionsciffer, der i det væsentlige anvender flere monoalfabetiske substitutionstilknytninger.
  • Homofonisk: En substitution, hvor et tegn kan afbildes til et af et sæt tegn.
  • Polygrafisk: En substitution af blokke af tegn til blokke af tegn.
  • Periodisk: En polyalfabetisk ciffer, hvor udskiftningsskemaet gentages.
  • Ikke-periodisk: Selvforklarende, hvis man forstår periodisk.
  • Blok: Kryptering finder ikke sted pr. tegn, men pr. blokke af tegn.
  • Stream: En kryptering, der opererer på en datastrøm af ukendt længde, som normalt indeholder feedback.
  • Hemmelig nøgle: En kode, der opererer på en datastrøm af ukendt længde, som normalt indeholder feedback: En kryptering, hvor $k_e$ og $k_d$ er ens eller kan afledes trivielt fra hinanden; kræver, at parterne mødes i hemmelighed for at udveksle de nøgler, de skal bruge. Også kaldet symmetrisk.
  • Offentlig nøgle: En ordning, hvor alles krypteringsnøgle er offentligt kendt, men hvor deres dekrypteringsnøgle holdes hemmelig. Også kaldet asymmetrisk.

Secret Key Cryptography

Secret key (a.k.a. symmetric key) ciphers er meget hurtigere end public key ciphers, men key management kan være et stort problem.

  • Hvis $n$ personer i en gruppe skal kommunikere, har de brug for $\frac{n(n-1)}{2}$ nøgler.
  • Nøgler skal distribueres sikkert (hemmeligt).
  • Nøgler skal opbevares sikkert.
  • Nøgler skal skiftes hyppigt, hvilket giver tilbage til fordelingshovedpinen.

NOTE

I de tegnbaserede eksempler nedenfor antager vi (uden tab af generalitet) et alfabet med 26 symboler (A..Z).

Caesar Cipher

En fuldstændig patetisk og usikker cipher efter moderne standarder. Krypteringsnøglen $k_e$ er et lille heltal og $k_d = k_e$. For at kryptere skal $k_e$ lægges til hvert tegn i klartekst; for at dekryptere skal det trækkes fra.

Eksempel: For k=5 bliver ATTACKATDAWN til FYYFHPFYIFBS

Triveligt at knække: Du skal bare gætte $k_e$.

Monoalfabetisk substitution

I stedet for blot at tilføje en fast offset til hvert tegn kan du på forhånd beregne en substitutionstabel ved at generere en tilfældig permutation af dit alfabet. For eksempel:

 ABCDEFGHIJKLMNOPQRSTUVWXYZ MQHPSVJYCURFTBILAKWNGZDOEX

Nu er ATTACKATDAWN nu MNNMHRMNPMDB.

Du kan ikke knække dette ved at gætte nøglen (der er $n!$ mulige nøgler), men frekvensanalyse kan knække enhver monoalfabetisk substitutionsciffer, forudsat at meddelelsen er lang nok.

For teknikker, hvis nøgle er en permutation, er en måde at gøre nøglen lettere at huske på at vælge en sætning, lægge dens unikke bogstaver ud og derefter udfylde de manglende bogstaver i rækkefølge. F.eks. giver PREMATURE OPTIMIZATION IS THE ROOT OF ALL EVIL denne substitutionsafbildning:

 PREMATUOIZNSHFLVBCDGJKQWXY

Homofonisk substitution

Hvert bogstav i klartekst svarer til et eller flere symboler i cifferteksten. Antallet af mål bør være proportionalt med dets hyppighed (for at undgå frekvensanalyse). Eksempel:

 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

For at kryptere skal der vælges tilfældigt blandt mulighederne. Eksempel: En mulig kryptering af ATTACKATDAWN er

 56 78 20 95 65 07 12 72 06 50 92 61

Simple Vigenère

Den kryptering, der er kendt som den simple shift Vigenère-kryptering, blev slet ikke opfundet af Vigenère … den synes først at være blevet beskrevet af Giovan Battista Bellaso. Nøglen er en streng, som man tilføjer til klarteksten med modulær addition, som i dette eksempel (A=0, B=1, C=2, …, Z=25):

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUARKQUAR Ciphertext: JUKVKSIPPYVSOLBFILZMONOEYHGANSBWOOYDNHVDXCRUPBIOI

For at generere ciffertekst i hånden kan man bruge et kodehjul eller en tabula recta.

Denne ordning er ikke sikker, da nøglen gentager sig. Hvis det er muligt at bestemme nøglelængden, kan kryptoanalytikeren foretage flere frekvensanalyser (en for hver forskydningsværdi i nøglen). Metoder til bestemmelse af nøglelængden er Kaisiski-metoden og Friedman-testen.

For binære data (dvs. en sekvens af bits) er modulær addition base-2 blot en simpel xor. Eksempel:

 Plaintext: 0110000101010000111101001010101010010000001111101 Key: 0000011100000111000001110000011100000111000001110 Ciphertext: 0110011001010111111100111010110110010111001110011

Autokey Vigenère

Vigenère skabte faktisk en autokey cipher, som er stærkere, fordi nøglen aldrig gentages. I stedet består “nøglen” af nøgleudtrykket efterfulgt af klarteksten, som her:

 Plaintext: TAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRDFLOOR Key: QUARKTAKEACOPYOFYOURPOLICYTONORMAWILCOXONTHETHIRD Ciphertext: JUKVKVOZCOHMDSFUMZCTNHZVQPFOJWCOOTWYVVBHUBYHYSWFU

Den brugte klarteksten som en del af nøglen. Du kunne også bruge cipherteksten. Se hvordan?

Moderne autokey-chifre

Du kan stadig knække autokey Vigenère-chifre ved hjælp af sproglig analyse, fordi nøglen indeholder tekst og dermed sandsynligvis har højfrekvente bogstaver. Moderne auto-key ciphers genererer forskydningsværdierne med en tilfældig talgenerator. Nøglen giver generatoren frø til generatoren.

Øvelse: Implementer en autokey cipher i et programmeringssprog efter eget valg.

One Time Pad

Hvis nøglen:

  • er lige så lang som eller længere end den meddelelse, der skal kodes
  • er virkelig tilfældigt genereret
  • bruges én gang og kun én gang

Så har du en beviseligt sikker cipher kaldet one time pad. Din egentlige algoritme kan bruge polyalfabetisk substitution eller endda simpel xoring af meddelelsen med nøglen, så længe du opfylder de tre ovenstående kriterier.

Engangskoden kan aldrig knækkes. Det er en perfekt krypteringsordning, i hvert fald ud fra et matematisk perspektiv.

Øvelse:

Playfair

Dette er et eksempel på en polygrafisk substitutionsciffer, der erstatter parvis af tegn. Nøglen er en permutation af {A..I,K..Z}, f.eks.:

 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

For at kryptere skal du skrive klarteksten (uden mellemrum eller tegnsætning) og indsætte et X mellem dobbelte bogstaver og i slutningen, hvis det er nødvendigt for at gøre teksten lige lang.Derefter for hvert bogstavpar:

  • Lad $(a,b)$ være række og kolonne for det første tegn og $(c,d)$ være række og kolonne for det andet.
  • Hvis $a \neq c$ og $b \neq d$ så returnerer du $(a,d)(b,c)$.
  • Hvis $a = c$, så returneres $(a,(b+1) \bmod 5)(c,(d+1) \bmod 5)$.
  • Hvis $b = d$, så returneres $((a+1) \bmod 5,b)((c+1) \bmod 5,d)$.

Eksempel: THEN ATTACK FROM THE EASTTH EN AT XT AC KF RO MT HE XE AS TXUT HW GO FO DB TV YK ZK NH NA DX OFUTHWGOFODBTVYKZKNHNADXOF

Dekryptering kører reglerne i omvendt rækkefølge. Playfair cipheris pretty insecure.

Four-square

Krypterer digraffer som playfair, men lidt stærkere, fordi den tillader dobbeltbogstaver og ikke giver omvendte ciphertextdigraffer for omvendteplaintextdigraffer. Eksempel

 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
Eksempel: THEN ATTACK FROM THE EASTTH EN AT TA CK FR OM TH EE AS TXNI VL EV FM MO BV DF NI MA VV NX

Okay, så lidt stærkere end Playfair, men hvad så? Computere kan knække disse ting på få sekunder eller måske minutter (hvis de får nok ciffertekst).

Simple Block Transposition

Den enkleste transpositionsciffer opdeler meddelelsen i blokke af størrelse n og forvrænger derefter hver blok i henhold til en permutation af $(1..n)$.

Eksempel: For nøglen $(4,1,6,3,2,5)$ bliver budskabet GETTHATHEALTHINSPECTOR til TGATEHATTEHLSHENIPRCOT.

Kolonnetransposition

Skriv budskabet række for række ud i et gitter, og læs det derefter op i kolonner. Helt usikkert. Nøglen er blot antallet af rækker. Gæt det.

Rail Fence

Rail fence er ikke bedre end den sidste, bare sjovere. Nøglen er antallet af skinner, hvorpå du skriver klarteksten op og ned, og genererer cipherteksten ved at læse en skinne ad gangen.

Eksempel: For at kode "fill out and file a WS2475 form" på 4 skinner:

 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

læser du derefter den krypterede tekst "ftl4miuaie27rlonfas5oldwf". Dette er trivielt at knække. Du skal blot gætte $k$.

Kombination af substitution og transposition

Transposition alene er meget svag; substitution er svag; at kombinere dem er bedre. Du kan blande mange af de klassiske substitutionscifre med forskellige transpositioner eller bruge nogle specielle kombinationscifre som f.eks. bifid. Desuden bruger de fleste af de berømte rotormaskiner og moderne chiffrer denne kombination; faktisk anvender de disse transformationer mange gange.

Bifid

Denne her erstatter bogstaver med deres koordinater i et gitter og foretager en kolonneformet transposition på koordinaterne. Eksempel:

 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

Skriv (række, kolonne)-koordinaterne under hvert bogstav i klarteksten (f.eks, “A” står i række 1, kolonne 2; “T” står i række 2, kolonne 0 osv.):

 ATTACKATDAWN 122102121143 200213201244

Læs derefter op i rækker, gruppér to og to og slå op i ciffertekstens bogstaver:

 122102121143200213201244 A U B A D R T B Q T A W

Trifid

Lignende Bifid, men på en terning. Eksempel:

 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

For at kryptere skal du først skrive koordinaterne:

 ATTACKATDAWN 000001000022 122102121110 200210201221
 000001000022122102121110200210201221 Z C Z O S F H Q V I N .

Enigma

Enigma var den berømte tyske rotormaskine fra anden verdenskrig (faktisk en familie af maskiner). de fleste versioner implementerede en polyalfabetisk substitutionsciffer med en periode på 16900 plus et stikbræt til scrambling (transposition). Nøglen bestod af rotorernes rækkefølge, startpositionen for hver rotor, ringindstillingerne og plugboardindstillingerne (ca. 1,6 × 1020 muligheder). Der var en ny nøgle hver dag (mere eller mindre), som blev offentliggjort på forhånd i kodebøger.

De allierede var i stand til at knække den takket være nogle svagheder i dens udformning …

  • Ingen bogstaver ville kryptere til sig selv
  • Selv-gensidighed betød, at der var færre muligheder for opsætning af scramblere

…men endnu vigtigere, mange svagheder i den måde, den blev brugt på…

  • Det var virkelig nemt at finde krybber. De fleste meddelelser begyndte med en vejrudsigt.
  • Først optrådte meddelelsesnøgler to gange i træk.

…og ved at skaffe kodebøger fra erobrede skibe.

Du kan læse om, hvordan Enigma blev knækket, fraNSAog fraWikipedia.

Moderne kryptografiske metoder

Nu, hvor vi har Shannons informationsteori, meget kraftige computere og århundreders teori og praksis bag os, kan de fleste moderne teknikker:

  • opererer på bitstrenge, ikke tegnstrenge
  • er omhyggelige med at maskere mønstre og redundanser i klarteksten fuldstændigt
  • anvender tilfældige nøgler (som også kan genbruges)
  • sikrer, at meget små ændringer i klarteksten påvirker en stor del af den krypterede tekst (og vice versa). Dette kaldes AvalancheEffekten.

Dertil kommer, at det er rart, hvis krypteringen er:

  • effektiv
  • effektiv
  • fejltolerant

De fleste krypteringer er enten block ciphers eller stream ciphers. Block ciphers kræver padding og kan fungere i forskellige modes (Se Schniers bog eller Wikipedia-artiklen.)

  • ECB – Electronic Codebook
  • CBC – Cipher Block Chaining
  • CFB – Cipher Feedback
  • OFB – Output Feedback
  • CTR – Tæller
  • BC – Block Chaining
  • PCBC – Propagating Cipher Block Chaining
  • CBCC – Cipher Block Chaining with Checksum

DES

At Wikipedia

IDEA

At Wikipedia

RC4

At Wikipedia

RC6

At Wikipedia

Blowfish

At Wikipedia

Twofish

At Wikipedia

AES

At Wikipedia

AES er den nye standard, som erstatter DES. Den blev vinder af konkurrencen (i 2001), hvor den blev indsendt under navnet Rijndael, og vandt overRC6, Serpent, MARS og Twofish.

Nøgleudveksling

Diffie og Hellman (Turing Award-vinderne i 2015) og deres venMerkle viste i 1976, at det var muligt for to personer at udveksle en hemmelig nøgle uden at skulle mødes i hemmelighed:

  • Alice vælger et primtal $n$ og sender dette klart til Bob
  • Alice vælger en primtalveroot mod $n$ (hvordan man finder), kaldet $g$, og sender dette klart til Bob
  • Alice vælger et hemmeligt heltal $a$, og sender $g^a \bmod n$ i det fri til Bob
  • Bob vælger et hemmeligt heltal $b$ og sender $g^b \bmod n$ i det fri til Alice
  • Alice udregner ($g^b \bmod n)^a \bmod n$og Bob udregner ($g^a \bmod n)^b \bmod n$. Dette er nøglen!(Det er $g^{ab} \bmod n$)

Dette er sandsynligvis sikkert, forudsat at $n$ er meget stort og $\frac{n-1}{2}$ også er et primtal, for selv om Eve kender $g$, $n$, $g^a \bmod n$ og $g^b \bmod n$, er der ingen kendt effektiv måde at få $a$ eller $b$ ud fra disse.Det er det diskrete logaritmeproblem, husker du det?

Eksempel med små $n$:

  • Alice vælger $n=208799$ og $g=13$ og sender disse til Bob
  • Alice vælger $a=152335$ og Bob vælger $b=98113$
  • Alice sender $13^{152335}$ til Bob \bmod 208799 = 73033$
  • Bob sender Alice $13^{98133} \bmod 208799 = 147540$
  • Alice beregner $147540^{152335} \bmod 208799 = 8435$
  • Bob beregner $73033^{98133} \bmod 208799 = 8435$
  • Den hemmelige nøgle er $8435$.

Du må ikke gøre dette med små værdier af $n$.

Medmindre du får en form for certificering, skal du generelt ikke forsøge at sikre systemer i den virkelige verden på egen hånd. Men selvfølgelig dogo fremad og læralgoritmerne og øv dig i kodning for nu.

Public Key Cryptography

Public key ciphers løser nøglehåndteringsmareridtet ved hemmelige keyciphers, på bekostning af hastighed. I en gruppe på $n$ personer har man kun brug for $n$offentlige nøgler og $n$ private nøgler.

RSA-kryptosystem

Diffie-Hellman foretager ikke kryptering; den udveksler blot en nøgle.RSA kan kryptere og dekryptere. Her er hvordan. Hver person

  • Genererer to store primtal, $p$ og $q$.
  • Vælger en værdi $e$ relativt primtal til $(p-1)(q-1)$.
  • Offentliggør sin offentlige nøgle $(N,e)$, hvor $N = pq$.
  • Beregner $d$ = modulær invers af $e$ relativt til $(p-1)(q-1)$, og holder den hemmelig.
  • Det ødelægger $p$ og $q$.

Kontroller nu dette:

  • For at Alice kan sende en besked $m$ til Bob, sender hun $c = m^e \bmod N$.
  • Bob afkoder dette let, fordi $m = c^d \bmod N$.

Ovelse: Undersøg matematikken bag RSA. Hvorfor virker det, i detaljer? Dit svar skal gøre brug af de sætninger, der ligger til grund for Eulers totientfunktion; sørg for at vise, hvordan den bl.a. reduceres til $(p-1)(q-1)$, når $pq$ er primtal.
Opgave: Diffie-Hellman (DH) betragtes nogle gange som en del af kryptografi med offentlige nøgler, selv om den beskæftiger sig med nøgleudveksling og ikke i sig selv er en krypteringsalgoritme. Hvorfor betragter nogle mennesker den så som en offentlig nøgle? (Svaret på dette kræver en del forskning.)

Et trivielt eksempel:

ADVARSEL!
Dette eksempel er kun til illustration. Du må aldrig implementere din egen kryptoalgoritme. Sørg også for, at du forstår, hvor forfærdelig offentlig nøglekryptografi er med så små nøgler. Rigtige nøgler bør have tusindvis af bits.

Lad os bruge en nøgle på 16 bit (GØR IKKE DETTE IRL). Generer to tilfældige 8-bit primtal:

$p = 163\\\q = 173$

Generer et 16-bit primtal til den kodede eksponent:

$e = 64013$

Nu:

$n = pq = 28199 \\d = \mathsf{modInverse}(e, (p-1)(q-1)) = 6797$

Lad os kode strengen ¿Dónde está ud.?. Her er den i UTF-8:

c2 bf 44 c3 b3 6e 64 65 20 65 73 74 c3 a1 20 75 64 2e 3f

I decimaltal:

194 191 68 195 179 110 100 101 32 101 115 116 195 161 32 117 100 46 63

Lad os nu anvende kodningsfunktionen på hver::

$194^{64013} \bmod 28199 = 15626$
$191^{64013} \bmod 28199 = 19945$
$68^{64013} \bmod 28199 = 27982$
$\vdots$
$63^{64013} \bmod 28199 = 18384$

Den krypterede tekst er:

15626 19445 27982 22746 2679 7739 16824 23107 9054 23107 8378 16412 22746 5566 9054 881 16824 17864 18384

At afkode:

$15626^{6797} \bmod 28199 = 194$
$19445^{6797} \bmod 28199 = 191$
$27982^{6797} \bmod 28199 = 68$
$\vdots$
$16824^{6797} \bmod 28199 = 63$

Vi får den oprindelige besked tilbage!

Forresten
Da symmetrisk kryptering er så meget hurtigere, kan man først generere en hemmelig nøgle og sende den over en linje, der er sikret med offentlig nøglekryptografi. Nu kan al fremtidig kommunikation bruge den hemmelige nøgle.

Kryptografisk hashning

En hash, også kaldet fingeraftryk, checksum, message digest er et bitmønster (normalt omkring 160 bits eller deromkring), der genereres fra en besked af en kryptografisk hashfunktion. For at hash’en skal være sikker eller kryptografisk, skal det være beregningsmæssigt umuligt at

  • finde en meddelelse, der hashes til en given værdi (onewayness)
  • finde to meddelelser, der hashes til den samme værdi (collision-resistance)

Matematisk set producerer en kryptografisk hashfunktion $H$ en hash fra en meddelelse, $H(m) = c$, således at $m$ ikke kan bestemmes effektivt ud fra $c$, og man kan ikke effektivt finde $m_1 \neq m_2$ således at $H(m_1) = H(m_2)$,

Sædvanligvis vil ændringen af blot en enkelt bit i meddelelsen medføre, at digestet ser helt og aldeles anderledes ud.

$ 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

En sikker hash giver en måde at afgøre, om der er blevet manipuleret med en meddelelse.

Se Steve Friedls illustreret guide til kryptografiske hashes.

Message Authentication Codes

Disse ligner kryptografiske hashes, bortset fra at de bruger en hemmelig nøgle, mens hashes blot bruger selve meddelelsen.

$MAC(m, k) = c$

For yderligere oplysninger:

  • MAC’er vs. Hashes på StackOverflow
  • Digitale signaturer på Wikpedia
  • MACs på Wikipedia

Digitale signaturer

Hvordan kan Bob være sikker på, at beskeden kommer fra Alice og ikke fra en anden?Ved at Alice underskriver den; det er sådan. I praksis signerer man normalt en hash, ikke hele meddelelsen.

RSA for digitale signaturer

For Alice at sende en meddelelse til Bob,

  • Alice krypterer m med sin private nøgle
  • Alice krypterer med Bobs offentlige nøgle
  • Bob dekrypterer med sin private nøgle
  • Bob dekrypterer med Alices offentlige nøgle

$m = A(B'(B(A'(m)))$

DSA

På Wikipedia

Cryptanalysis

Det er et stort emne og vil ikke blive dækket her. I stedet er der her en liste over teknikker.

  • Frekvensanalyse
  • Kendt klartekstangreb
  • Kendt ciffertekstangreb
  • Kvalgt klartekstangreb
  • Kvalgt key attack
  • Linear cryptanalysis
  • Differential cryptanalysis
  • Theft
  • Bribery
  • Bribery
  • Blackmail
Opgave: Lav nogle selvstudier om kryptoanalyse eller find et sjovt online-kursus.

Programmeringseksempler

Heh, vi har ikke tænkt os at vise, hvordan du ruller din egen krypto. Vi vil kigge på nogle aktuelle, spændende biblioteker.

Overfører du data over et IP-netværk?
Brug TLS.
Læs dog videre, hvis du vil bruge nogle sjove kryptobiblioteker.

JavaScript Eksempler

Reference: Node crypto.

Python Eksempler

Reference: Python kryptografiske biblioteker -Python hashlib -Python secrets

Java Eksempler

Reference: Python kryptografiske biblioteker -Python hashlib -Python secrets

Java Eksempler

Similar Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.