RSA 中 1024 位密钥长度的实际方法

问题描述 投票:0回答:2

我正在学习RSA密码学,所以我必须了解ke长度。 在这里,我找到了关于密钥长度的解释。

那里说:

当我们说“1024 位 RSA 密钥”时,我们的意思是模数有长度 1024位,即大于2^1023但小于2^1024的整数。 这样的整数可以编码为 1024 位的序列,即 128 字节。

我从那里得到的,1024 位密钥意味着密钥有 1024 个二进制数字序列。

众所周知,1 byte = 8 bits。所以,

1024 bits  = 128 bytes
。好的,它是二进制的。性格怎么样?

根据ASCII二进制码here,每个字符有8位二进制数。因此,在我看来,如果密钥的长度为 1024 位,则意味着该密钥包含 1024/8 = 128 个字符。因此,我创建了一个 java 程序来生成长度为 128 的素数。到目前为止,该程序运行良好。

但是,我又重新思考了RSA 1024-bit的真正含义。所以,我用谷歌搜索并找到了this。我测试了一下,发现公钥模数的位长是 1024。但是,公钥有 309 个数字长度。

现在,我真的很困惑。

我的问题:RSA 中 1024 位密钥长度的真正含义是什么?正如我所想或我所发现的这里?

java encryption rsa
2个回答
1
投票

example将密钥保存为对象流,它是java序列化的对象流,它有一些关于javatypes的元信息和特殊格式来编码二进制数据。要查看数字的真实大小,请尝试“pub.getModulus().bitLength()”。对我来说它打印 1024.


1
投票

重要的参数是“大于2^1023”。这意味着,原始 RSA 加密算法可以表示从 0 到 2^1013-1 的任意数字,但不能表示大于或等于模数的数字。通过 Key Design,模数是两个不同素数的乘积,永远不会遇到 2 的幂,例如 2^1024。

所以你最多可以表示的位数是key-length-1,也就是floor((key length -1)/8)个完整的字节;在最好的情况下,您会丢失一位密钥长度。

由于用于将文本映射到数字的 PKCS 标准考虑了完整的字节,因此您总是需要多一个字节来表示等效数字;对于 1024 位密钥,要编码的文本的最大长度为 127 字节。

另一个数字“309字节”来自用于存储/交换密钥的X.509-Standard,ASN.1-Protocol的一种方言;它包括 RSA 类型信息、模数和公共指数。

© www.soinside.com 2019 - 2024. All rights reserved.