2016-11-29 12 views
0

Я пытаюсь настроить связь клиент/сервер для приложения через libsodium. Пока я планирую распространять приложение с жестко закодированным открытым ключом. Сервер будет хранить свой секретный ключ, не разделяя его. Это должно позволить пользователям шифровать сообщения и отправлять их на сервер, где секретный ключ расшифровывает сообщения.Частный ключ скомпрометирован, как распространять новые открытые ключи? Модель клиентского сервера с помощью асимметричного шифрования ключей

В случае, если секретный ключ на сервере когда-либо скомпрометирован (я не уверен, как, но на всякий случай), как можно распространять новые открытые ключи для всех клиентов? Есть ли способ генерировать новый секретный ключ, не требуя распространения новых открытых ключей? Что-то вроде:

make_new_secret(secret_buffer, previous_public); 

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

Дополнительная информация (не стесняйтесь, чтобы пропустить):

Мы можем прочитать here где Гленн Фидлер (автор libyojimbo, который использует libsodium) говорит об идее «просто катить новый секретный ключ» ,

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

Я проверил Diffie Hellman, но, похоже, обе стороны должны начать с общего «цвета». Поэтому я полагаю, что мой вопрос заключается в том, чтобы перейти к новому согласованному начальному цвету.

ответ

0

Открытые/закрытые ключи всегда pair (за исключением EC, имеющего 2 открытых ключа, который по сути является одним и тем же). Поэтому, если ваш закрытый ключ сервера взломан, или вы решили roll, вам нужен клиент, чтобы узнать ваш новый открытый ключ вашего сервера.

Задача настоящая. Если вы его жестко запрограммируете, вам необходимо перекомпилировать/перераспределить приложение для своих клиентов.

Я не понимаю весь ваш прецедент, но если вы пытаетесь сделать авторизацию, загляните в OAUTH2, который позволит вам выдавать временные (настраиваемые на сервере) токены с вашего сервера на клиента. В этом случае вы можете отменить токен OAUTH в случае взлома сервера или клиента, и вы (ваш сервер) имеете полный контроль над ним.

+0

Хорошо, это хорошо, что это действительно сложная тема. Мой вариант использования - игра, выпущенная через Steam. Таким образом, в этом случае на самом деле не проблема перераспределять новые двоичные файлы для пользователей. Так что это имеет смысл! В моем случае я настраиваю сервер брокера для NAT-puncthrough, как STUN-сервер, но с пользовательским протоколом. – Cecil

+0

Чтобы быть ясным: я просто пытаюсь защитить сам STUN-подобный сервер и читаю на шифровании. В любом случае, спасибо за ответ! – Cecil