• Handy zeichnet Begegnungen mit anderen Handys auf
  • Server/Betreiber kann nie sehen, wer wem begegnet ist
  • als positiv melden → nur Begegnete kriegen davon mit

📱

2e77

📱

b3b4

📱

09b5

☁️

🖥

Corona-Warn-App

  • Alice & Bob beginnen ein privates Gespräch
  • Betreiber kann nicht mitlesen, selbst wenn er alle Kommunikation mithört

🙋🏽‍♀️

🙋🏻‍♂️

🤷🏼

💬

WhatsApp, Signal, …

  • anonyme Währung
  • ohne Zentralbank, (theoretisch) dezentral
  • getätigte Zahlungen sind nicht manipulierbar

👩🏽

👨🏻

💸

🧑🏼‍🔬

💸

💸

🕵🏻‍♀️

Bitcoin

Kryptographie  ✨

🤓

  • Eingabedaten (beliebig groß) → "Fingerabdruck"/Prüfsumme
  • "Fingerabdruck"/Prüfsumme → Eingabedaten
  • leicht andere Eingabedaten → ganz anderes Ergebnis

Hash-Funktionen

SHA1("Hallo Welt!") // 726c3e8861ab0652a5043ea5faff6d3ef33fb209
SHA1("Hallo Welt!") // 726c3e8861ab0652a5043ea5faff6d3ef33fb209
SHA1("Hallo Welt?") // dff4b83f415b61a06594dc57c4972c77da0c833f
SHA1("") // da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA1("bla".repeat(1000)) // 74def80b7bb1124c70e7572955ee286c1638abb0

Hash-Funktionen

zahlenschlossCode = "3759"
SHA1(zahlenschlossCode) // 6d7b67fb3cea9b6848db728370d40b0a200350c2

Alice: Kennst du eigentlich den Code für das Zahlenschloss?
Bob: Ja, der SHA1-Hash davon ist "6d7b6…350c2"

Alice: Stimmt, du scheinst den Code zu kennen!

Eve: 🤔

Hash-Funktionen

sehr geheimes Geheimnis

6d7b67fb68…70d40350c2

Hash-Funktionen

⚙️

Hash-Funktionen

→ Beweis über Wissen
→ anonymes Nachschlagen

📱

📱

📱

☁️

🖥

Corona-Warn-App

63b9ff

75e1a5c63e44

4fb662

initialSecret = generateKey(random())
day1Secret = hash(initialSecret)

ad8536…fd2e22

day1TraceIds = shuffle([
  hash(day1Secret + 1),
  hash(day1Secret + 2),
  …
])

e0621cff3ea3

76165b

499b77

day2Secret = hash(day1Secret)
day2TraceIds = shuffle([…])

debf11aaa683

5d8556

2559c2

day3Secret = hash(day2Secret)
day3TraceIds = shuffle([…])

63b9ff

4fb662

📱

499b77

5d8556

2559c2

103cc1e11e12

34dfd874d8c5

2f7f6a

sendToServer([
  [2, day2Secret],
  [3, day3Secret]
])
initialSecret = generateKey(random())
day4Secret = hash(initialSecret)
day4TraceIds = shuffle([…])

📱

2f7f6a

e041569e1331

3944c9

day5Secret = hash(day4Secret)
day5TraceIds = shuffle([…])

🦠

🦠

🦠

🦠

🦠

🦠

🦠

🦠

🦠

e0621cff3ea3

🦠

debf11aaa683

🦠

⚙️

⚙️

⚙️

⚙️

Schlüssel generieren

key 🔑

symmetrische Verschlüsselung

45ba26b0db53967

Verschlüsseln & Entschlüsseln

Daten

verschlüsselte Daten

🗃

🗃

🔒

key 🔑

symmetrische Verschlüsselung

Verschlüsseln & Entschlüsseln

geheimnis = "sehr geheimes Geheimnis"
key = generateKey(geheimnis)

