首页 > 解决方案 > SonarQube:确保加密数据在这里是安全的。AES/GCM/NoPadding、RSA/ECB/PKCS1Padding

问题描述

我正在使用:

1. RSA/ECB/PKCS1Padding

2. AES/GCM/NoPadding

在我的 Android (Java) 应用程序中加密我的数据。在 SonarQube 的文档中,它指出:

高级加密标准 (AES) 加密算法可用于各种模式。没有填充的伽罗瓦/计数器模式 (GCM) 应该优先于以下不安全的组合:

因此,正如推荐的那样,我使用AES/GCM/NoPaddingas :

Cipher c = Cipher.getInstance("AES/GCM/NoPadding");

但是,它仍然给我警告确保加密数据在这里是安全的。

相同的:

Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

为什么SonarQube会发出该警告?这些用途不再安全了吗?

标签: encryptionrsaaespaddingaes-gcm

解决方案


GCM 模式下的 AES 作为分组密码算法进行保护。但这并不能保证使用 AES(在 GCM 模式下)加密数据的代码是安全的。有几件事可能会出错,使代码容易受到攻击。以正确的方式对其进行编码以获得所需的安全级别是开发人员的责任。一些可能出错的例子是:

  1. IV 对给定键重复
  2. 密钥或原始数据存储在String一直在堆中徘徊的数据类型中
  3. 密钥以明文形式存储在代码存储库中的属性文件中

等等。

现在,SonarQube 无法识别所有这些漏洞,因此他们提出了一个名为 Hotspot 的新概念,此处描述为:

与漏洞不同,安全热点不一定是容易受到攻击的问题。相反,安全热点突出显示需要手动审查的安全敏感代码片段。经过审查,您会发现需要修复的漏洞或不存在威胁​​。

热点有一个单独的生命周期,在上面给出的链接中进行了解释。

PS这个答案解释了如何以安全的方式在GCM模式下使用AES加密Java中的字符串:https ://stackoverflow.com/a/53015144/1235935


推荐阅读