C# 在文件中存储RSA私钥
我有一个简单的加密应用程序,我将加密数据库中的“敏感”数据。只有拥有访问权限的人才能看到解密后的数据。我一直在四处寻找关于如何做到这一点的更多信息,以下是我的项目方法:C# 在文件中存储RSA私钥,c#,encryption,aes,rsa,C#,Encryption,Aes,Rsa,我有一个简单的加密应用程序,我将加密数据库中的“敏感”数据。只有拥有访问权限的人才能看到解密后的数据。我一直在四处寻找关于如何做到这一点的更多信息,以下是我的项目方法: 我使用的是AES加密算法 使用RNGCryptoServiceProvider生成AES密钥。使用AES密钥加密信息 使用和RSA公钥加密AES密钥 将私钥存储在USB文件中,我只会将其提供给具有访问权限的人 当合法的人需要查看解密的信息时,他们将提供私钥。应用程序使用私钥解密AES密钥,AES密钥反过来解密信息 现在,我的问题
多谢~不知何故,解密密钥或用于获取解密密钥的RSA密钥必须以明文形式保存。如果它不是一个USB驱动器,它必须在用户的头脑中 因此,您可以做的是进行多因素身份验证。只有用户知道的密码(他会把它记在脑子里或写在便笺上;不是你的电话)和包含其他解密密钥的USB驱动器 因此,攻击者必须同时拥有密码和USB驱动器才能获取加密信息
了解如何从用户输入的密码派生加密安全密钥。我建议将证书和私钥一起存储在PKCS兼容容器(*.pfx)中。在C#中,这可以通过Bouncy Castle图书馆完成 以下是如何创建该对: 这是如何将其存储在容器中(步骤3):
解密私钥的问题是,该密钥将以明文形式传输到计算机的主内存中,也可能在存储中的交换中传输。有几个选项可以在不将私钥放入内存的情况下使用私钥:
- 使用智能卡,PIN后面有私钥(PIN比密码更安全,因为它们通常受到“重试计数”的保护(因此您不能尝试强行访问)
- 使用安全令牌,基本上是智能卡和智能卡读卡器的组合
- 使用计算机主板上的板载可信平台模块(TPM),该模块基本上是板载智能卡
- 使用操作系统提供的某种受保护的密钥存储
欢迎来到密钥管理领域:)谢谢您的回答。那么,您的意思是从密码中派生一个密钥,并使用它来加密私钥文件?是的,应该可以。因此,最终这一切都取决于用户头脑中的密码。但那将不是多因素认证。可能先使用USB驱动器中的密钥进行加密,然后使用您从用户应该记住的密码中获得的密钥重新加密,或者您可以
XOR
两个密钥获得一个密钥,然后使用该密钥进行加密。XOR的想法听起来不错。谢谢但是,我认为PBKDF2派生密钥应该足够好。如果密码不知何故在对手手中,他可以解密信息。但是,如果考虑到多个因素,对手也需要访问USB驱动器。你的电话。好吧,假设我使用XOR方法。私钥文件现在使用单个密钥(passphraseKey XOR私钥)进行加密。我必须在得到私钥之前解密它。那么,我如何取回用于解密的单个密钥呢?PS除了Wiktor和Ranhiru提供的答案之外,还提供了这个答案。谢谢,owlstead。我最近在学校上了一堂密码学课,我发现好的密钥管理真的很难!