Security Jasypt StandardPBEStringEncryptor在SpringBean配置文件中设置密码

Security Jasypt StandardPBEStringEncryptor在SpringBean配置文件中设置密码,security,encryption,spring-security,pci-dss,jasypt,Security,Encryption,Spring Security,Pci Dss,Jasypt,当使用Jasypt的StandardPBEStringEncryptor时,我们必须在SpringBean配置文件中显式设置密码。在bean配置文件中保存密码是否安全?存储加密机密码在PCI合规性方面会有问题吗?您需要将对称密钥存储在某个位置。配置文件是一个好地方,只要没有人可以访问它。此将不符合PCI标准。数据加密密钥不能以明文形式存储。具体点为3.5.2,即: 检查系统配置文件以 验证密钥是否存储在 加密格式,以及 密钥加密密钥被存储 与数据加密密钥分开 在密钥管理领域,您可能还会遇到其他问

当使用Jasypt的StandardPBEStringEncryptor时,我们必须在SpringBean配置文件中显式设置密码。在bean配置文件中保存密码是否安全?存储加密机密码在PCI合规性方面会有问题吗?

您需要将对称密钥存储在某个位置。配置文件是一个好地方,只要没有人可以访问它。

将不符合PCI标准。数据加密密钥不能以明文形式存储。具体点为3.5.2,即:

检查系统配置文件以 验证密钥是否存储在 加密格式,以及 密钥加密密钥被存储 与数据加密密钥分开

在密钥管理领域,您可能还会遇到其他问题,例如3.6.6(分割知识和密钥的双重控制)

验证密钥管理程序 实现时需要拆分 知识与钥匙的双重控制 (例如,需要两个或三个 人们,每个人都只知道自己 关键的一部分,重建 整把钥匙)

是PCI合规性中最具挑战性的部分。您可能想考虑使用(已经PCI兼容的)第三方来管理卡数据。如果您是自己开发的,那么我建议您尽早引入QSA(PCI合格安全评估师)的帮助,以评估您计划实施的安全性。最终,为了通过PCI要求,您需要说服QSA,他们将非常乐意提供建议。

我有一个想法

您可以使用keystore.jks密钥对加密所有普通密码。您知道keystore.jks有自己的密码。您可以记住该密码,并在程序启动时在控制台上输入该密码。例如,当程序启动时:

Console console = System.console();
        keyPair = loadKeystore(new String(console.readPassword()));


private static KeyPair loadKeystore(String pwd) {
        InputStream is = Main.class.getResourceAsStream("/keystore.jks");

        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        keystore.load(is, s.toCharArray());

        String alias = "youralias";

        Key key = keystore.getKey(alias, pwd.toCharArray());
        if (key instanceof PrivateKey) {
            // Get certificate of public key
            Certificate cert = keystore.getCertificate(alias);

            // Get public key
            PublicKey publicKey = cert.getPublicKey();

            // Return a key pair
            return new KeyPair(publicKey, (PrivateKey) key);
        }
        return null;
    }
当您返回密钥对时,您可以使用它来加密密码

key=loadKeystore(“yourpass”).getPrivate().getEncoded()

祝你好运