Должен ли я использовать один и тот же секретный ключ несколько раз? - PullRequest
2 голосов
/ 21 ноября 2011

Я разрабатываю приложение на основе Java SE (университетская интрасеть) для курса по компьютерной безопасности, который отправляет пароль (зашифрованный AES) зарегистрированного пользователя на сервер через HTTP-запрос.Он выполняет следующие шаги:

  1. Пользователь регистрируется в приложении интрасети.
  2. Клиент отправляет HTTP-запрос, содержащий пароль студента, зашифрованный с помощью AES.
  3. Сценарий PHP теперь расшифровывает зашифрованный текст AES и хэширует его.
  4. Хешированный пароль сохраняется в базе данных.

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

Ответы [ 2 ]

3 голосов
/ 21 ноября 2011

Если вы действительно хотите использовать симметричный шифр

Хорошо, я предполагаю, что вы хотите, чтобы два объекта связывались, вводя один и тот же ключ в каждом объекте (например,соединение Bluetooth).В этом случае вопрос уже был задан, и я позволю вам Google для ответа, например this

Что вы, безусловно, хотите, это HTTPS

Ноочевидно, вы просто хотите безопасную связь между клиентом и сервером.В этом случае вам нужно использовать HTTPS (так как вы используете HTTP).HTTPS делает все это за вас рукопожатием, а затем полагается на алгоритм симметричного ключа для обеспечения связи.

Как он отвечает вашим требованиям

В вашем случае,если страница входа обслуживается по протоколу HTTPS:

  • , пароль будет де-факто зашифрован клиентом при его отправке
  • , он будет автоматически расшифрован сервером, после чего вам придется
  • хешируйте его в PHP и сохраняйте в базе данных.
1 голос
/ 21 ноября 2011

Я согласен с другими комментариями - HTTPS - это путь, если это возможно.

Однако, чтобы ответить на ваш вопрос напрямую, тогда да - использовать один и тот же секретный ключ (сам по себе / без соли) каждый раз - очень плохая идея. Если по какой-то причине HTTPS является , а не опцией, то рассмотрите хотя бы использование соли и / или одноразовой панели, в зависимости от ваших возможностей реализации:

Соль (криптография) Одноразовый блокнот

Эта статья выглядит как полезная:

Расшифровка шифрования данных с использованием алгоритма AES, ключа и соли с расширением Java Cryptography

Надеюсь, это поможет.

...