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.
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.
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:
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!