Шифрование Xml с использованием сеансового ключа
У меня есть XML, который хранится в строке. Мне нужно зашифровать его с помощью сеансового ключа (AES и 256 бит).
Я использую следующий код для генерации ключа:
public byte[] generateSessionKey() throws NoSuchAlgorithmException, NoSuchProviderException
{
KeyGenerator kgen = KeyGenerator.getInstance("AES","BC");
kgen.init(SYMMETRIC_KEY_SIZE);
SecretKey key = kgen.generateKey();
byte[] symmKey = key.getEncoded();
return symmKey;
}
Используя следующий код для шифрования данных с помощью ключа сеанса:
public byte[] encryptUsingSessionKey(byte[] skey, byte[] data) throws InvalidCipherTextException
{
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new AESEngine(), new PKCS7Padding());
cipher.init(true, new KeyParameter(skey));
int outputSize = cipher.getOutputSize(data.length);
byte[] tempOP = new byte[outputSize];
int processLen = cipher.processBytes(data, 0, data.length, tempOP, 0);
int outputLen = cipher.doFinal(tempOP, processLen);
byte[] result = new byte[processLen + outputLen];
System.arraycopy(tempOP, 0, result, 0, result.length);
return result;
}
Итак, я хочу знать, правильно ли я это делаю или нет?
1 ответ
Является ли сессионный ключ закрытым, если не существует проблемы безопасности.
Вы не указываете режим шифрования, лучше всего быть явным.
Поскольку кажется, что не существует iv, и режим не указан, предполагается, что режим является ECB, который небезопасен, лучше использовать режим CBC со случайным iv, который добавляется к зашифрованным данным для использования во время дешифрования.
Также отсутствует шифрование аутентификации и генерация ключей слабая, было бы лучше использовать функцию деривации, такую как PBKDF2.
Не используйте режим ECB, это небезопасно, см. Режим ECB, прокрутите вниз до пингвина.
Подумайте об использовании более полной библиотеки, такой как JMCryptor от RNCryptor, которая включает в себя получение ключа PBKDF2, аутентификацию шифрования, случайное iv и управление версиями. Также см. Спецификацию для RNCryptor для получения дополнительной информации.