【发布时间】:2010-05-18 19:11:26
【问题描述】:
我正在努力寻找在 ECB 模式下使用 RSA 并在 python 中使用 PKCS1 填充的任何方法。我研究了 pyCrypto,但他们在主分支中没有 PKCS1 填充(但在补丁中)。尽管如此,我还是在 M2Crypto 包中找到了带有 PKCS1 的 RSA,但我不确定是否可以选择 ECB 模式...
【问题讨论】:
标签: python encryption rsa
我正在努力寻找在 ECB 模式下使用 RSA 并在 python 中使用 PKCS1 填充的任何方法。我研究了 pyCrypto,但他们在主分支中没有 PKCS1 填充(但在补丁中)。尽管如此,我还是在 M2Crypto 包中找到了带有 PKCS1 的 RSA,但我不确定是否可以选择 ECB 模式...
【问题讨论】:
标签: python encryption rsa
像 ECB 这样的链式模式对 RSA 没有意义,除非你做错了。
ECB 用于块密码:输入数据被分成大小相等的块,每个块单独加密。这会导致一些弱点,因此对于分组密码,最好避免使用 ECB 模式。
RSA 不是分组密码。特别是,RSA 必然会放大加密的消息:使用 1024 位 RSA 密钥(相当典型的大小),可以加密最多 117 字节的消息,但结果是 128 字节的值。
可以想象接收一条更大的消息,将其拆分为长度为 117 字节(或更短)的单个块,并对每个块分别进行 RSA 加密,但没有人这样做,主要是因为大小增加和 CPU 成本.此外,根本没有研究与拆分和重组相关的安全问题,因此结果很可能很弱。通常,当密码库需要填充模式作为算法名称的一部分时,例如在“RSA/ECB/PKCS1Padding”中,这只是由于名称的语法约束,而链接部分(ECB)实际上被忽略了(这就是 Java 所做的,例如)。
实际上,当加密一些可能大于最大 RSA 输入大小的数据时,会使用混合加密:RSA 加密的是随机对称密钥(例如,一组 16 个均匀随机字节),并且该密钥用于对称加密(例如使用 AES)实际数据。这更节省空间(因为对称加密不会扩大块)和 CPU 效率(对称加密比非对称加密快得多,尤其是 RSA 解密)。
【讨论】:
PKCS1Padding 任何关于如何强制它的想法,即使它不是一个好的想法?