2014-05-08 118 views
-1

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

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

我们考虑过将私钥存储在一个单独的数据库中,该数据库使用另一个密码访问,但密钥仍然会被使用。

所以,我们没有得到任何地方。我们知道没有100%的保存解决方案,但是这个解决方案几乎是安全的。

+0

你还没有提到为什么你不能模仿keypass获取加密密钥的方式:询问用户密码。考虑到您拒绝dll嵌入,您似乎也不会对“几乎安全”(即不安全,但是谁会注意到?)解决方案感到满意。总体而言,您没有提供足够的上下文来帮助您找到安全的解决方案(如果有的话):您的应用程序应该将其*密码存储在*其合法使用的* PC上* – Perseids

+0

我们是一些人和一些FTP分享条目等。目前,我们共享一个Keepass文件。这意味着我们每个人都可以使用主密码访问每个条目。这就是我们不想要的东西。每个人都应该能够访问他自己的条目和特定的共享条目。那些共享的是我们的问题。到目前为止,条目将使用私钥加密。但是如果你想共享条目,另一个必须用相同的私钥解密它。我现在正在寻找一个解决方案。 软件在我们所有的PC上,服务器上的数据库 – Noraya

+0

如何使用一个公共Keepass文件和每个人的私人文件?回到自制解决方案:如果您想要更细化的访问控制,您可以为每个用户分配一个非对称密钥对,并且如果某人与某个组共享密码,则该软件会使用该组成员的每个公钥对该密码进行加密。 – Perseids

回答

0

首先,我会建议不要写自己的解决方案,有很多方法做错了,你需要投入大量的时间来了解所有重要的问题。

您不需要在任何地方存储密钥,只需使用密钥来加密数据,然后忘记密钥。为了解密,您使用输入的密钥,如果密钥正确,您将获取数据,否则您将获得加密内容。

因为用户不喜欢键入强键和预设密码,所以应该使用像BCrypt或PBKDF2(Password-Based-Key-Derivation-Function-2)这样的密钥派生函数,它可以将密码转换为键。

+0

无论好坏,他们希望稍后能够检索密码:“我们不能使用校验和,因为我们需要以明文形式显示密码。” – Perseids

+0

@Perseids - 可能你误解了答案,[PBKDF2](http://en.wikipedia.org/wiki/PBKDF2)仅用于从用户密码中篡改密钥(用于加密),这是它们的原始目的。密码/密钥本身不应该存储。 – martinstoeckli

+0

我明白了。尽管他们似乎没有兴趣使用用户特定的密码进行加密,但(请参阅我对该问题的评论)。 – Perseids