我正在开发一个Java应用程序。用户需要使用自己的SmartCard进行身份验证才能访问应用程序。在里面,他可以打开/保存需要加密存储的文件。
目前,我正在使用基于密码的AES加密和硬编码密码。这显然是不安全的,所以我需要一种不同的方法来加密/解密文件。
引起这一问题的原因是,有几项要求需要满足:
无保证的网络连接(必须在offline-mode)
)。
编辑:我不需要有一个非常高的安全水平。对于攻击者来说,获取密钥应该会有点困难,就像打开分布式JAR文件并以纯文本获取密钥一样。
如有任何提示,将不胜感激。
发布于 2011-03-17 22:41:51
为每个文件创建一个新键。使用该密钥加密文件(使用AES)。
然后,对于允许读取文件的每个用户,使用他们的公钥(与智能卡上的私钥对应的公钥)加密新密钥。将这些加密密钥与文件一起存储。
当用户想要读取一个文件时,该软件使用他的智能卡恢复用于该文件的内容加密密钥。
该文件格式可以使用PKCS #7的加密消息语法或OpenPGP。
发布于 2011-03-17 21:53:45
请注意:我对安全不是很精通,这只是我脑海中闪现的东西。
作为建议,将每个文件的密码设为一个散列,其中包含为每个文件随机生成的已知盐,并为每个用户单独加密一个密码。您可以在本地安全地存储随机盐,因为它们不是文件的密钥,而且没有用户知道解锁文件的密码。通过使用公钥加密对密码进行加密和签名,您可以在每个用户、每个文件的基础上对用户进行身份验证并控制访问。
通过这种方式,您可以使用来自每个用户的公钥加密来传递密码,该密码不存储在系统中的任何地方,保护文件相互独立,不依赖于外部源。
https://stackoverflow.com/questions/5345630
复制相似问题