OAEP及其在OpenSSL中的实现

本文详细介绍了RSA加密体制及其存在的问题,然后重点讲解了OAEP(Optimal Asymmetric Encryption Padding)填充机制,包括输入、加密过程和校验过程,并探讨了OpenSSL中对OAEP及掩码生成函数MGF1的实现,为理解RSA加密的安全性和实践应用提供了深入的洞察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.RSA

RSA是一种经典的公钥密码体制,可以用来做加密或者签名。设RSA的公私钥对为 (e,n) (d,n) ,在RSA加密过程中,使用公钥对消息m进行加密: c=memod n ;使用私钥对密文c进行解密: m=cdmod n 。在签名过程中公钥和私钥的使用顺序是相反的,即使用私钥进行签名,使用公钥验证签名。
但是,上述RSA加密方案存在着易被篡改的问题,假设敌手在密文 c 的传输过程中将 c 随机乘上了一个数(设为 s ),那么消息的接收方最后解密得到的明文将会是 msdmod n 而不是原先的消息 m ,因此应该在RSA加密中加入一种验证机制。
这种认证可以通过填充机制完成,即通过对消息进行填充使得其满足某种特定的格式。当敌手对密文进行修改时,由于其不知道密文对应的明文,因此修改之后得到的明文符合填充标准的概率是一个很小的数(可以近似看作随机挑选一段字符满足填充格式的概率),这样,填充机制就完成了对消息的验证。
从另一个角度看,在进行RSA加密的过程中需要通过加入随机数使得其满足可证明安全理论中的IND-CPA安全。简单地说,给定两个随机明文 m1 m2 ,将它们都使用相同的公钥进行加密,并随机的选择一个密文记作 c ,现在我们需要猜测 c 是哪个密文加密的结果,如果在加密过程中不引入随机数,那么只需要将 m1 m2 分别使用公钥进行加密即可区分,也就是说,RSA加密的密文和公钥至少泄露了其中1bit的信息,因此我们需要引入随机数进行填充。

2.OAEP:最优非对称加密填充

OAEP是RSA填充的一种模式,在PKCS#1v2.0(PKCS#1标准现在已经升级到2.2版本)中提出,用于取代原先的PKCS#1v1.5版本中的填充机制,其填充过程如下:

2.1输入

在执行填充之前,需要提供两个函数:一个密码学杂凑函数(记作hash)和一个掩码生成函数( MGF ,mask generation function);填充时的输入主要包括RSA的公钥 (e,n) 、需要被填充的信息(

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值