nachricht = "Niemand weiß, dass ich Rumpelstilzchen heiß."
verschlüsselt = encrypt(nachricht, key) // afe3bbc9…bff87208…11de55b7

decrypt(verschlüsselt, key) // Niemand weiß, dass ich Rumpelstilzchen heiß.

🔑

🔑

🔑

symmetrische Verschlüsselung

geheimnis = "sehr geheimes Geheimnis"
key = generateKey(geheimnis)
// 2d43dc7…2670499

Alice 🙋🏽‍♀️

Bob 🙋🏻‍♂️

key = '2d43dc7…2670499'

💃🏽

🔑

✉️

🔒

🔑

🔑

nachricht = "Ich glaube ich mag dich!"
verschlüsselt = encrypt(nachricht, key)
// afe3bbc95cdbff87208ad67011de55b7
verschlüsselt = 'afe3bbc95cdbff87208ad67011de55b7'
decrypt(verschlüsselt, key)
// Ich glaube ich mag dich!

nachricht2 = "Lass uns mal was trinken gehen!"
verschlüsselt2 = encrypt(nachricht2, key)
// 1567ce851dd4f07c80f1a39470bd78cdb58d4908
verschlüsselt2 = '1567ce851dd4f07…70bd78cdb58d4908'
decrypt(verschlüsselt2, key)
// Lass uns mal was trinken gehen!

✉️

🔒

symmetrische Verschlüsselung

Hash-Funktionen

symmetrische Verschlüsselung

→ anonymes Nachschlagen
→ Beweis über Wissen

→ private Kommunikation

Alice 🙋🏽‍♀️

Bob 🙋🏻‍♂️

💃🏽

🔑

  • für symmetrische Verschlüsselung gemeinsamer Key notwendig
  • Alice & Bob generieren Key, ohne dass Dritte ihn generieren können

Diffie-Hellman Key Exchange

Alice 🙋🏽‍♀️

Bob 🙋🏻‍♂️

Eve 🙋🏼

🔑

🔑

🤷🏼

Diffie-Hellman Key Exchange

Hash-Funktionen

symmetrische Verschlüsselung

→ anonymes Nachschlagen
→ Beweis über Wissen

→ private Kommunikation

DH Key Exchange

→ Key generieren

📱

☁️

🖥

HTTPS in Browser, Apps, …

anfrage = "gib mir /wiki/SARS-CoV-2.html"
verschlüsselteAnfrage = encrypt(anfrage, key)
send(verschlüsselteAnfrage)

Diffie-Hellman Key Exchange

🔑

🔑

verschlüsselteAnfrage = empfangen()
anfrage = decrypt(verschlüsselteAnfrage, key)
// gib mir /wiki/SARS-CoV-2.html

antwort = "Das Virus SARS-CoV-2 ist ein dem…"
verschlüsselteAntwort = encrypt(antwort, key)
send(verschlüsselteAntwort)
verschlüsselteAntwort = empfangen()
antwort = encrypt(verschlüsselteAntwort, key)
// Das Virus SARS-CoV-2 ist ein dem…

wikipedia.de

Schlüsselpaar generieren

🔓 public key

private key 🔑

asymmetrische Verschlüsselung

Verschlüsseln & Entschlüsseln

Daten

verschlüsselte Daten

🗃

🗃

🔒

public key 🔓

private key 🔑

asymmetrische Verschlüsselung

{publicKey, privateKey} = generateKeyPair()

Alice 🙋🏽‍♀️

Bob 🙋🏻‍♂️

alicesPublicKey = '37e3c19…debb421'
nachricht = 'Ich glaube ich mag dich!'
verschlüsselt = encrypt(nachricht, alicesPublicKey)
send(verschlüsselt)

bobsVerschlüsselteNachricht = '1893d8…10ab18e…7ad31d0'
decrypt(alicesVerschlüsselteNachricht, privateKey)
// Ich glaube ich mag dich!

