2009-11-22 22 views
4

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

Данные должны быть зашифрованы, и я думал об использовании AES. Я думал использовать PBKDF2, чтобы получить ключ AES с паролем клиента.

В этом случае клиент будет кодировать данные, сервер будет декодировать его, переписать его с использованием пароля второго клиента и отправить его второму клиенту.

Как вы думаете, это лучший способ реализовать это?

Есть ли способ для первого клиента кодировать, а второй клиент должен декодировать без вмешательства сервера?

Как я могу зашифровать ключ AES и перенести его с одного клиента на другой?


Что вы думаете о нижеследующем решении?

  1. Клиент и сервер создают закрытый ключ AES с использованием Diffie-Hellman (этот ключ относится к каждому клиенту).
  2. Передающий клиент создает ключ AES сеанса и кодирует его с помощью частного ключа AES.
  3. Сервер расшифровывает ключ сеанса и заново шифрует его для каждого клиента в сеансе (с использованием личного ключа каждого клиента).
  4. Передающий клиент шифрует данные с помощью ключа AES сеанса и отправляет его на сервер.
  5. Сервер отправляет данные всем получателям без какой-либо необходимой обработки.

ответ

2

Вы можете использовать алгоритм шифрования asymmetric, чтобы безопасно отправить ключ AES, а затем использовать этот ключ для симметричного шифрования/дешифрования AES. Сообщение может быть таким:

  1. Клиент хочет поговорить с сервером с зашифрованными сообщениями.
  2. Клиент генерирует пару открытых/закрытых ключей и отправляет открытый ключ на сервер.
  3. Сервер использует открытый ключ для шифрования секретного ключа и отправки его клиенту.
  4. Клиент использует свой секретный ключ для дешифрования секретного ключа (оба теперь знают секретный ключ для шифрования/расшифровки их связи).
  5. Клиент использует AES с секретным ключом для шифрования сообщения, которое он хочет отправить на сервер.
  6. Сервер использует секретный ключ для дешифрования сообщения.
+0

RSA или любой другой асимметричный алгоритм лучше, чем функция деривации? – lebamb

3

Вы также можете использовать Diffie–Hellman key exchange. Какой язык программирования вы используете?

+0

Я пишу в C++ как я могу использовать Диффи-Хеллмана? вы имеете в виду, что ключ вывода DH будет использоваться как ключ AES? Я думаю, что это не позволяет мне выполнять enc/dec только на стороне клиента. Я забыл упомянуть, что клиент может отправить данные нескольким клиентам-получателям. – lebamb

+0

Диффи Хеллман не достаточно безопасен, потому что на него легко напасть основное место в середине –

0

Вы должны создать свой собственный протокол для непосредственного подключения части вашей программы или использовать доступные защищенные протоколы, такие как HTTPS. Единственное, что я могу вам сказать, - это то, что в первую очередь должны выполняться операции с большими вычислительными устройствами, такие как шифрование/дешифрование а затем сервер обрабатывает надежные запросы.

Смежные вопросы