我正在使用Python密码库,并执行非对称加密。
我指的是这个例子。
>>> message = b"encrypted data"
>>> ciphertext = public_key.encrypt(
... message,
... padding.OAEP(
... mgf=padding.MGF1(algorithm=hashes.SHA256()),
... algorithm=hashes.SHA256(),
... label=None
... )
... )我明白填充物的作用。但是,我无法理解为什么使用SHA256()?
发布于 2019-03-19 02:39:49
RSA加密基于RSA 诱捕门置换:一种很容易在一个方向上执行的转换,但除非您知道一个“魔术”值(私钥),否则在另一个方向上是不可行的。将陷阱函数转换为加密方案并不容易。首先,加密必须是不确定的:否则,如果有人能够猜出消息可能是什么,他们就可以通过执行加密(使用公钥)并与他们想要破解的密文进行比较来检查他们的猜测。为了避免这种情况,加密方案总是包含一些随机部分,称为“现在”。
RSA陷阱门操作接受输入,输入的大小是固定的,由密钥决定。基本上,使用n位键,您需要一个(n-1)-bit输入字符串。因此,要加密某些内容,您需要从原始消息中构建一个所需长度的字符串。组装有效载荷以加密和格式化它们的操作称为填充。RSA加密有两种标准的填充机制: PKCS#1v1.5和OAEP。
包括一个随机的现在是必要的,但不足以使RSA加密安全。RSA根部的数学运算具有一些“很好”的数学性质。在许多实际情况下,想解密密文的攻击者可以提交修改后的密文进行解密,即使这些密文被拒绝为无效,也会被拒绝(错误消息、定时、…)。就足以重建明文了。这是PKCS#1v1.5填充中的一个问题,它容易受到甲骨文攻击(如布莱肯巴赫尔攻击和马槽攻击 )的攻击,攻击者在这些攻击中生成修改后的密文并获取有关其有效性的信息,从而最终允许重构明文。
OAEP旨在使攻击者无法生成有用的密文。简而言之,它的工作方式是用伪随机字符串掩蔽(用xor)有效负载。生成这个伪随机字符串的标准方法是使用一个名为MGF1的构造,它从种子开始并反复散列。这种掩蔽破坏了RSA指数运算所引起的数学关系:修改密文会导致明文在打开掩蔽后完全不相关。这样,如果攻击者试图提交修改过的密文,他们只会得到解密错误,这些错误不会提供任何有用的信息来重构明文。
OAEP涉及第二个哈希函数,用于在加密中包含标签。标签包括在掩码计算中,其方式是试图用错误的标签解密导致解密错误(以不显示正确标签的方式)。掩码计算使用标签的散列。实际上,这个特性很少使用,标签默认为空字符串。此外,在实践中,每个人都对标签和掩码生成使用相同的哈希算法,但是有些库允许指定不同的哈希。
发布于 2019-03-14 11:48:37
如果您查看最优非对称加密填充 (OAEP.pdf)设计,您将看到它需要两个具有不同属性的哈希函数G和H。
G和H通常是协议中固定的一些密码散列函数。
这两个是两个不同的属性所必需的;
https://stackoverflow.com/questions/55158942
复制相似问题