悟空云课堂丨代码安全第四十期:RSA算法未使用最优非对称加密填充漏洞

中科天齐软件源代码安全检测中心

共 1384字,需浏览 3分钟

 ·

2021-05-26 13:19

中科天齐倾情打造《悟空云课堂》旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。本期主题为RSA算法未使用最优非对称加密填充漏洞的相关介绍。

一、什么是RSA算法未使用最优非对称加密填充?

软件使用了RSA算法,但未使用最佳非对称加密填充方式(OAEP),而如果不使用OAEP,则攻击者只需较少的工作即可解密数据或从密文中推断出特征、模式。

二、什么是填充方式?

填充模式在代码中体现为padding,通常与加密算法一起使用,以使纯文本难以预测,使攻击工作变得更加复杂。

三、RSA加密填充的特点是什么?

RSA加密常用的padding有三种,最优非对称填充(OAEP)对应下述RSA_PKCS1_OAEP_PADDING填充方式:

RSA_PKCS1_PADDING

RSA_PKCS1_OAEP_PADDING

RSA_NO_PADDIN

与对称加密算法DES,AES一样,RSA算法也是一种块加密算法( block cipher algorithm),总是在一个固定长度的块上进行操作。但跟AES等不同的是,block length是跟key length有关的。

每次RSA加密的明文长度是受RSA填充模式限制的,RSA每次加密的块长度就是key length。

不同模式下的区别:

不同的padding模式下,使用相同长度的密钥可以加密的数据最大长度不同;

不同密钥长度下,使用相同的padding模式可以加密的数据最大长度也不同;

RSA常用的密钥长度有1024bits、2048bits,理论上1024bits的密钥可以加密的数据最大长度为1024bits(即1024/8 = 128bytes)。2048bits的密钥可以加密的数据最大长度为2048bits(2048/8 = 256bytes)。实际应用中RSA经常与填充技术(padding)一起使用,可以增加RSA的安全性。

四、为什么要使用最佳非对称加密填充(OAEP)?

填充技术关系到RSA安全性的高低,原因大致如下:

弱安全填充模式下,RSA加密是确定的,即给定一个密钥,特定明文总会映射到特定的密文。攻击者可以根据密文中统计信息获取明文的一些信息。

填充技术如果比较弱,那么较小的明文和小型公开指数将易于受到攻击

RSA有个特性叫做延展性,如果攻击者可以将一种密文转换为另一种密文,而这种新密文会导致对明文的转换变得可知,这种特性并没有解密明文,而是以一种可预测的方式操纵了明文,比如:银行交易系统中,攻击者根据新密文,直接去修改原密文中金额的数据,可以在用户和接受方无法感知的情况下进行修改。

五、该缺陷漏洞的防范和修补方法有哪些?

在代码中使用OAEP创建RSA密码:

rsa= javax.crypto.Cipher.getInstance("RSA/ECB/OAEPWithMD5AndMGF1Padding");

六、含有“RSA算法未使用最优非对称加密填充”安全漏洞的代码样例:

hHoyYYSUFp.jpg

使用静态代码检测分析上述程序代码,则可以发现代码中使用了弱安全加密填充方式,导致存在安全隐患。如下图:

pFRjYmn0Od.jpg

“RSA算法未使用最优非对称加密填充”在CWE中被编号为CWE-780: Use of RSA Algorithmwithout OAEP


关键词标签:悟空云课堂 RSA算法 代码安全检测 代码漏洞修复 软件安全

浏览 53
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报