CWE-780:RSA算法未使用最优非对称加密填充漏洞

不夸张地说,只要有计算机网络的地方就有RSA算法,非对称加密算法的特点是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密,用公钥加密的明文,只能用私钥解密。

RSA非对称加密可以用来数据加密及数字签名和身份认证。非对称加密算法的优点是安全性高,并且算法强度复杂,安全性依赖于算法与密钥,但也由于算法复杂使得加密解密速度不如对称加密解密快。在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算法未使用最优非对称加密填充”安全漏洞的代码样例:

使用Wukong(悟空)软件代码安全漏洞检测修复系统检测上述程序代码,则可以发现代码中使用了弱安全加密填充方式,导致存在安全隐患。如下图:

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

posted @ 2021-06-18 10:15  中科天齐软件原生安全  阅读(561)  评论(0编辑  收藏  举报