Безопасно ли передавать статическое значение для ключа шифрования CryptoJS AES? - PullRequest
0 голосов
/ 09 мая 2019

Я хочу зашифровать все данные формы с помощью шифрования AES-шифрования. Хорошо ли хранить значение ключа шифрования на стороне клиента, как показано ниже. Пожалуйста, предложите.


var key = CryptoJS.enc.Utf8.parse("234234234DFDFDF343434DFDFDF")
      , iv = CryptoJS.enc.Utf8.parse("234234324234324")
      , data = CryptoJS.enc.Utf8.parse(str)
      , encryptedData = CryptoJS.AES.encrypt(data, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });

1 Ответ

0 голосов
/ 10 мая 2019

Нет, это, как правило, небезопасно.

Прежде всего, вы ошибочно сформулировали свою цель.Шифрование AES - это не цель, а средство для достижения цели.Что вы хотите сделать, так это сохранить конфиденциальность данных формы.Данные формы в крипто-терминологии называются «сообщением».

Если вам нужно отправить сообщение на сервер, а затем дать серверу расшифрованную форму, тогда вам нужно безопасность транспорта .Для этого лучше всего использовать TLS.Обычно JavaScript не имеет никаких средств для создания доверительных отношений с сервером (для этого ваш браузер использует хранилище сертификатов с доверенными сертификатами).Так что в этом случае вы не можете полагаться на безопасность JavaScript.

Иногда вы хотите, чтобы ваш интерфейс не расшифровывал сообщения.В этом случае вы можете отправить открытый ключ , например открытый ключ RSA, по защищенному каналу.Затем вы можете зашифровать данные формы, используя RSA и AES (гибридная криптография).Ваш бэкэнд сможет расшифровать сообщения.Эта схема все еще не работает, если ваш клиент отправляет неверный ключ, так как сообщение будет зашифровано открытым ключом другой стороны.Таким образом, это предполагает, что внешнее программное обеспечение не может быть легко взломано (или полностью заменено другим сервером, подрывая трафик).

Даже если вы можете использовать доверенный ключ AES, тогда использование CBC для безопасности в транспортном режиме обязательновключить атаки открытого текста или оракула.Вам не хватает способа слишком большого опыта в крипто, чтобы осуществить это.Используйте TLS, это достаточно сложно (обеспечить его безопасность относительно просто).

...