it-swarm.com.de

Was ist der Unterschied zwischen Diffie Hellman Generator 2 und 5?

Das Generieren von Diffie Hellman-Parametern in OpenSSL kann wie folgt erfolgen:

$ openssl dhparam -out dh2048.pem 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time 
[...]

Der "Generator 2" hat dort meine Aufmerksamkeit erregt. Es scheint, dass ich zwischen Generator 2 und 5 wählen kann, wie in der Manpage angegeben (man dhparam):

-2, -5
   The generator to use, either 2 or 5. 2 is the default. If present then the input file
   is ignored and parameters are generated instead.
  • Was ist Generator 2 und 5?
  • Wie wirkt sich die Auswahl von 5 anstelle von 2 auf die Sicherheit aus?
  • Ist das spezifisch für OpenSSL?
25
gertvdijk

Diffie-Hellman arbeitet in einer Untergruppe von ganzen Zahlen modulo a prime p. Sie haben nämlich einen Generator g, der ein herkömmliches ganzzahliges Modulo p ist. Dieser Generator hat eine Ordnung r, die die kleinste positive ganze Zahl ist, so dass gr = 1 mod p. Die beiden Systeme, die sich mit DH beschäftigen, wählen private Schlüssel a und b als Ganzzahlen in einem bestimmten Bereich und die entsprechenden öffentlichen DH-Schlüssel (über die sie austauschen der Draht) sind gein mod p und gb mod p.

DH ist sicher, solange:

  • p ist "richtig": groß genug (mindestens 1024 Bit) und nicht mit einer "speziellen Struktur" erzeugt, die diskreter Logarithmus einfach macht. Eine zufällig erzeugte Primzahl der richtigen Größe ist in Ordnung.
  • Der größte Primteiler von r hat eine Größe von mindestens 2k Bits, wenn eine Sicherheitsstufe von " k Bits" angestrebt wird. . Grundsätzlich sollte der größte Primteiler von r Eine Primzahl mit einer Größe von mindestens 160 Bit sein (200 Bit oder mehr würden nach heutigen Standards bevorzugt).
  • Die privaten DH-Schlüssel werden in einem Größenbereich von mindestens 2 generiert2k oder so. Grundsätzlich sollten a und b auch 2k - Bit-Ganzzahlen sein.

Der genaue Wert des Generators g spielt keine Rolle, solange beide Parteien den gleichen Wert verwenden. Es kann gezeigt werden, dass jemand, der einen diskreten Logarithmus relativ zu einem Generator berechnen kann g, ihn relativ einfach zu jedem Generator g ' desselben berechnen kann Untergruppe. Entscheidend ist also die Untergruppenreihenfolge, nicht der Generator. Sie können 2 oder 5 verwenden, die Sicherheit wird dadurch nicht geändert.

Die Verwendung eines kurzen Generators hat einige (geringfügige) Leistungsvorteile, weshalb sie bevorzugt werden. Der Leistungsunterschied zwischen 2 und 5 ist jedoch vernachlässigbar. In einigen Protokollen wird der Generator auf Protokollebene vereinbart, d. H. Nicht über die Leitung übertragen; es ist in beiden Systemen fest codiert. Einige Protokolle schreiben daher die Verwendung von 2 vor, andere möchten 5 aus historischen und traditionellen Gründen verwenden. OpenSSL kann als Allzweckbibliothek Parameter für beide Fälle generieren.

Es gibt jedoch Details . Es kann schwierig sein, sicherzustellen, dass der ausgewählte Generator tatsächlich eine Bestellung mit einem ausreichend großen Primteiler hat. Standardmäßig, openssl dhparam erzeugt eine sogenannte "sichere Primzahl", dh es werden zufällige Primzahlen q erzeugt, bis eine solche gefunden wird, die auch p = 2q + 1 ist eine Primzahl. Die Reihenfolge von g modulo q ist immer ein Teiler von p-1. Durch die Verwendung einer sicheren Primzahl wird OpenSSL somit garantiert, dass die Reihenfolge r eines Generators g im 2..p-2 Bereich (insbesondere 2 und 5) ist entweder gleich q oder 2q, also immer ein Vielfaches von q, was eine ausreichend große Primzahl ist.

