Encryption 私钥的安全存储

Encryption 私钥的安全存储,encryption,passwords,private-key,Encryption,Passwords,Private Key,我们希望存储FTP、网站、数据库等的密码。您可以将我们的软件与keypass进行比较,但我们希望实现自己的解决方案。 密码将被加密并存储在数据库中。我们不能使用校验和,因为我们需要以明文形式显示密码 问题是我们找不到一个好的解决方案来存储私钥。如果它是用代码写的,你可以很容易地得到它。如果它隐藏在dll中,则无法有效地隐藏它,因为机器必须使用它。我们软件的所有用户都可以完全访问源代码、带有加密密码的数据库,并且是他们电脑上的管理员,因此他们可以在使用代码时读取代码 我们考虑将私钥存储在一个单独的

我们希望存储FTP、网站、数据库等的密码。您可以将我们的软件与keypass进行比较,但我们希望实现自己的解决方案。 密码将被加密并存储在数据库中。我们不能使用校验和,因为我们需要以明文形式显示密码

问题是我们找不到一个好的解决方案来存储私钥。如果它是用代码写的,你可以很容易地得到它。如果它隐藏在dll中,则无法有效地隐藏它,因为机器必须使用它。我们软件的所有用户都可以完全访问源代码、带有加密密码的数据库,并且是他们电脑上的管理员,因此他们可以在使用代码时读取代码

我们考虑将私钥存储在一个单独的数据库中,该数据库使用另一个密码进行访问,但无论如何都会使用该密钥


所以,我们没有任何进展。我们知道没有一个100%节省的解决方案,但必须有一个几乎安全的解决方案。

首先,我建议不要编写自己的解决方案,错误的方法有很多,您需要投入大量时间来了解所有要点

您不需要将密钥存储在任何地方,只需使用密钥加密数据,然后忘记密钥即可。对于解密,您使用输入的密钥,如果密钥正确,则返回数据,否则返回加扰内容


由于用户不喜欢键入强密钥和首选密码,因此您应该使用诸如BCrypt或PBKDF2(Password-Based-key-derivation-function-2)之类的密钥派生函数,该函数可以将密码转换为密钥。

无论是好是坏,他们希望以后能够检索密码:“我们不能使用校验和,因为我们需要以明文形式显示密码。”@Perseids-也许你误解了答案,密码仅用于加密密钥)从用户密码来看,这是他们最初的目的。密码/密钥本身根本不应该被存储。我明白了。不过,不管出于什么原因,他们似乎对使用特定于用户的密码进行加密不感兴趣(参见我对这个问题的评论)@Perseids-也许他们只是没有考虑到这种可能性。对于一个拿着锤子的人来说,一切看起来都像钉子……使用PBKDF2将是完美的。每个用户都在访问同一个用对称密钥加密的数据库。问题是每个用户都有不同的密码。因此我们必须用不同的密码创建相同的密钥密码。我找不到解决方案。如果有,请给我一个提示。你没有提到为什么你不能模仿keypass获取加密密钥的方式:向用户询问密码。此外,你似乎对“几乎安全”(即不安全,“但谁会注意到?”)不满意拒绝dll嵌入的解决方案。总的来说,您没有提供足够的上下文来帮助您找到安全的解决方案(如果有):您的应用程序应该将谁的密码存储在谁的电脑上,以便合法使用?我们是少数人,有些人共享FTP等条目。目前,我们共享一个Keepass文件。这意味着我们每个人都可以使用主密码访问每个条目。这是我们不再需要的。每个人都应该能够访问自己的条目条目和特定的共享条目。这些共享条目是我们的问题。到目前为止,条目将使用私钥加密。但是,如果你想共享条目,另一个条目必须使用相同的私钥解密。我现在正在寻找解决方案。我们所有PC上的软件,服务器上的数据库如何使用一个公共Keepass文件和每个人都有一个私人密码?回到自制的解决方案:如果你想要更精细的访问控制,你可以为每个用户分配一个非对称密钥对,如果有人与组共享密码,你的软件会用组成员的每个公钥加密密码。这似乎是唯一可行的方法。我们还没有使用它,因为我们需要AES加密。因此我研究了使用key1加密密码。然后将用户的私钥添加到可以解密key1的密钥列表中。由于我找不到方法,我们可能会使用RSA。谢谢您的回答。