87 lines
3.6 KiB
HTML
87 lines
3.6 KiB
HTML
{% extends "_layout_de.html" %}
|
|
{% block title %}Wie elGgamal und AES Encrypting funktionieren{% endblock %}
|
|
{% block content %}
|
|
<p>Die Webseite wird gerade überholt und dieses Dokument kann alte Informationen enthalten</p>
|
|
<p>
|
|
In I2P sind verschiedene Nachrichten verschlüsselt, aber wir möchten
|
|
niemanden wissen lassen, von wem oder an wen diese gebunden ist, somit k&oouml;nnen
|
|
wir nicht einfach eine "an" oder "von" Adresse anhängen.
|
|
Zusätzlich werden Nachrichten nicht in eindeutiger Reihenfolge (oder
|
|
verlässlich) transportiert, somit k&oennen wir nicht die erste Nachricht
|
|
elGamal verschlüsseln und alle weiteren mit AES. Die Alternative, alle
|
|
Nachrichten mit elGamal zu verschlüsseln, geht unter mit der Anzahl der
|
|
benötigten Nachrichten. Stattdessen nehmen wir jede einzelne Nachricht und
|
|
testen, ob diese in eine der drei Möglichkeiten passt:
|
|
</p>
|
|
|
|
<OL>
|
|
|
|
<li> es ist ElGamal verschlüsselt für uns</li>
|
|
<li> es ist AES encrypted verschlüsselt für uns</li>
|
|
<li> es ist nicht verschlüsselt für uns</li>
|
|
</OL>
|
|
<p>
|
|
Falls es für uns ElGamal verschlüsselt ist, wird die Nachricht als
|
|
neue Session behandelt und wird verschlüsselt mittels encryptNewSession(....)
|
|
in der
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/crypto/ElGamalAESEngine.html">[ElGamalAESEngine]</a>
|
|
wie folgend -</p>
|
|
|
|
<p>Ein initialer ElGamal Block, verschlüsselt <a href="how_cryptography">wie zuvor</a>:</p>
|
|
|
|
<PRE>
|
|
|_______1_______2_______3_______4_______5_______6_______7_______8
|
|
| 32 byte Session Schlüssel
|
|
|
|
|
|
|
|
| |
|
|
| 32 byte pre-IV (ersten 16 bytes von H(pre-IV) == IV)
|
|
|
|
|
|
|
|
| |
|
|
| (158 bytes zufällige Daten)
|
|
| ...
|
|
| |
|
|
</PRE>
|
|
|
|
<p>Gefolgt von dem Nachfolgendem, AES verschlüsselt <a href="how_cryptography">wie zuvor</a>,
|
|
den Session Schlüssel und den IV vom Header nutzend:</p>
|
|
|
|
<PRE>
|
|
|_______1_______2_______3_______4_______5_______6_______7_______8
|
|
| # Session Tags| so viele sessionTags (32 byte Zufallszahlen)
|
|
| ...
|
|
| | Grösse der Nutzdaten (bytes)|H(Nutzdaten)
|
|
|
|
|
|
|
|
|
|
|
| | Flag |Nutzdaten
|
|
| ...
|
|
| |
|
|
| Zufallsbytes zum füllen des ganzen AES Blocks (Grösse % 16 == 0) |
|
|
|
|
</PRE>
|
|
|
|
<p>Ist das Flag 0x01, wird es vom Session Schlüssel gefolgt, der den alten
|
|
ersetzt.</p>
|
|
|
|
<p>Die erfolgreich transportierten Sessiontags werden für eine sinnvolle
|
|
Zeit (zur Zeit 30 Minuten) gespeichert bis sie gebraucht (und weggeworfen) werden.
|
|
Sie werden für das Einpacken einer Nachricht ohne vorhergehnden ElGamal Block
|
|
genutzt. Dabei wird es mit encryptExistingSession(...) in der
|
|
<a href="http://docs.i2p-projekt.de/javadoc/net/i2p/crypto/ElGamalAESEngine.html">[ElGamalAESEngine]</a>
|
|
wie folgend verschlüsselt -</p>
|
|
|
|
<PRE>
|
|
|_______1_______2_______3_______4_______5_______6_______7_______8
|
|
| Sessiontag (32 byte Zufallszahl ungenutzt und nicht zuvor
|
|
| transportiert oder verworfen). Der Sessiontag dient auch als
|
|
| pre-IV (die ersten 16 Bytes von H(sessionTag) == IV)
|
|
| |
|
|
</PRE>
|
|
|
|
<p>Gefolgt vom AES verschlüsselten Block wie oben beschrieben
|
|
(2 byte # Sessiontags, eine Anzahl Sessiontags, Grösse der Nutzdaten,
|
|
H(Nutzdaten), Flag, Nutzdaten, Zufallsdaten zum füllen).</p>
|
|
{% endblock %}
|