Wenn OpenSSL eine zufällige p generiert hat, ohne sicherzustellen, dass es sich um eine "sichere Primzahl" handelt, dann ist die tatsächliche Reihenfolge von g = 2 oder 5 wäre schwer genau zu berechnen (es würde Factoring beinhalten p-1, was teuer ist).

In einigen Nicht-DH-Kontexten, nämlich dem DSA-Signaturalgorithmus, muss eine DH-ähnliche Untergruppe vorhanden sein, sodass die Reihenfolge des Generators genau gleich einer gegebenen nicht zu großen Primzahl = ist q, anstatt nur ein Vielfaches von q zu sein. In diesem Fall OpenSSL (mit dem -dsaparam Befehlszeilenschalter) generiert zuerst q, dann p = qt + 1 für zufällige Werte von t bis eine Primzahl gefunden ist; und der Generator wird erhalten, indem ein zufälliges s modulo p genommen und g = s berechnet wirdt modulo p (dies ergibt notwendigerweise entweder 1 oder eine ganze Zahl der Ordnung genau q). Bei der Erzeugung von DSA-Parametern kann der Generator nicht einfach (oder überhaupt) gezwungen werden, eine bestimmte kleine Ganzzahl wie 2 oder 5 zu sein. Für DSA ist der Generator "groß".

20
Tom Leek

Was ist Generator 2 und 5?

Um dies zu verstehen, ist ein gewisser mathematischer Hintergrund erforderlich. Diffie-Hellmann arbeitet mit zyklische Gruppen. Allen diesen Gruppen ist gemeinsam, dass es mindestens einen Generator gibt, d. H. Ein Element, mit dem alle anderen Elemente der Gruppe erzeugt werden können.

Schauen wir uns ein Beispiel an:

Z_11 *: Menge von ganzen Zahlen i = 0,1, ..., 10, für die gcd (i, 11) = 1 ist. Dies ist eine abelsche Gruppe unter Multiplikationsmodulo 11.

Generator: a = 2

a^1  =           2 mod 11,
a^2  =           4 mod 11,
a^3  =           8 mod 11,
a^4  = (  16 =)  5 mod 11, 
a^5  = (  32 =) 10 mod 11,
a^6  = (  64 =)  9 mod 11,
a^7  = ( 128 =)  7 mod 11,
a^8  = ( 256 =)  3 mod 11,
a^9  = ( 512 =)  6 mod 11,
a^10 = (1024 =)  1 mod 11

Wie Sie sehen können, haben wir die gesamte Gruppe generiert, d. H. Wir haben jedes Element als Ergebnis. Beachten Sie jedoch, dass dies für alle Arten von Gruppen funktioniert und nicht auf die multiplikative Gruppe von Ganzzahlen modulo p beschränkt ist.

Wie wirkt sich die Auswahl von 5 anstelle von 2 auf die Sicherheit aus?

Nein, das Diffie-Hellman-Problem dreht sich alles um die Größe der zyklischen Gruppe, nicht um die Elemente, die die Gruppe erzeugen. Wenn also beide Elemente Generatoren für eine Gruppe sind, macht dies keinen Unterschied. Die Auswahl von 2 als Generator hat jedoch einige Vorteile, da Sie die zugrunde liegenden Algorithmen effizienter implementieren können.

Persönlich würde ich die Standardeinstellung hier nicht ändern, es sei denn, es gibt einen sehr guten Grund dafür. Dies ist offensichtlich nicht der Fall, sonst müssten Sie nicht fragen;).

Ist das spezifisch für OpenSSL?

Nein, dies folgt aus der Mathematik der zyklischen Gruppen selbst.

14
Karol Babioch