如何在Java Web应用程序的用户会话期间安全地存储类型javax.crypto.SecretKey
的加密密钥对象?我必须管理这样一个密钥,因为我只能在登录后创建该密钥,但稍后可能需要该密钥才能解密敏感用户数据。如何在Web应用程序运行时保留用于解密的密钥
secretKey本身是通过基于密码的衍生密钥函数(当前为“PBKDF2WithHmacSHA1”)从用户密码派生而来的。使用的salt和迭代次数在数据库中是持久的。通过这些参数 - 密码,salt和迭代 - 我可以在登录后立即重新创建密码密钥,当密码可用时。之后, 我想将生成的密钥保存在内存中,而不是始终保持密码。
因为我使用的是Spring/Hibernate,可以安全地将该键对象放入具有会话范围的bean中吗?这样的对象只存在于内存中,应该是安全的,不是吗?
一般问题:如果密钥可用的时间不同于该密钥应该使用的时间,甚至几分钟就可以建立安全环境吗?