Elliptic-Curves

FIPS 186-4 中 ECDSA 的公鑰格式?

  • July 17, 2017

FIPS 186-4中 ECDSA 的公鑰格式是什麼,它在哪裡正式定義?

特別是,除了笛卡爾座標之外還有變體嗎?那是一對位串,還是一對整數,以及究竟是什麼 ASN.1 裝飾(如果有的話)?無窮大點是否有有效的表示(我知道它不是有效的公鑰)?

我問是因為我發現了各種格式(在 X.509 公鑰證書中,通常有一個包含標題和笛卡爾座標的位串,但有些程式碼使用點壓縮);我什至不確定ANS X9.62:2005會解決我的問題;我在ISO/IEC 14888-3:2016中找不到答案。

正如評論中所說,我相信您可能會在SEC1v2文件中找到答案,該文件在許多實現(OpenSSLGombedTLS等)中用作有關該問題的參考,並且使您免於閱讀所有許多 RFC那個話題。

現在關於實際事實,如果我使用 OpenSSL 生成私鑰:

openssl ecparam -genkey -out testsk.pem -name prime256v1

然後列印它的公開細節:

openssl ec -in testsk.pem -pubout -text

我得到以下資訊:

read EC key
Private-Key: (256 bit)
priv:
   00:ca:4e:db:94:a6:e5:a4:5f:3b:9e:f6:34:cf:22:
   5e:10:eb:7f:60:8d:56:d6:2a:e9:1c:08:4e:ee:c0:
   38:21:bd
pub: 
   04:f3:13:94:7a:db:02:6b:c1:1f:3a:50:c4:04:07:
   d1:12:12:6a:b2:90:e8:c8:48:7a:4b:3c:f6:8a:7e:
   3b:4e:fe:67:e7:69:bd:74:b6:32:3c:26:ea:66:43:
   81:e6:74:d2:aa:db:1c:a6:44:03:fc:7a:72:90:28:
   20:bf:1d:3d:89
ASN1 OID: prime256v1
NIST CURVE: P-256
writing EC key
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8xOUetsCa8EfOlDEBAfREhJqspDo
yEh6Szz2in47Tv5n52m9dLYyPCbqZkOB5nTSqtscpkQD/HpykCggvx09iQ==
-----END PUBLIC KEY-----

其中,一旦從 ASN1 解碼,對應於:

SEQUENCE(2 elem)
   SEQUENCE(2 elem)
       OBJECT IDENTIFIER1.2.840.10045.2.1ecPublicKey(ANSI X9.62 public key type)
       OBJECT IDENTIFIER1.2.840.10045.3.1.7prime256v1(ANSI X9.62 named elliptic curve)
   BIT STRING(520 bit) 000001...1000

所以我的公鑰實際上是兩個標籤的序列:

  • 首先,另一個序列,它由我的對象的細節組成,它是一個 ecPublicKey,根據它們的“裝飾”(又名 OID)為曲線 prime256v1(又名 P-256)製作。
  • 其次,手頭EC公鑰點對應的位串,要麼壓縮要麼不壓縮(這可以根據它的長度來確定,在這裡你可以看到我們有 $ \frac{520}{8}=65= 2\cdot \frac{\log_2(q)}{8}+1 $ ,所以沒有壓縮)。

正如您在評論中指出的那樣,這些點按照SEC1v2 第 2.3.3 節中的說明進行編碼,將位串轉換為實際座標的練習在第 2.3.4 節中進行了說明

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