Public-Key

將“原始”非 ASN.1 EC 私鑰轉換為公鑰?

  • August 6, 2017

我有這個不是很重要的 ECDSA 私鑰,但我沒有任何其他格式的它。

008AF2DA031B2DC39FBE418A238EFDA3B10ABC7C77FE12A750BFE899

我還需要它以公共形式使用,大小為 0x3C。我不知道如何開始。當然,OpenSSL 對此感到窒息,但那是因為它不是 ASN.1 格式,而且我也不知道從哪裡開始。

在不知道使用了哪些域參數的情況下,這個問題是不可能回答的。問題是私鑰的值在域內是隨機的。

因此,雖然我們知道密鑰大小約為 224 位,但沒有辦法驗證任何公鑰值,因為公鑰是首先使用隨機私鑰作為輸入計算得出的。準確的說是私鑰與基點的乘積 $ G $ 的曲線。這意味著無論我們使用何種曲線/域參數集,我們都會生成一個有效的公鑰。

另一個問題是所需的密鑰大小。通常使用壓縮或未壓縮的密鑰點來辨識公鑰。未壓縮的點將為標識符添加 1 個字節。然而,這通常被放入一個 ASN.1 BIT STRING 中,如果我們假設 DER 編碼,它會增加 3 個字節。

所以在這種情況下,我們會得到:

033a00046bf056effd0478f8cfe52a07ac42d098f7775314aa84ff4657719c529ce3c117062b42f67b35e2d19276537ea44a14a3b41a072d7fa3c0b7

對於 P-224 和

033a0004aee24d6692b745b4ecb76d2aff13e51ce177a34f00b5d6c92778d1367dbdb2dd6283fdec3966d33cb800a0e6e5d2060b0daf7e8382e3736e

對於brainpoolP224r1,但是沒有辦法區分兩者,可能還有更多的候選者。

驗證任何先前生成的簽名當然應該使您能夠選擇正確的值。

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