Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 使用RSA/RSA+加密网站配置是否安全;AES和存储在源代码中?_Security_Encryption_Configuration_Cryptography_Rsa - Fatal编程技术网

Security 使用RSA/RSA+加密网站配置是否安全;AES和存储在源代码中?

Security 使用RSA/RSA+加密网站配置是否安全;AES和存储在源代码中?,security,encryption,configuration,cryptography,rsa,Security,Encryption,Configuration,Cryptography,Rsa,您可能知道,在源代码中存储软件配置(如数据库密码)是非常糟糕的。我们可以在所有配置中使用环境变量,但它需要创建几十个变量,并且不容易与我们的云提供商一起使用。我的想法是使用RSA分别加密所有配置密钥,如下所示: // config.json file: { "databasePassword": "k32noi23fj3209jf23...", "awsKey": "qKwmkwfl3j2P?38...", "smtpPassword": "23kKS293j..." }

您可能知道,在源代码中存储软件配置(如数据库密码)是非常糟糕的。我们可以在所有配置中使用环境变量,但它需要创建几十个变量,并且不容易与我们的云提供商一起使用。我的想法是使用
RSA
分别加密所有配置密钥,如下所示:

// config.json file:
{
    "databasePassword": "k32noi23fj3209jf23...",
    "awsKey": "qKwmkwfl3j2P?38...",
    "smtpPassword": "23kKS293j..."
}
然后,使用解密密钥解密每个值:

var decryptionKey = GetSystemEnvironmentVariable("DecryptionKey");
var encryptedDbPassword = ReadConfigSetting("databasePassword");
var decryptedDbPassword = RsaDecrypt(decryptionKey, encryptedDbPassword);
因此,我只需要一个环境变量/文件来解密配置中的所有密钥,该密钥不在源代码中,也不可供员工使用


4096位
RSA
对于此类任务有多安全?如果有人在没有解密密钥的情况下窃取了我的配置文件,是否有可能以合理的计算能力重新计算我的解密密钥?如果不够安全,我可以使用2个cithers吗?例如,首先使用RSA加密,然后使用另一个密钥使用AES加密?

好吧,阅读了您的评论,我认为这是有意义的,这取决于您的风险偏好。它确实增加了一些风险和一些要考虑的威胁(如下所述),但对我来说,这听起来根本没有缺陷。

一些想法:

  • 存储在源代码中加密的参数会让攻击者有无限的时间和资源来破解加密,至少从理论上来说是这样。攻击者可能试图构建大型并行解密节点集群,还可能利用您选择的加密算法在将来发现的漏洞进行攻击

  • 与此密切相关的是,加密内容的一个警告通常是密钥管理。您有时应该更改加密密钥,部分是为了减轻上述风险。如果攻击者破解您的密钥的时间比您更改密钥的时间间隔长,那么您就可以了

  • 您还应该定期更改配置中包含的秘密。这再次降低了攻击者可能会破坏您的加密的另一方面的风险

  • 我会选择一种解密速度慢(计算密集型)的算法。Artjom B.说的没错,您在技术上不需要公钥加密来实现这一目的,但无论如何,我可能会选择RSA,因为对于离线攻击者来说,这可能是更大的CPU能力来进行暴力攻击(也取决于密钥长度)

  • 我会选择一个比较大的密钥,4096位RSA看起来不错


简而言之,在我的安全帽中,我不太喜欢这个解决方案,但根据您的场景和用例,您可能会决定接受风险。

服务器需要访问配置,所以它需要密钥,对吗?为什么你认为这比根本不加密要好?您能描述一下您的系统架构以及谁在何时加密吗?我将生成加密/解密密钥,并手动加密生产环境配置文件中的每个值。因此,加密密钥仅对我可用,而解密密钥仅作为环境变量对我和生产服务器可用。因为解密密钥必须接近密文,所以这只是通过隐蔽性提高了安全性。我将密钥和安全配置放入tar文件中。然后我使用RSA 4096来锁定东西。解密密钥由脚本应用。脚本将解密密钥作为参数复制/粘贴到AWS“用户数据”中。脚本获取密钥,然后从S3下载文件,然后在下载的文件上使用密钥。它在任何时候都不存储密钥,它只是成为启动的脚本的一个参数。@ArtjomB。这将使部署过程更容易,因为我们可以在不接触生产环境的情况下向配置添加更多键(配置文件将随部署自动上载,但不会随系统变量一起上载)。我们也不能使用超过5个环境变量,而且我们的参数比这多得多-这将需要将多个设置组合成一个,所有这些都需要手动操作,并且容易出错。