首頁  >  文章  >  後端開發  >  為什麼 golang.org/x/crypto/ed25519 回傳 BitTorrent BEP-0044 測試資料的意外公鑰?

為什麼 golang.org/x/crypto/ed25519 回傳 BitTorrent BEP-0044 測試資料的意外公鑰?

Patricia Arquette
Patricia Arquette原創
2024-10-31 17:56:38315瀏覽

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

ed25519.公共結果差異

問題描述

使用Golang包golang.org/x/crypto/ed25519,嘗試擷取與給定私包鑰相對應的公鑰會產生與預期不同的結果。具體來說,該程式庫傳回私有驗證金鑰 (PVK) 的最後 32 個位元組,而提供的測試資料表明這是不正確的。

解釋

差異是由於使用的格式不同而產生的ed25519 私鑰。 Golang 實作遵循 RFC 8032 約定,該約定將私鑰定義為 32 位元組種子與 32 位元組公鑰的串聯。

但是,BitTorrent BEP-0044 測試中提供的私鑰data 是種子 SHA512 雜湊的 64 位元組結果,由於雜湊函數的單向性質,這些格式無法直接轉換。

解決方案

使用具有給定測試資料的 Golang 庫,需要該庫的修改版本,以允許根據散列私鑰格式自訂生成公鑰和簽名。這可以透過從庫中複製相關程式碼並修改實作以適應不同的格式來實現。

修改後的程式碼包括:

  • getPublicKey:從雜湊產生公鑰私鑰(種子)。
  • sign:根據散列私鑰、公鑰和訊息計算簽章。

使用這些修改後的函數,可以複製預期的測試向量,其中包括公鑰和簽名。

以上是為什麼 golang.org/x/crypto/ed25519 回傳 BitTorrent BEP-0044 測試資料的意外公鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn