Anmelden

Schlüsseltechnologie· Staffel 1· Folge 43

STP043: Kryptografische Primitiven

Donnerstag, 7. September 2023 · 1 h 13

MP3

Shownotes

<p>Im zweiten Teil unserer Reihe über Kryptografie besehen wir uns einzelne Klassen von Bausteinen, welche dann zu Verschlüsselungsprotokollen zusammengesetzt werden können.</p><h2>Shownotes</h2><ul>
<li>
<p>Rückblick zu STP041</p>
<ul>
<li>Kryptografische Systeme dienen dem Erreichen der vier Schutzziele (Vertraulichkeit, Integrität, Authentizität, Verbindlichkeit)</li>
<li>Implementierung vollständiger Kryptosysteme braucht <strong>Primitiven</strong> (Grundbausteine)</li>
<li>heute: Vorstellung grundlegender Klassen von Primitiven</li>
</ul>
</li>
<li>
<p><a href="de.wikipedia.org/w/index.php?title=Symmetrisch… Verschlüsselung</a></p>
<ul>
<li>Schritt 1: Klartext (Plaintext) + Schlüssel (Key) -> Geheimtext (Ciphertext)</li>
<li>Schritt 2: Geheimtext + selber Schlüssel -> Klartext</li>
<li>üblicherweise als <strong>Blockchiffre</strong> mit Beschränkung des Klartexts auf eine Blockgröße von z.B. 128 oder 256 Bits, übliche Schlüsselgrößen ähnlich groß</li>
<li>zwei Probleme:
<ol>
<li>Wie verschlüsselt man mehr als einen Block?</li>
<li>Wie einigt man sich auf einen gemeinsamen Schlüssel, ohne dass Beobachter den Schlüssel abgreifen können?</li>
</ol>
</li>
</ul>
</li>
<li>
<p>zu Problem 1: Erweiterung der Blockchiffre zu einem <strong>Stromchiffre</strong> mittels eines geeigneten <a href="de.wikipedia.org/w/index.php?title=Betriebsmod…)&oldid=209978117">Betriebsmodus</a></p>
<ul>
<li>Datenstrom wird in einzelne Blöcke der gewünschten Größe zerteilt; Betriebsmodus beschreibt dann die Anwendung des Blockchiffre auf die Folge von Blöcken</li>
<li>einfachster Betriebsmodus ist ECB (Electronic Codebook): der Blockchiffre wird auf jeden Block komplett separat angewendet -> <a href="en.wikipedia.org/w/index.php?title=Block_ciphe…)">offensichtliche Probleme (siehe Bild im verlinkten Abschnitt)</a></li>
<li>bei den meisten modernen Betriebsmodi werden meist Daten aus dem aktuellen Blockchiffre in den nächsten Block übertragen, um die Analyse des Geheimtextes zu erschweren -> Problem: schwer parallelisierbar, Lesezugriff nur sequentiell</li>
<li>CTR-Betriebsmodus (Counter): jeder Block wird beim Verschlüsseln mit einem Zähler kombiniert, damit sich keine wiederkehrenden Muster wie bei ECB ergeben -> Vorteil: wahlfreier Schreib- und Lesezugriff möglich (interessant für Festplattenverschlüsselung)</li>
<li>siehe unten: Beispiel für die Geschwindigkeit moderner Stromchiffern insb. mit Hardwareunterstützung</li>
</ul>
</li>
</ul>
<pre><code>$ cryptsetup benchmark
...
# Algorithm | Key | Encryption | Decryption
...
aes-xts 512b 3547,4 MiB/s 3540,4 MiB/s
serpent-xts 512b 742,7 MiB/s 729,4 MiB/s
twofish-xts 512b 398,9 MiB/s 404,8 MiB/s
</code></pre>
<ul>
<li>
<p>zu Problem 2 (Einigung auf einen gemeinsamen Schlüssel) zwei Ansätze:</p>
<ol>
<li>Schlüsselaustausch-Protokolle wie <a href="media.ccc.de/v/ds21-122-schlsseltechnologie-li…;
<li>asymmetrische Verschlüsselung</li>
</ol>
</li>
<li>
<p><a href="de.wikipedia.org/w/index.php?title=Asymmetrisc… Verschlüsselung</a></p>
<ul>
<li>statt einem einzelnen Schlüssel ein <strong>Schlüsselpaar</strong>
<ul>
<li>wir haben keine gute Bildmetapher dazu; Xyrills Vorschlag: zwei Ratschen; eine dreht nur nach rechts und eine nur nach links</li>
</ul>
</li>
<li>Schritt 1: Klartext + <strong>öffentlicher Schlüssel</strong> -> Geheimtext</li>
<li>Schritt 2: Geheimtext + <strong>privater Schlüssel</strong> -> Klartext</li>
<li>Beispiel <a href="youtube.com/playlist?list=PL6_AeYXBHF0OWS1GxV6…;:
<ul>
<li>Grundgeheimnis sind zwei sehr große Primzahlen (<code>p</code> und <code>q</code>, jeweils z.B. 500 Dezimalstellen)</li>
<li>aus dem Produkt dieser Primzahlen (<code>N = p * q</code>) werden zwei weitere Zahlen (<code>d</code> und <code>e</code>) mittels günstiger Rechenoperationen abgeleitet</li>
<li>dann ist der öffentliche Schlüssel das Zahlenpaar <code>d,N</code> und der private Schlüssel das Zahlenpaar <code>e,N</code></li>
<li>Ableitung des privaten aus dem öffentlichen Schlüssel erfordert Primzahlfaktorisierung von <code>N</code>, was extrem teuer ist (siehe Beispiel unten)</li>
</ul>
</li>
<li>Problem 1 teilweise gelöst: Empfänger muss nur seinen öffentlichen Schlüssel offenbaren, der kein Geheimnis enthält</li>
<li>Problem 2 ungelöst: auch asymmetrische Verschlüsselung arbeitet nur pro Block</li>
</ul>
</li>
</ul>
<pre><code>$ time factor 1350918345091284620469824069824602946802496824562049682046982406982406980
1350918345091284620469824069824602946802496824562049682046982406982406980: 2 2 3 5 7 193 941 5077 3488395463852632669275489205712092360621005476304268749586169
factor 1,92s user 0,00s system 99% cpu 1,926 total
$ time factor 1350918345091284620469824069824602946802496824562049682046982406982406981
1350918345091284620469824069824602946802496824562049682046982406982406981: 11 3931 5242879872157046321 5958863859256362497309559371496021100634736129421
factor 462,19s user 0,01s system 99% cpu 7:43,24 total
</code></pre>
<ul>
<li>
<p>neues Problem: asymmetrische Verfahren sind sehr viel rechenaufwändiger als symmetrische Verfahren -> <strong>hybrides Kryptosystem</strong></p>
<ul>
<li>asymmetrische Verschlüsselung wird nur zum Austausch eines symmetrischen Schlüssels verwendet</li>
<li>Beispiel "verschlüsselte E-Mail": Alice hat den öffentlichen Schlüssel <code>O</code>, Bob hat den privaten Schlüssel <code>P</code> dazu
<ul>
<li>Alice erstellt die Nachricht <code>N</code> im Klartext</li>
<li>Alice erzeugt einen zufälligen symmetrischen Schlüssel <code>S</code></li>
<li>Alice verschlüsselt <code>N</code> mit <code>S</code> und einem Stromchiffre zu <code>N'</code></li>
<li>Alice verschlüsselt <code>S</code> mit <code>O</code> zu <code>S'</code></li>
<li>Alice schickt <code>N'</code> und <code>S'</code> an Bob</li>
<li>Bob entschlüsselt <code>S'</code> mit <code>P</code> zu <code>S</code></li>
<li>Bob entschlüsselt <code>N'</code> mit <code>S</code> zu <code>N</code></li>
</ul>
</li>
</ul>
</li>
<li>
<p>zweite Anwendung von asymmetrischer Kryptografie: <a href="de.wikipedia.org/w/index.php?title=Digitale_Si…;
<ul>
<li>Verschlüsselung: vorwärts mit dem öffentlichen Schlüssel, rückwärts mit dem privaten Schlüssel</li>
<li>bei Signierung umgekehrt: vorwärts mit dem privaten Schlüssel (Erzeugung), rückwärts mit dem öffentlichen Schlüssel (Überprüfung)</li>
<li>im Detail: erst Komprimierung der zu signierenden Daten auf eine feste Größe mittels einer Hashfunktion (siehe STP004), dann Verschlüsselung dieses Hash-Wertes mit dem privaten Schlüssel</li>
<li>Überprüfung: Berechnung des Hashes auf dieselbe Weise, Vergleich mit entschlüsselter Signatur</li>
</ul>
</li>
<li>
<p>noch eine Primitive zum Schluss: <a href="de.wikipedia.org/w/index.php?title=Secret-Shar…;
<ul>
<li>Problem: Ein Geheimnis soll in N Teile so aufgeteilt werden, dass M beliebige Teile zum Entschlüsseln genutzt werden können.</li>
<li>Beispiel: Backup des Passwortspeichers in 5 Fragmente aufteilen und bei 5 Freunden so einlagern, dass man später nur 3 beliebige Fragmente zum Wiederherstellen braucht</li>
<li>Illustrationen: <a href="de.wikipedia.org/w/index.php?title=Visuelle_Kr… Kryptografie</a>, <a href="en.wikipedia.org/w/index.php?title=Secret_shar…;
</ul>
</li>
<li>
<p>im Gespräch erwähnt</p>
<ul>
<li><a href="anerzaehlt.net/aes-256/">Anerzählt Podcast zu AES</a></li>
<li><a href="youtube.com/watch?v=lt7uW6vDk00">Whitf… Diffie und Moxie Marlinspike und eine Flasche Whiskey auf der Bühne</a></li>
</ul>
</li>
</ul>

Anmelden oder registrieren

Jetzt

0:00 / 0:00