Java Web应用程序的加密/解密/密钥轮换的现有做法是什么?

Chr*_*oph 5 java security

我需要在基于java的web应用程序(使用jasypt)中加密用户输入的数据,该数据库持久存储在MySQL数据库中,我希望能够定期更改加密密钥/密码短语(例如90天).该应用程序位于Web上的服务器上.

现有的已加密数据需要使用新密钥重新加密,但为了做到这一点,它当然需要旧密钥.

  1. 旋转键有哪些常见做法?
  2. 使加密密钥可用于系统的常用方法有哪些(例如,通过命令行传递的系统属性,加密的属性文件,通过https从另一台服务器下载)

我希望没有单一的答案,但我想得到一些提示,指针和流行语来调查正确的方向.

Raj*_*Raj 5

首先,了解密钥轮换的目的非常重要.您的用例是加密静态数据.在这种情况下,密钥轮换的目的是在密钥泄露或加密数据集泄露并遭受强力解密攻击的情况下包含数据泄露.关键轮换的常见做法:

  • 时间限制键旋转:在此练习中,键会定期更新.
  • 事务级别密钥:在此实践中,每个事务都使用其自己的唯一密钥进行加密,从而导致更高级别的数据泄露缓解.

使密钥可用于系统:这通常使用密钥管理服务器来完成.该服务器的核心是根据参数向请求者分发(通常是对称的)密钥.服务器可以选择安全地存档生成的密钥以供以后检索,或者确保它们是基于固定功能生成的,保证在给定相同参数集的情况下生成相同的密钥.

您可以选择编写自己的服务器或购买/许可服务器.如果您需要满足特定的安全合规性准则并且需要检查合规性项目,则许可此组件可能是更好的选择.对于现成的解决方案,请查看StrongAuthPorticor作为示例.

  • 这并没有回答问题...问题是当加密密钥更改时是否需要重新加密数据(除了使用旧密钥解密并使用新密钥加密),而且我没有看到任何建议。 (2认同)