Secp256k1

C secp256k1:secp256k1_context_randomize 的目的是什麼?

  • February 4, 2022

在研究 secp256k1 庫 API 的過程中,我遇到了secp256k1_context_randomize它似乎類似於為偽隨機生成器提供種子。同時,該文件secp256k1.h似乎沒有提供任何生成隨機私鑰的功能,並且該功能secp256k1_ecdsa_sign依賴於確定性秘密(rfc 6979),而不是任何隨機生成的東西。現在我可以看到 API 在文件中被擴展secp256k1_ecdh.h,該函式secp256k1_ecdh返回 EC Diffie-Hellman 機密。但這似乎也不依賴於隨機生成,因為標量是作為參數提供的。所以我想知道,為什麼使用者會關心隨機化上下文,或者換句話說,庫在哪裡使用隨機化?

我剛剛合併了 Rusty Russell 的一個 PR,旨在解釋其目的。從添加的文本中:

雖然無論秘密值是什麼,secp256k1 程式碼都被編寫為恆定時間,但未來的編譯器可能會輸出不是的程式碼,並且 CPU 可能不會發出相同的無線電頻率或消耗相同數量的功率所有的價值觀。

此函式提供了一個種子,該種子與盲值組合在一起:盲值在每次乘法之前添加(並在之後刪除),因此它不會影響函式結果,但會屏蔽依賴於任何輸入相關行為的攻擊。

您應該在 secp256k1_context_create 或 secp256k1_context_clone 之後呼叫它,並且之後可以重複呼叫它。

引用自:https://bitcoin.stackexchange.com/questions/52254