Encryption SonarQube:确保加密数据在这里是安全的。AES/GCM/NoPadding、RSA/ECB/PKCS1Padding

Encryption SonarQube:确保加密数据在这里是安全的。AES/GCM/NoPadding、RSA/ECB/PKCS1Padding,encryption,rsa,aes,padding,aes-gcm,Encryption,Rsa,Aes,Padding,Aes Gcm,我正在使用: 1。RSA/ECB/PKCS1P添加 2。AES/GCM/NoPadding 在我的Android(Java)应用程序中加密我的数据。在SonarQube会议上,声明: 高级加密标准(AES)加密算法可用于各种模式。无填充的伽罗瓦/计数器模式(GCM)应优先于以下未固定的组合: 电子码本(ECB)模式:在给定的键下,任何给定的 明文块始终加密到同一密文块。 因此,它不能很好地隐藏数据模式。从某种意义上说,它不是 提供严格的消息保密性,不建议这样做 用于加密协议中 使用PKCS#5

我正在使用:

1。RSA/ECB/PKCS1P添加

2。AES/GCM/NoPadding

在我的Android(Java)应用程序中加密我的数据。在SonarQube会议上,声明:

高级加密标准(AES)加密算法可用于各种模式。无填充的伽罗瓦/计数器模式(GCM)应优先于以下未固定的组合:

  • 电子码本(ECB)模式:在给定的键下,任何给定的 明文块始终加密到同一密文块。 因此,它不能很好地隐藏数据模式。从某种意义上说,它不是 提供严格的消息保密性,不建议这样做 用于加密协议中
  • 使用PKCS#5填充(或PKCS#7)的密码块链接(CBC)是 易受oracle攻击
因此,由于它是推荐的,我使用
AES/GCM/NoPadding
作为:

Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
但是,它仍然向我发出警告,请确保加密数据在这里是安全的。

同样适用于:

Cipher c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
为什么SonarQube会抛出该警告?
这些使用不再安全了吗?

似乎是关于加密任何数据的一般警告。“AES/GCM/NoPadding”不应该有问题,因为。

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

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

    现在,SonarQube无法识别所有这些漏洞,因此他们提出了一个称为热点的新概念,该概念被描述为:

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

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


    另外,这个答案解释了如何在GCM模式下用AES在Java中以安全的方式加密字符串:

    欢迎使用crypto.stackexchange-这似乎是一个编程问题,编程问题在这里是离题的,即使程序使用加密技术。编程问题属于stackoverflow。我可以帮你把这个迁移到那里。警告是什么?@JamesKPolk
    确保加密数据在这里是安全的。
    是的,但是有什么方法可以消除这个问题吗?