4

我一直在查看大多数 python 加密库,我决定使用 PyCrypto 或 M2Crypto。
我已经放弃了 ezPyCrypto,因为它只支持 MD5 进行签名和 Keyczar,因为它还不够成熟。

所以我读到如果未正确填充要加密的文本(或签名哈希),RSA 很容易受到多种攻击。
这是什么意思?
PyCrypto 或 M2Crypto 都没有提到这件事,谷歌也没有发现任何相关的东西。这些库会自动添加 paddign 吗?怎么能说出来?

如果上面的答案是否定的,那么什么被认为是适当的填充?

4

5 回答 5

6

PyCrypto 没有添加提到的填充。
M2Crypto 相反。

M2Crypto 建立在 openSSL 之上,主要支持你需要的一切,仍然保持更新,同时 PyCrypto 发出几个弃用警告。

于 2009-03-19T17:52:53.760 回答
3

随机填充的原因之一可能是,如果将完全相同的消息发送给几个人(三个),那么具有低指数(假设为 3)的“书本”RSA 可以很简单地被破解。

因此,您最好通过之前对您的消息应用某种随机(但可逆)转换来确保您不会发送完全相同的消息。

也许这就是 padding 的意义所在!?

编辑:我查看了维基百科。我所说的叫做哈斯塔德的攻击。

于 2009-03-19T07:02:35.157 回答
1

我最近努力解决加密问题……这篇文章有助于解释填充是什么:

http://www.di-mgt.com.au/cryptopad.html

(方法一似乎对我来说最容易实现)

如果需要,我可以分享一些代码片段。

PS 这个文件在帮助创建安全密钥方面也派上了用场(谷歌为它) PBKDF2.py - PKCS#5 v2.0 Password-Based Key Derivation

于 2009-03-19T05:28:53.667 回答
0

不完全确定,但如果您在 RSA 消息中添加随机组件,它可以防止字典攻击

于 2009-03-18T19:26:03.850 回答
0

首先,您应该使用 AES,因为它是事实上的标准。

AES 以 16 字节的块大小加密字节。显然,这适用于任何大型数据。但它的最后一点,显然可能小于 16 个字节。

对于最后一个块,您需要对其进行填充,典型的填充是通过 PCKS7 完成的,这非常简单。

假设您有一个字符串:“icecream”作为最后一个块。

"icecream"是8个字节,所以你需要另外8个字节来做一个块

So what you do is simply append the character 8(not '8') 8 times

"icecream\x08\x08\x08\x08\x08\x08\x08\x08"

Would be your resultant string. Now you go ahead an encrypt the data.

Remember that while decrypting, you'll need to catch this last block, and strip the padding before using it.

于 2012-05-01T14:59:01.243 回答