如何安全地存储加密密码

时间:2011-03-17 21:42:19

标签: java encryption key keystore

我正在开发Java RCP应用程序。用户需要使用他的SmartCard对自己进行身份验证才能访问该应用程序。在此,他可以打开/保存需要加密存储的文件。

目前,我正在使用基于密码的AES加密和硬编码密码。 这显然不安全,所以我需要一种不同的方法来加密/解密文件。

引起这个问题的是,有一些要求需要满足:

  • 无法保证网络连接(必须在离线模式下可用)
  • 多个用户必须能够访问这些文件(因此不需要公钥/私钥加密)
  • 不应该有一个“master”-key用于所有文件

编辑: 我不需要具有非常高的安全性。攻击者获取密钥只需要打开分布式JAR文件并以纯文本形式获取密钥就应该有点困难。

任何提示都将不胜感激。

2 个答案:

答案 0 :(得分:1)

对于每个文件,创建一个新密钥。使用该密钥加密文件(使用AES)。

然后,对于允许读取文件的每个用户,使用其公钥(对应于其智能卡上的私钥的公钥)加密新密钥。将这些加密密钥存储在文件中。

当用户想要读取文件时,软件会使用他的智能卡恢复用于该文件的内容加密密钥。

文件格式可以使用PKCS#7的加密消息语法或OpenPGP。

答案 1 :(得分:0)

警告:我对安全性并不熟悉,这只是我脑海中的事情。

作为建议,请为每个文件设置密码,该密码包含为每个文件随机生成的已知盐,以及为每个用户单独加密的单个密码。您可以在本地安全地存储随机盐,因为这些不是文件的关键,并且没有用户知道密码来解锁文件。通过使用公钥加密对密码进行加密和签名,您可以基于每个用户,每个文件对用户进行身份验证并控制访问。

通过这种方式,您可以使用来自每个用户的公钥加密来传递密码,密码不会存储在系统中的任何位置,可以彼此独立地保护文件,而不依赖于外部源。