悟空云课堂丨代码安全第四十期: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算法未使用最优非对称加密填充”安全漏洞的代码样例:
使用静态代码检测分析上述程序代码,则可以发现代码中使用了弱安全加密填充方式,导致存在安全隐患。如下图:
“RSA算法未使用最优非对称加密填充”在CWE中被编号为CWE-780: Use of RSA Algorithmwithout OAEP
关键词标签:悟空云课堂 RSA算法 代码安全检测 代码漏洞修复 软件安全