我正在尝试使用 Openssl-RSA 编写一个简单的加密-解密程序。当数据被加密时,会生成一个密钥对。如果我想解密数据,我需要加密时生成的精确密钥对。
那么我应该在哪里以及如何存储这个密钥对,以便可以尽可能地解密加密内容?
我使用公钥进行加密,使用私钥进行解密。
答案1
从技术上来说,你可以将密钥对存储在任何你想要的地方,尽管有一些常见的方法可以做到这一点。
如果数据特别敏感,并且不会经常/持续需要,那么存储私钥的最安全方法是将其存储在闪存驱动器上或打印在保险柜或银行金库中的一张纸上。(请注意,您可以将公钥存储在任何您想要的地方 - 毕竟,它是一条“公开”信息。
如果您需要随时访问数据,通常将私钥离线存储在保险箱或保险库中并不实际,因为每次检索都很麻烦。通常用于密钥存储的常见位置是.ssh
主目录中的文件夹。(这是 Linux 上 OpenSSL 中的默认设置,也经常用于其他系统。)常见的做法是将密钥存储为两个文件,其名称以以下方式描述它们:purpose_type
私钥和purpose_type.pub
公钥。例如,如果您使用 OpenSSL 命令行创建标识的 RSA 密钥你,它将默认存储在文件id_rsa
和目录id_rsa.pub
中.ssh
。根据您的情况,您可以将密钥文件命名为mydatastorage_rsa
和mydatastorage_rsa.pub
。
重要的:如果您以这种方式存储私钥,强烈建议您使用密码保护它。这可以防止任何有权访问您文件的人使用您的私钥。当您最初创建密钥对时,可能会提示您提供密钥密码;如果没有,您可以使用 OpenSSL 命令行工具为私钥添加密码。
如果您要进行大量敏感的加密工作,您可以购买硬件密钥库,称为“硬件安全模块”,缩写为“HSM”,它专为安全存储私钥而设计。除非您实际上在安全/加密行业工作,否则这几乎肯定是过度的。还有其他硬件解决方案,包括“智能卡”和“USB 加密令牌”,它们比完整的 HSM 便宜,但仍需要一些硬件投资,而这些投资可能超出您的需要。
尽管建议使用密码保护私钥,但如果您需要在服务(如 Web 服务器)内部执行此解密,则可能会遇到问题。在这种情况下,您有三种选择:
- 每次服务器应用程序启动时提供密码。
- 在配置文件中提供密码。(仅部分服务器支持)
- 删除密码(或者一开始就不要设置密码)。
虽然第一个选项最安全,但只有每次手动启动服务时才能使用。如果您需要执行其他任何选项,请确保正确保护配置文件(选项 2)或私钥(选项 3),以防止访问。