При использовании Jasypt StandardPBEStringEncryptor мы должны явно установить пароль в файле конфигурации Spring bean. Это нормально и безопасно иметь пароль в файле конфигурации bean-компонента? Будет ли проблемой в соответствии с требованиями PCI сохранить пароль шифратора?
Jasypt StandardPBEStringEncryptor устанавливает пароль в файле конфигурации Spring bean
Ответы (3)
Это не будет соответствовать PCI. Ключи шифрования данных нельзя хранить в виде открытого текста. Конкретный пункт - 3.5.2, который:
Изучите файлы конфигурации системы, чтобы убедиться, что ключи хранятся в зашифрованном формате и что ключи шифрования ключей хранятся отдельно от ключей шифрования данных.
У вас, вероятно, также возникнут другие проблемы, связанные с областью управления ключами, например 3.6.6 (разделение знаний и двойное управление ключами)
Убедитесь, что процедуры управления ключами реализованы так, чтобы требовать раздельного знания и двойного контроля ключей (например, требуется два или три человека, каждый из которых знает только свою часть ключа, для восстановления всего ключа).
Управление ключами является наиболее сложной частью соблюдения требований PCI. . Вы можете рассмотреть возможность использования (уже совместимого с PCI) третьей стороны для управления данными вашей карты. Если вы используете свой собственный, я бы посоветовал вам при первой же возможности обратиться за помощью к QSA (PCI Qualified Security Assesor) для оценки безопасности, которую вы планируете внедрить. В конечном итоге вам нужно будет убедить QSA, чтобы соответствовать вашим требованиям PCI, и они будут более чем рады проконсультировать вас.
Вам нужно где-то хранить симметричный ключ. Файл конфигурации - хорошее место, если никто не имеет к нему доступа.
у меня есть идея
вы можете зашифровать весь свой простой пароль с помощью keyPair файла 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 ()
удачи