Maison >développement back-end >Golang >Pourquoi golang.org/x/crypto/ed25519 renvoie-t-il des clés publiques inattendues pour les données de test BitTorrent BEP-0044 ?

Pourquoi golang.org/x/crypto/ed25519 renvoie-t-il des clés publiques inattendues pour les données de test BitTorrent BEP-0044 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 17:56:38322parcourir

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

ed25519. Divergence des résultats publics

Description du problème

À l'aide du package Golang golang.org/x/crypto/ed25519, une tentative de récupération du la clé publique correspondant à une clé privée donnée donne un résultat différent de celui attendu. Plus précisément, la bibliothèque renvoie les 32 derniers octets de la clé de vérification privée (PVK), alors que les données de test fournies suggèrent que cela est incorrect.

Explication

L'écart provient des différents formats utilisés pour Clés privées ed25519. L'implémentation de Golang suit la convention RFC 8032, qui définit une clé privée comme une concaténation d'une graine de 32 octets avec la clé publique de 32 octets.

Cependant, les clés privées fournies dans le test BitTorrent BEP-0044 les données sont le résultat de 64 octets d'un hachage SHA512 de la graine, et ces formats ne peuvent pas être directement convertis en raison de la nature unidirectionnelle de la fonction de hachage.

Solution

Pour utiliser le Bibliothèque Golang avec les données de test fournies, une version modifiée de la bibliothèque est requise pour permettre la génération personnalisée de la clé publique et de la signature à partir du format de clé privée hachée. Ceci peut être réalisé en copiant le code pertinent de la bibliothèque et en modifiant l'implémentation pour s'adapter aux différents formats.

Le code modifié comprend :

  • getPublicKey : génère la clé publique à partir du hachage clé privée (seed).
  • sign : calcule la signature en fonction de la clé privée hachée, de la clé publique et du message.

En utilisant ces fonctions modifiées, il est possible de répliquer le vecteurs de test attendus, qui incluent la clé publique et la signature.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn