Соответствует ли шифрование Java AES FIPS 140-2? - PullRequest
1 голос
/ 13 марта 2019

У меня есть модуль шифрования, написанный на Java 8, как показано ниже -

private static final String SECRET_KEY_PASSPHRASE="012345678901234567890123456789012"; //256 bit

public Cipher getCipherInstance(int encryptionMode)
            throws ... /*throws necessary exceptions*/{


        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

        byte[] keyBytes=getKeyBytes(SECRET_KEY_PASSPHRASE);
/*getKeyBytes function returns 16 bytes from 256 bit passphrase*/

        SecretKeySpec secretKeySpecy = new SecretKeySpec(SECRET_KEY_PASSPHRASE.getBytes("UTF-8"), "AES");
        IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes);

        cipher.init(encryptionMode, secretKeySpecy, ivParameterSpec);
        return cipher;
    }

Я шифрую / дешифрую данные, используя зашифрованный объект, возвращенный функцией выше.

Соответствует ли мой код или реализация Java AES или класса шифров FIPS 140-2?

1 Ответ

0 голосов
/ 14 марта 2019

Но я не получаю никаких документов, в которых четко говорится, что реализация Java AES совместима с FIPS.

Java JCE по умолчанию IMHO не совместим с FIPS, поскольку поддерживает более слабые или устаревшие примитивы.

AES - это перечисленная криптографическая функция, поддерживаемая в FIPS-140-2 (Приложение A).

Для обеспечения соответствия FIPS вы можете использовать FCES-совместимые реализации JCE (IBM FIPS JSSE, RSA BSAFE, BouncyCastle BC-FA, ..) или JSSE в режиме FIPS (подключенный к оборудованию, совместимому с FIPS - смарт-карта, hsm).

Соответствует ли мой код или реализация Java классу AES или шифру FIPS 140-2?

FIPS-140-2 относится к криптографическим модулям, поэтому вы не можете требовать, чтобы класс Cipher или ваше приложение были совместимыми, если вы сами не внедряете криптографический модуль (независимо от явных недостатков в коде)

...