Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt golang.org/x/crypto/ed25519 unerwartete öffentliche Schlüssel für BitTorrent BEP-0044-Testdaten zurück?

Warum gibt golang.org/x/crypto/ed25519 unerwartete öffentliche Schlüssel für BitTorrent BEP-0044-Testdaten zurück?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 17:56:38218Durchsuche

Why Does golang.org/x/crypto/ed25519 Return Unexpected Public Keys for BitTorrent BEP-0044 Test Data?

ed25519.Public Result Discrepancy

Problembeschreibung

Verwendung des Golang-Pakets golang.org/x/crypto/ed25519, ein Versuch, das abzurufen Der öffentliche Schlüssel, der einem bestimmten privaten Schlüssel entspricht, führt zu einem anderen Ergebnis als erwartet. Konkret gibt die Bibliothek die letzten 32 Bytes des Private Verification Key (PVK) zurück, obwohl die bereitgestellten Testdaten darauf hindeuten, dass dies falsch ist.

Erklärung

Die Diskrepanz ergibt sich aus den unterschiedlichen Formaten, die dafür verwendet werden ed25519 private Schlüssel. Die Golang-Implementierung folgt der RFC 8032-Konvention, die einen privaten Schlüssel als eine Verkettung eines 32-Byte-Seeds mit dem 32-Byte-öffentlichen Schlüssel definiert.

Die privaten Schlüssel werden jedoch im BitTorrent BEP-0044-Test bereitgestellt Daten sind das 64-Byte-Ergebnis eines SHA512-Hashs des Seeds, und diese Formate können aufgrund der einseitigen Natur der Hashing-Funktion nicht direkt konvertiert werden.

Lösung

Um die zu verwenden Um die Golang-Bibliothek mit den angegebenen Testdaten zu verwenden, ist eine modifizierte Version der Bibliothek erforderlich, die eine benutzerdefinierte Generierung des öffentlichen Schlüssels und der Signatur aus dem gehashten privaten Schlüsselformat ermöglicht. Dies kann erreicht werden, indem relevanter Code aus der Bibliothek kopiert und die Implementierung geändert wird, um das unterschiedliche Format zu berücksichtigen.

Der geänderte Code umfasst:

  • getPublicKey: Erzeugt den öffentlichen Schlüssel aus dem Hash privater Schlüssel (Seed).
  • sign: Berechnet die Signatur basierend auf dem gehashten privaten Schlüssel, dem öffentlichen Schlüssel und der Nachricht.

Mit diesen modifizierten Funktionen ist es möglich, die zu replizieren erwartete Testvektoren, zu denen der öffentliche Schlüssel und die Signatur gehören.

Das obige ist der detaillierte Inhalt vonWarum gibt golang.org/x/crypto/ed25519 unerwartete öffentliche Schlüssel für BitTorrent BEP-0044-Testdaten zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn