我正在开发Java RCP应用程序。用户需要使用他的SmartCard对自己进行身份验证才能访问该应用程序。在此,他可以打开/保存需要加密存储的文件。
目前,我正在使用基于密码的AES加密和硬编码密码。 这显然不安全,所以我需要一种不同的方法来加密/解密文件。
引起这个问题的是,有一些要求需要满足:
编辑: 我不需要具有非常高的安全性。攻击者获取密钥只需要打开分布式JAR文件并以纯文本形式获取密钥就应该有点困难。
任何提示都将不胜感激。
答案 0 :(得分:1)
对于每个文件,创建一个新密钥。使用该密钥加密文件(使用AES)。
然后,对于允许读取文件的每个用户,使用其公钥(对应于其智能卡上的私钥的公钥)加密新密钥。将这些加密密钥存储在文件中。
当用户想要读取文件时,软件会使用他的智能卡恢复用于该文件的内容加密密钥。
文件格式可以使用PKCS#7的加密消息语法或OpenPGP。
答案 1 :(得分:0)
作为建议,请为每个文件设置密码,该密码包含为每个文件随机生成的已知盐,以及为每个用户单独加密的单个密码。您可以在本地安全地存储随机盐,因为这些不是文件的关键,并且没有用户知道密码来解锁文件。通过使用公钥加密对密码进行加密和签名,您可以基于每个用户,每个文件对用户进行身份验证并控制访问。
通过这种方式,您可以使用来自每个用户的公钥加密来传递密码,密码不会存储在系统中的任何位置,可以彼此独立地保护文件,而不依赖于外部源。