我正在开发处理大量(数百万) RSA私钥的软件。密钥大小是2048。
我必须将它们存储在数据库中,我希望对它们进行加密,以减少恶意访问数据库所带来的危害。当然,使用PKCS #8的密码短语也会出现在脑海中。
我不能对每个密钥都有单独的密码,因为我不能安全地存储它们。我只能把几个密码储存在一个安全的金库里。
但现在我怀疑,用PKCS #8对数百万个私钥应用相同的密码是不安全的。
请您:
发布于 2018-03-01 13:38:25
确认或反驳我的假设,即使用相同的密码来用PKCS #8加密数百万个密钥,大大削弱了加密的强度。如果夏娃得到了足够多的加密密钥,她就能知道同样的密码被应用了吗?“很多次”攻击?
那得看情况。
如果使用来自PKCS#8 v1.5的方法(而不是>v2.0)使用PKCS#5加密,则使用密钥长度非常短的密码,如DES。这显然是不好的,因为我们可以合理地蛮力-强制键(感兴趣的)。
然而,PKCS#5 (即PKCS#8指定的加密)应该为每个容器生成一个新的随机盐,并使用基于密码的密钥派生和一些合理的迭代参数来达到密钥/ IV对的加密。也就是说,所有私钥都将使用来自不同盐类和相同密码的不同密钥加密。
因此,总的来说,加密并不是因为加密了大量数据,而是因为您使用了弱加密方法(如果使用旧的v1 PKCS#5标准)。
建议一种更好的加密方法,使用相同的密码(或数量有限)。
假设密码是强的,并且没有泄漏,PKCS#5 v2.X应该确实做到了这一点。您可能会考虑添加额外的间接,即使用密码派生一个主机密(例如256位),然后输入到PKCS#5调用,这样您就可以很容易地更改密码时,它是泄漏或人们去,但他们没有采取派生参数/密钥。
发布于 2018-03-01 17:48:36
从密码学的角度来看,你会想到一个HSM。
在这里使用基于HSM的解决方案的主要原因是您获得了防范攻击的保证。毕竟,HSM是为安全性而设计的,并且显式地构建使其无法访问HSM中存储的密钥数据。
使用HSM,您可以:
这似乎提供了许多可用和安全的方法来处理您描述的场景。
发布于 2018-03-01 14:48:39
我至少会使用不同的阶段,例如使用一个强的PBKDF (PBKDF2、bcrypt、scrypt、Argon2)来加密一个单独的私钥,然后使用一个带有认证密码的混合密码系统来加密每个私钥。这具有效率优势,并且允许您在不需要密码访问的情况下加密私钥。如果系统需要脱机,也可以将加密的私钥移出系统。拥有一个PIN保护智能卡与私人加密密钥将有很大的意义。
然而,要真正保护这样的系统,您不应该仅仅依靠加密技术;这需要一个具有指定访问条件和系统边界的安全系统。它超出了这个问题和本站点设计这样一个系统的范围;它将取决于您的特定用例、线程模型和域/系统参数。在以下问题的评论中,我提出了一些建议,以避免出现这种情况。
https://crypto.stackexchange.com/questions/56064
复制相似问题