Криптография общения клиент-сервера

244
31 марта 2017, 22:48

Недавно передо мной была поставлена задача:

Осуществлять общение с сервером в зашифрованном виде.

Побродив по всяким интернетам, я смог найти довольно мало полезной информации на этот счёт. Большинство статей были посвящены знакомству с криптографией "по верхам" и только локально. А-ля "Как зашифровать и расшифровать «Hello world» на Android". Мне же интересен процесс реализации в масштабе клиент-сервера. Причём, реализация серверной части, была поручена тоже мне, так что важно знать как реализовывать и на клиенте(Java) и на сервере(PHP). В идеале осуществить схему, подобную Telegram:

  1. Определяются закрытые ключи, посредством передачи открытых
  2. Сообщение шифруется своим закрытым ключом локально
  3. Передаётся по защищённому соединению (внутри которого оно ещё раз шифруется, используя другой алгоритм / тот же алгоритм, но с другим вектором)
  4. Расшифровывается на другой стороне

Принципиальным отличием в данной схеме служит то, что в Telegram'e это выполняется по схеме клиент-клиент (без расшифровки на стороне сервера), у меня же в роли второго клиента должен выступать сервер.

Буду благодарен любым, особенно развёрнутым, ответам, так как в этой сфере я "не в зуб ногой".

Answer 1

Вот пример: тынц Тут описан пример на Java по реализации безопасного соединения.

Answer 2

Предлагаю схему такую:

  1. Авторизация на сервере кодируется RSA. На клиенте должен быть открытый ключ сервера, первое сообщение он шифрует им, в авторизационном сообщении шлет AES-ключ, ответ сервер кодирует уже открытым ключом клиента (который клиент, сообщит ему при регистрации).
  2. Обмен данными - кодируем сессионным AES-ключом, который был передан на авторизации.
  3. Сообщения можно шифровать отдельными временными ключами, генеря их и закрывая публичными тогда, когда вам будет надо.
READ ALSO
Java. Отслеживание событий

Java. Отслеживание событий

Есть какие-нибудь инструменты для Java, чтобы отслеживать события, которые произошли в приложении (нажатие кнопки, выбор элемента в JList, закрытие...

293
Как изменять переменную в функции при каждой итерации цикла

Как изменять переменную в функции при каждой итерации цикла

Нужно чтобы при каждой итерации цикла в формулах a и b менялся первый элемент с Aget(0) и A

227
Java мессенджер клиент-сервер

Java мессенджер клиент-сервер

Сделал простеньки мессенджер на джава на сокетах но она работает на локальной сетиКак сделать так чтобы она работала через интернет

299