使用Golang包golang.org/x/crypto/ed25519,嘗試擷取與給定私包鑰相對應的公鑰會產生與預期不同的結果。具體來說,該程式庫傳回私有驗證金鑰 (PVK) 的最後 32 個位元組,而提供的測試資料表明這是不正確的。
差異是由於使用的格式不同而產生的ed25519 私鑰。 Golang 實作遵循 RFC 8032 約定,該約定將私鑰定義為 32 位元組種子與 32 位元組公鑰的串聯。
但是,BitTorrent BEP-0044 測試中提供的私鑰data 是種子 SHA512 雜湊的 64 位元組結果,由於雜湊函數的單向性質,這些格式無法直接轉換。
使用具有給定測試資料的 Golang 庫,需要該庫的修改版本,以允許根據散列私鑰格式自訂生成公鑰和簽名。這可以透過從庫中複製相關程式碼並修改實作以適應不同的格式來實現。
修改後的程式碼包括:
使用這些修改後的函數,可以複製預期的測試向量,其中包括公鑰和簽名。
以上是為什麼 golang.org/x/crypto/ed25519 回傳 BitTorrent BEP-0044 測試資料的意外公鑰?的詳細內容。更多資訊請關注PHP中文網其他相關文章!