✉️

🔒

🙆🏽‍♀️❤️

🔒

🔑

asymmetrische Verschlüsselung

🔒

🔒

🔑

Hash-Funktionen

→ anonymes Nachschlagen
→ Beweis über Wissen

symmetrische Verschlüsselung

→ private Kommunikation

DH Key Exchange

→ Key generieren

asymmetrische Verschlüsselung:

Verschlüsseln

→ private Kommunikation
→ Idenfikation

Signieren

Daten

signierte Daten

🗃

🗃

🔑

public key 🔓

private key 🔑

(Schlossmetapher funktioniert hier nicht)

asymmetrische Verschlüsselung

{publicKey, privateKey} = generateKeyPair()

Alice 🙋🏽‍♀️

Bob 🙋🏻‍♂️

alicesPublicKey = '4c75f27…017368'
nachricht = 'Ich kenne Bob, er ist cool!'
signiert = sign(nachricht, privateKey)
send(signiert)

alicesSignierteNachricht = '635e2a2…ad7cea2…7e1c4e4'
verify(alicesSignierteNachricht, alicesPublicKey)
// Ich kenne Bob, er ist cool!

🔒

🔑

🔒

Charlie 🧑🏼‍🎤

alicesPublicKey = '4c75f27…017368'

🔒

🔑

alicesSignierteNachricht = '635e2a2…ad7cea2…7e1c4e4'
verify(alicesSignierteNachricht, alicesPublicKey)
// Ich kenne Bob, er ist cool!

🔒

🔒

asymmetrische Verschlüsselung

Hash-Funktionen

→ anonymes Nachschlagen
→ Beweis über Wissen

symmetrische Verschlüsselung

→ private Kommunikation

DH Key Exchange

→ Key generieren

asymmetrische Verschlüsselung:

Signieren

→ öffentl. Identifikation

→ Beglaubigen

asymmetrische Verschlüsselung:

Verschlüsseln

→ private Kommunikation
→ Idenfikation

Krankenkassenkarte

🏥

Arztpraxis

🏢

Gesundheitsministerium

{privateKey, publicKey} = generateKeyPair()

🔒

🔑

🙋🏽‍♀️

Alice

bmgPublicKey = '871b45…1024b7'

💳

beglaubigung = "versichert: Alice" + empfangen()
// versichert: Alice c7005d…0beaac
zertifikat = sign(beglaubigung, privateKey)
// 0cea24…36671f…69016de
send(zertifikat)

🔑

🔒

🔒

🔒

🔑

🧾

🧾

alicesZertifikat = receive()
verify(alicesZertifikat, bmgPublicKey)
// versichert: Alice c7005d…0beaac
alicesPublicKey = receive()
geheimnis = random() // 092a
challenge = encrypt(geheimnis, alicesPublicKey)
send(challenge)
beweis = receive() // 092a
{publicKey, privateKey} = genKeyPair()
beweis = decrypt(challenge, privateKey)
// 092a
send(beweis)

🧾

🔒

🔒

🙋🏾‍♂️

🔒

Bonus

Bitcoin: Blockchains

        --100€--> Satoshi
Satoshi ---50€--> Alice
vorher: f65d88…9ad7f3
Alice   ---20€--> Bob
Alice   ----1€--> Satoshi
Satoshi ---10€--> Charlie

f65d889ad7f3

⚙️

b6d3eb0eea5a

⚙️

vorher: b6d3eb…0eea5a
-

34a7138c6834

⚙️

vorher: 34a713…8c6834
Bob     ----1€--> Alice
Charlie ----1€--> Alice

66ca0d1f1976

⚙️

🙋🏽‍♀️

🙋🏻‍♂️

66ca0d1f1976

vorher: f65d88…9ad7f3
Alice   ---20€--> Charlie
Alice   ----1€--> Satoshi
Satoshi ---10€--> Charlie

