[20][03][17] Weak Encryption: Inadequate RSA Padding

文章目录

  • 1. 问题描述
  • 2. 问题场景
  • 3. 修复方案

1. 问题描述

公钥RSA加密是在不使用OAEP填充的情况下执行的,因此加密是弱的
Cipher.getInstance("RSA/NONE/NoPadding")RSA/NONE/NoPadding 参数的含义依次是 “算法/模式/填充模式”

  • 加密算法:
  • AES
  • DES
  • DESede(DES3)
  • RSA
  • 模式
  • 密码块链接(CBC)
  • 电子码本(ECB)
  • 密码反馈(CFB)
  • 计数器(CTR)
  • 填充模式:
  • NoPadding: 加密内容不足8位用0补足8位,Cipher类不提供补位功能,需自己实现代码给加密内容添加0,如{65,65,65,0,0,0,0,0}
  • PKCS5Padding: 加密内容不足8位用余位数补足8位,如{65,65,65,5,5,5,5,5}或{97,97,97,97,97,97,2,2}

2. 问题场景

在实践中,RSA公钥加密通常与填充方案相结合,填充方案的目的是防止对RSA的大量攻击,只有当加密执行时没有填充

下面的代码使用RSA公钥执行加密,而不使用填充方案

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

3. 修复方案

  • ECB 模式本质上是弱的,因为它为相同的纯文本块生成相同的密文
  • CBC 模式易受填充 oracle 攻击
  • CTR 模式是最好的选择,因为它没有这些缺点

使用下面的 RSA 加密解决方案

RSA/CBC/PKCS1Padding

你可能感兴趣的:(信息安全,Fortify,Weak,Encryption,信息安全)