永恒机器人:马文攻击相关研究与应对策略
1. RSA实现与安全问题
在执行RSA私钥操作前,应至少采用密文盲化技术,不过这仅能抵御简单的选择密文定时攻击。为防范其他类型的侧信道攻击,还建议额外使用指数盲化。
在实现通用RSA解密算法时,无论是用于TLS中的RSA密钥交换,还是被其他应用程序或库直接调用,在安全处理数据前需完成以下操作:
1. 使用任意精度整数算术进行模幂运算。
2. 填充检查和秘密提取(PKCS#1 v1.5或OAEP)。
3. 秘密值使用和错误处理。
对于RSA,应对任意精度算术泄漏的常用方法是盲化。盲化时,将密文乘以一个随机值(盲化因子),然后对盲化后的值使用常规算法进行模幂运算。由于攻击者不知道幂运算的确切值,且每次操作的值都不同,即使是相同密文,他们也无法仅从定时信息推断出实际值。但要获取操作的实际结果(加密消息),库需要将模幂运算的结果乘以盲化因子的乘法逆元(去盲因子)。去盲操作的输入与密文和明文都不相关,且对攻击者保密,但输出并非如此。
CPU通常提供乘法或加法指令,即使结果无法放入单个寄存器(如64位CPU上64位乘法返回128位结果),任意精度实现通常将大整数存储为字大小整数的列表(字是最大通用寄存器的大小,32位CPU为32位,64位CPU为64位)。对于通用数值库,存储指定最高有效位以上零的额外字是无用的,因为这会占用更多内存并使计算变慢。因此,通用库会“钳位”或“规范化”存储的数字,只存储有意义的非零字。
如果存储的数字是RSA解密操作的结果,那么用于存储它的字数差异会导致将其转换为字节字符串的时间不同(这对于测试填充,无论是PKCS#1 v1.5还是RSA - OEAP,
超级会员免费看
订阅专栏 解锁全文
30

被折叠的 条评论
为什么被折叠?



