Python-RSA加密计算明文的有效长度

2024-06-06 14:14:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个使用RSA(python语言)加密和解密的程序。我读过,只使用RSA是不安全的,建议使用pck来实现这一点。我的主要问题是如何有效地计算我可以使用pck加密和解密的纯文本的长度(考虑到我使用的是4096位密钥,它应该小于512字节,我想我必须考虑PCKS使用的一些字节)。在

总而言之:如何有效地获取明文的长度(或拆分)以便加密/解密(以及如何管理到现在需要多少字节de PCSK)?在

另外一个问题:为什么仅仅用RSA加密明文是不安全的?在

编辑:正如评论中所建议的,我将使用AES对称密钥加密/解密并与RSA共享密钥。根据这一变化,python将自行计算所有明文的加密/解密,还是必须拆分它(如果可以的话,如何高效地执行)?在

谢谢你的帮助。在


Tags: 文本程序语言编辑字节评论密钥de
1条回答
网友
1楼 · 发布于 2024-06-06 14:14:11

首先我要说的是,实现密码是很容易出错的,所以除非你花了很多年的时间研究它(从你写问题的方式来看你还不清楚),否则你不应该写生产中使用的密码。例如,返回的错误可用于在Bleichenbacher attack中破坏加密。但是,如果你只是为了学习活动而做,那么这里有一些指导。在

您可以在实现不安全的PKCS #1 v1.5 padding或更安全的PKCS #1 v2.x OAEP padding之间进行选择。你需要知道的一切都在标准中:你应该遵循它直到T

为了回答您的问题,对于OAEP版本,您需要消息长度≤模数长度–2*哈希函数输出长度–2,其中长度以字节为单位。在

示例2048位模使用SHA256哈希。2048位是256个字节。哈希函数有256位输出,即32字节。所以你的消息必须是≤256-2*32-2=256-64-2=190字节。在

因为您知道RSA应该用于加密AES之类的对称密钥,所以您知道这样的密钥不超过256位,也就是32个字节。它完全符合190字节的限制。在

为什么教科书RSA不安全?好吧,三十年的密码学已经把一个有趣的概念(RSA)转变成了一种我们几乎可以证明的东西,在一些疯狂的随机预言假设下,打破它和分解一样困难。我们得到这个更安全的版本(OAEP)的唯一方法是排除不断被破坏的启发式版本。如果你想深入了解破损设计的历史,最好的纸张是Twenty Years of Attacks on the RSA Cryptosystem。在

但是,让我给你一点关于RSA教科书的错误的理论。密码系统应该是安全的,即使只有一位信息是加密的。假设Markov向Sanchez发送一个加密消息,其中明文是一个比特。如果张看到密文,他能确定明文是什么吗?对于教科书中的RSA,答案是肯定的。他所要做的就是用同一个公钥加密“1”和“0”,看看哪一个与他捕获的密文匹配。教训:为了安全起见,您需要对同一消息加密两次,而不会产生相同的密文两次。因此,安全加密需要将随机性纳入等式中!在

相关问题 更多 >