我们如何称呼 RSA 密钥的大小?等规格

What do we call the size of a RSA key? And other specifications

我有几个问题:

What do we call the size of a RSA key? The size of the product pq? A 1024 bits RSA key means that the representation of n = pq in binary requires exactly 1024 bits or at least 1024?

正好是 1024 位。如果我们使用默认的网络顺序(即大端)表示,那么无符号数的第一位应该是 1。这也意味着当在 ASN.1 / DER 中编码时,模数总是 多一个字节 ,因为 ASN.1 假定有符号数。

When I generate a key of length, let's say, 1024 bits, what is the size of the other parameters such d and e - the private and public exponents?

d 通常接近模数的大小,并且总是更小。但原则上任何数量的 0 位都可以位于最重要的一端,因此理论上它可以是任何大小。 d 的较小值不太可能出现,但如果多个 bytes 设置为零(因此在数字编码中丢失,例如 ASN. 1 / DER).

e原则上与d具有相同的性质,但在密钥对计算时通常设置为较小的值。这通常意味着它的十六进制值为 010001,或 65537,第四个费马素数(OpenSSL 中的 F4)。这加快了加密和验证 public 密钥操作。

How, from a DER or PEM format, do we know the size of the key and how to delimit each parameter?

为此,您必须阅读 PKCS#1 标准和 ASN.1 规范。数字以 DER 编码的 ASN.1 INTEGER 值指定。 DER 使用 big endian 数字,因此将是:

TT (LL LL ...) VV VV ...

现在标签 TT 将被设置为值 02 就意味着整数。

LL LL ...用来表示长度。它要么只是一个最大 80 的字节,直接指定存储在 VV VV ... 中的值的大小,要么设置为 8x LL LL ...,其中 xlength 个字节。 8x LL LL ... 只是一个无符号的大端数字,表示 VV VV ....

的大小

VV VV ...signed 大端值。

所以 02 03 01 00 01 通常是 public 指数。 02 81 00 YY XX XX ... 是 128 字节的模数,前面有一个 00 字节,使其成为一个无符号的二进制补码。 128 字节显然意味着 1024 位的密钥大小。 YY 始终为 80 或更高,否则密钥大小将小于 1024 位。

这些参数只是 X509 密钥或 证书 规范的一部分,这是一个更大的结构。 PEM 基本上由 header 行、页脚行和介于两者之间的 base 64(行大小有限)组成。这些 base 64 字符是包含 public 密钥的证书的 BER 或 DER 编码。

很遗憾,我无法在此处解释 X509 证书格式,您必须阅读相关规范 (RFC)。

What is the "version" and what are its possible values?

这通常是 X509 证书和证书请求 版本,当前设置为 3。

版本也可以指向 RSA 规范的版本。在那种情况下,它通常是旧签名/加密格式的 v1.5 或 PSS / OAEP 的 v2.1 填充方法