Encryption

我在哪裡可以找到 Secp256k1 ECDSA 測試向量?

  • October 24, 2013

我目前正在實現一個基於 secp256k1 等曲線的 ECDSA 庫。我想使用一些測試向量來測試它,比如http://csrc.nist.gov/groups/STM/cavp/documents/dss/ecdsatestvectors.zip。有沒有什麼地方可以得到一些向量來測試該曲線的加密?

範例向量具有以下結構:

var testVectors = []struct {
msg    string
Qx, Qy string
r, s   string
ok     bool
}

看起來像這樣(對於 P224 曲線):

{
   "96b2b6536f6df29be8567a72528aceeaccbaa66c66c534f3868ca9778b02faadb182e4ed34662e73b9d52ecbe9dc8e875fc05033c493108b380689ebf47e5b062e6a0cdb3dd34ce5fe347d92768d72f7b9b377c20aea927043b509c078ed2467d7113405d2ddd458811e6faf41c403a2a239240180f1430a6f4330df5d77de37",
   "851e3100368a22478a0029353045ae40d1d8202ef4d6533cfdddafd8",
   "205302ac69457dd345e86465afa72ee8c74ca97e2b0b999aec1f10c2",
   "4450c2d38b697e990721aa2dbb56578d32b4f5aeb3b9072baa955ee0",
   "e26d4b589166f7b4ba4b1c8fce823fa47aad22f8c9c396b8c6526e12",
   false,
},
{
   "86778dbb4a068a01047a8d245d632f636c11d2ad350740b36fad90428b454ad0f120cb558d12ea5c8a23db595d87543d06d1ef489263d01ee529871eb68737efdb8ff85bc7787b61514bed85b7e01d6be209e0a4eb0db5c8df58a5c5bf706d76cb2bdf7800208639e05b89517155d11688236e6a47ed37d8e5a2b1e0adea338e",
   "ad5bda09d319a717c1721acd6688d17020b31b47eef1edea57ceeffc",
   "c8ce98e181770a7c9418c73c63d01494b8b80a41098c5ea50692c984",
   "de5558c257ab4134e52c19d8db3b224a1899cbd08cc508ce8721d5e9",
   "745db7af5a477e5046705c0a5eff1f52cb94a79d481f0c5a5e108ecd",
   true,
},

不幸的是,我不知道該曲線的一組良好的預先存在的測試向量。相反,我決定建議您如何自己生成它們。希望這可以幫助。

一些(相當新的)OpenSSL 版本熟悉 secp256k1 曲線。您可以使案例如 OpenSSL 的命令行工具 openssl 的命令 ecparam、ec、dgst 來使用曲線生成密鑰對、參數文件和 ECDSA 簽名。

如果您編寫一些腳本,您甚至可以創建看起來與 NIST/CAVP 中的 ECDSA 測試向量相似的文件。

另一方面,如果您不希望為 $ k $ 要測試或使用 ECDSA 簽名的確定性變體(請參閱RFC 6979),那麼您最好嘗試以下方法:

  • 使用一些預先生成的測試向量(包含正確和不正確的簽名)驗證您的驗證功能。注意:請記住使用一些獨立的實現(可能例如 OpenSSL)來生成向量。
  • 驗證您的簽名功能是否與您的驗證功能兼容。

引用自:https://crypto.stackexchange.com/questions/799