【悟空云课堂】第四十期:RSA算法未使用最优非对称加密填充 CWE-780: Use of RSA Algorithm without OAEP

【悟空云课堂】第四十期:RSA算法未使用最优非对称加密填充

关注公众号“中科天齐软件安全中心”(id:woocoom),一起涨知识!

该栏目为中科天齐全新规划的悟空云课堂,每周五下午18:00准时上线,旨在科普软件安全相关知识,助力企业有效防范软件安全漏洞,提升网络安全防护能力。

漏洞简介:

软件使用了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安全性的高低,原因大致如下:

1 在弱安全填充模式下,RSA加密是确定的,即给定一个密钥,特定明文总会映射到特定的密文。攻击者可以根据密文中统计信息获取明文的一些信息。
2 填充技术如果比较弱,那么较小的明文和小型公开指数将易于受到攻击。
3 RSA有个特性叫做延展性,如果攻击者可以将一种密文转换为另一种密文,而这种新密文会导致对明文的转换变得可知,这种特性并没有解密明文,而是以一种可预测的方式操纵了明文,比如:银行交易系统中,攻击者根据新密文,直接去修改原密文中金额的数据,可以在用户和接受方无法感知的情况下进行修改。

“RSA算法未使用最优非对称加密填充”漏洞的防范和修补方法有哪些?

在代码中使用OAEP创建RSA密码:
rsa = javax.crypto.Cipher.getInstance(“RSA/ECB/OAEPWithMD5AndMGF1Padding”);

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

public Cipher getRSACipher() {
     
Cipher rsa = null;
try {
     
rsa = javax.crypto.Cipher.getInstance("RSA/NONE/NoPadding");
//…………..其他代码
}catch (java.security.NoSuchAlgorithmException e) {
     
log("this should never happen", e);
}catch (javax.crypto.NoSuchPaddingException e) {
     
log("this should never happen", e);
}
return rsa;
}

使用Wukong检测相应程序代码,则可以发现代码中使用了弱安全加密填充方式,导致存在安全隐患。如下图:
【悟空云课堂】第四十期:RSA算法未使用最优非对称加密填充 CWE-780: Use of RSA Algorithm without OAEP_第1张图片

“RSA算法未使用最优非对称加密填充”在CWE中被编号为CWE-780: Use of RSA Algorithm without OAEP
更多的信息请参考CWE官网:http://cwe.mitre.org/data/definitions/780.html

你可能感兴趣的:(悟空云课堂)