1

就像在这个例子中建议的那样,椭圆曲线由素数p定义,它是有限域的元素数和一个方程:曲线 = y² = x³ + ax + b

在实际情况下,例如对于 Google 证书,是否可以使用 OpenSSL找到a、b、p** ?我试过谷歌搜索并自己找到这个答案,但我发现了什么。

4

1 回答 1

2

在证书中表示 EC参数有三种方式。我将讨论最常用的:显式参数和命名曲线。

显式 EC(域)参数正是顾名思义:它们是直接放入证书中的值。读取公钥的应用程序可以直接从域参数和公共点 W 的值中创建完整的 EC 公钥。

然而,命名曲线仅标识先前指定的一组域参数。它们通常在软件中简单地表示为字符串。然而,在证书和其他 ASN.1 DER 对象中,它们由 ASN.1 OID 表示。OID 是 1.2.3 等形式的唯一字符串,首先代表注册办公室,然后是组织等。

如果您将 Google 证书放入 ASN.1 解析中,您会发现其中一个 OID,已经有效地转换为字符串:

openssl asn1parse -in google_ec.cer

将产生:

...
251:d=3  hl=2 l=  19 cons: SEQUENCE          
253:d=4  hl=2 l=   7 prim: OBJECT            :id-ecPublicKey
262:d=4  hl=2 l=   8 prim: OBJECT            :prime256v1
...

快速搜索会找到RFC 5480,它指的是 secp256r1(参见 2.4.2)或 NIST P-256 椭圆曲线。后两者定义了曲线的所有参数,当然 W 除外。通常,从现有软件中找到这些曲线参数会更容易,尽管标准可能无法以对您的特定运行时环境有用的格式来表示它们。

于 2013-10-30T19:20:30.753 回答