Как зашифровать в AES используя Crypto JS с размером ключа 128? - PullRequest
1 голос
/ 27 января 2020

Я искал и нашел примеры AES с размером ключа по умолчанию 256 и обнаружил, что он уже работает. Но когда я хочу использовать размер ключа 128, информации мало.

Я извлек код из теста aes из Crypto JS:

        var C = CryptoJS;

        var plainText = '00112233445566778899aabbccddeeff';
        var key = '000102030405060708090a0b0c0d0e0f';

        var encryptedText = C.AES.encrypt(C.enc.Hex.parse(plainText), C.enc.Hex.parse(key), { mode: C.mode.ECB, padding: C.pad.NoPadding }).ciphertext.toString();

        console.log(encryptedText);

        var decryptedText = C.AES.decrypt(C.lib.CipherParams.create({ ciphertext: C.enc.Hex.parse(encryptedText) }), C.enc.Hex.parse(key), { mode: C.mode.ECB, padding: C.pad.NoPadding }).toString();

        console.log(decryptedText);

Это сработало, но если я хотите использовать другой простой текст, такой как «Hello World», тогда это не удалось. А что если я захочу использовать пароль типа «my-key-001»? Как я уже читал, Crypto JS ожидает использования ключа размером 256, если я передам пароль.

Ваша помощь очень ценится.

1 Ответ

3 голосов
/ 27 января 2020

Это сработало, но если я хочу использовать другой простой текст, такой как «Hello World», то это не удалось.

Вы использовали noPadding, и это проблема. Пример кратен 16 байтам, что не вызывает проблем, однако ваш следующий открытый текст - нет. Вы можете использовать noPadding, если

  1. , ваше сообщение точно кратно размеру блока, хотя все еще не рекомендуется.
  2. вы хотите дополнить сообщение самостоятельно, вероятно, это вы Вы хотите протестировать новую схему заполнения, которую мы не видим в вашем коде.

Вы должны заполнять как

padding: CryptoJS.pad.Pkcs7

Как я прочитал этот Crypto JS ожидают использования ключа размера 256, если я передам пароль.

Crypto JS поддерживает AES-128, AES-192 и AES-256. В зависимости от размера ключа он выберет варианты ключа. Если вы используете пароль, он сгенерирует 256-битный размер. Это на 40% медленнее, чем AES-128, поскольку требует 14 раундов. Однако используйте надежный пароль, см. Ниже.

А что, если я хочу использовать такой пароль, как «my-key-001»?

Пароль с высокой энтропией важно, иначе злоумышленники могут быть успешными, проверяя пароли. Генерация ключей не может увеличить энтропию. Поэтому вам нужен хороший способ генерации паролей с высокой энтропией, например, использование diceware .

Как шифровать в AES с использованием Crypto JS с размером ключа 128?

Просто предоставьте 128-битный ключ.

Имеет ли AES-128 128-битную защиту

Любой блочный шифр, не только AES, уязвим для многоцелевых атак. В этом случае он не обеспечивает 128-битную безопасность. Поэтому вы должны использовать 192 или 256-битные ключи. Для более подробной информации смотрите этот вопрос AES-128 был полностью сломан?

режим: C .mode.ECB

Режим работы ECB не рекомендуется, он небезопасен и имеет утечку. Вам следует использовать современные режимы шифрования, такие как AES-GCM, которые обеспечивают вам не конфиденциальность, но также целостность и аутентификацию.

При использовании режима GCM убедитесь, что вы никогда не используете тот же IV / nonce снова под тем же ключом. AES-GCM использует режим CTR для шифрования и под тем же ключом, если IV / nonce повторяется, то возможно перетаскивание по кругу. Также может произойти утечка ключа аутентификации.

...