Ява ПГС AES шифрования/дешифрования


Я посмотрел несколько примеров КДС Ява шифрования AES режиме, но я не мог найти правильное решение, что это безопасно для использования. Я закончил писать свой собственный служебный класс. Мои вопросы: этот код безопасным для использования? Я читал некоторые вещи о обивка атаки Oracle, но я не очень понимаю, как они работают.

Я проверил код, и это, кажется, работает должным образом:

CryptoUtils.removeCryptoRestriction();

String string = "Hello world! This is a test string. Have a nice day!";
byte[] iv = CryptoUtils.generateIv();
byte[] key = CryptoUtils.generateKey();

byte[] encrypted = CryptoUtils.doCrypto(Cipher.ENCRYPT_MODE, key, iv, string.getBytes("UTF-8"));
System.out.println(new String(encrypted));

byte[] decrypted = CryptoUtils.doCrypto(Cipher.DECRYPT_MODE, key, iv, encrypted);
System.out.println(new String(decrypted));

Выход:

��zI Fğ��O>��_�@3�ܷ+|ZI�m���M�4�;���ygr8G�ܪ8�6u���M
Hello world! This is a test string. Have a nice day!

Вот код утиль:

public static byte[] doCrypto(int mode, byte[] keyBytes, byte[] ivBytes, byte[] bytes) throws GeneralSecurityException {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
    SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, 0, keyBytes.length, "AES");
    IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
    cipher.init(mode, secretKeySpec, ivParameterSpec);
    return cipher.doFinal(bytes);
}

public static void doCrypto(int mode, byte[] keyBytes, byte[] ivBytes, File in, File out) throws GeneralSecurityException, IOException {
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
    SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, 0, keyBytes.length, "AES");
    IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
    cipher.init(mode, secretKeySpec, ivParameterSpec);

    try (FileInputStream fileInputStream = new FileInputStream(in); FileOutputStream fileOutputStream = new FileOutputStream(out)) {
        byte[] buffer = new byte[1024];

        for (int i = 0; i != -1; i = fileInputStream.read(buffer)) {
            byte[] updateBytes = cipher.update(buffer, 0, i);
            if (updateBytes != null) fileOutputStream.write(updateBytes);
        }
        byte[] finalBytes = cipher.doFinal();
        if (finalBytes != null) fileOutputStream.write(finalBytes);
    }
}

public static byte[] generateIv() {
    SecureRandom secureRandom = new SecureRandom();
    byte[] iv = new byte[16];
    secureRandom.nextBytes(iv);
    return iv;
}

public static byte[] generateKey() throws NoSuchAlgorithmException {
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(256);
    SecretKey secretKey = keyGenerator.generateKey();
    return secretKey.getEncoded();
}

public static void removeCryptoRestriction() {
    Security.setProperty("crypto.policy", "unlimited");
}

Шифрование файлов тоже работает.

Заранее спасибо!



1527
6
задан 6 февраля 2018 в 03:02 Источник Поделиться
Комментарии
2 ответа

Вы должны двигаться в авторизованный режим шифрования, такие как СКК, еах, ОКБ или GCM. Тот факт, что вы сами генерируете случайную последовательность байтов от ГПСЧ операционной системы является звук. Похоже, что аргумент, переданный объекту крипто уже обивка полученный зашифрованный текст из файла потока.

Сверху чуток о снятии ограничений подозреваемого.

Обивка атаки боковым каналом атаки в криптографии, которая позволяет злоумышленнику выполнить криптоанализ блочного шифра текста, поскольку простой ввод текста будет определить в результате длина зашифрованного текста. Заполнение полученный зашифрованный текст, он делает, что боковой канал сложнее.

2
ответ дан 6 февраля 2018 в 05:02 Источник Поделиться

Есть несколько способов, чтобы предотвратить атаки обивка Oracle используют один или более из следующих:


  1. Использовать проверку подлинности шифрования, такие как режиме GCM или шифровать-то-Mac.

  2. Не сообщать об ошибках заполнения.

  3. Не позволить злоумышленнику использовать ваш код для расшифровки.

  4. Если злоумышленник может использовать вашу расшифровку серьезно норму-ограничить доступ.

2
ответ дан 6 февраля 2018 в 07:02 Источник Поделиться