625b46423d93

⚙️

vorher: 625b46…423d93
-

9203f020832e

⚙️

vorher: 9203f0…20832e
Bob     ----1€--> Alice
Charlie ----1€--> Alice

0fa056b24458

⚙️

66ca0d1f1976

🧑🏼‍🎤

👀

Bitcoin: Proof of Authority

        --100€--> Satoshi
Satoshi ---50€--> Alice
vorher: f65d88…9ad7f3
Alice   ---20€--> Bob
Alice   ----1€--> Satoshi
Satoshi ---10€--> Charlie

f65d889ad7f3

⚙️

b6d3eb0eea5a

⚙️

vorher: b6d3eb…0eea5a
-

34a7138c6834

⚙️

vorher: 34a713…8c6834
Bob     ----1€--> Alice
Charlie ----1€--> Alice

66ca0d1f1976

⚙️

🙋🏽‍♀️

🙋🏻‍♂️

66ca0d1f1976

66ca0d1f1976

👀

🧾

🧾

🧾

🧾

🔒

🔑

{publicKey, privateKey} = genKeyPair()

🏢

🔒

🔒

Bitcoin: Proof of Work

        --100€--> Satoshi
Satoshi ---50€--> Alice
vorher: f65d88…9ad7f3
Alice   ---20€--> Bob
Alice   ----1€--> Satoshi
Satoshi ---10€--> Charlie

f65d889ad7f3

⚙️

b6d3eb0eea5a

⚙️

vorher: b6d3eb…0eea5a
-

34a7138c6834

⚙️

vorher: 34a713…8c6834
Bob     ----1€--> Alice
Charlie ----1€--> Alice

🙋🏽‍♀️

🙋🏻‍♂️

🧑🏼‍🎤

🙋🏼

💪x1000 = $

🖥

$

$$

$$

🖥

$

$$

🖥

$

$$

🖥

$

$$

🖥

$

$$

🖥

$

$$

🖥

$

$$

Bitcoin: Proof of Work

💪x1000 = $$$

sehr geheimes Geheimnis

6d7b67fb68…70d40350c2

⚙️

?

👌

Hierarchien aus Zertifikaten

{publicKey, privateKey} = genKeyPair()

🏢

T-Systems Trust Center

🔒

🔑

{privateKey, publicKey} = genKeyPair()

🏢

📱

🔒

beglaubigung = "bundeskanzlerin.de gehört dem PBA, 1949-09-15"
pbaZertifikat = encrypt(beglaubigung, privateKey)
// 957d2a7…01b34cdcb…5d1760cc

🏢

Presse- und Informationsamt der Bundesregierung (PBA)

🚶🏻

🧾

🧾

anfrage = decrypt("e781a5ad…4f472a4d…8a71d28", sharedKey)

antwort = zertifikat + "Bundeskanzlerin besucht Putin"
verschlüsselt = encrypt(antwort, sharedKey)
// 8a027482…9732bdf5…6cd54103
anfrage = "gib mir https://bundeskanzlerin.de"
verschlüsselt = encrypt(anfrage, sharedKey)
// e781a5ad…4f472a4d…8a71d28

Diffie-Hellman Key Exchange

🔑

🔑

[zertifikat, antwort] = decrypt("8a027482…", sharedKey)

beglaubigung = verify(zertifikat, tSystemsPublicKey)
// bundeskanzlerin.de gehört dem PBA, 1949-09-15
a = fromHex("4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2")
b = fromHex("4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2")
//                                                                                  |                                      |
MD5(a) // 008ee33a9d58b51cfeb425b0959121c9
MD5(b) // 008ee33a9d58b51cfeb425b0959121c9

SHA2 😊
SHA1 😬
MD5 😣

Hash-Funktionen: Kollisionen

Kryptographie

By Jannis R

Kryptographie

Warum Kryptographie toll ist.

  • 396