Created
February 9, 2015 17:48
-
-
Save anonymous/f5931572b84b1e9f97b4 to your computer and use it in GitHub Desktop.
Передача секрета между сервером и клиентом. Безопасная реализация
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Цель: обе стороны должны иметь одно и то же значение - секрет. Это может быть что угодно (обычно массив байтов) | |
Условие: | |
Существует способ симметрической криптографии (публичный ключ используется для зашифровки, секретный ключ используется для расшифровки). Используя этот способ никто не может узнать второй ключ, зная один из пары. | |
Решение: | |
1. Сервер создает случайную пару ключей. | |
2. Сервер передает публичный ключ клиенту (третья сторона имеет доступ к публичному ключу) | |
3. Клиент получает публичный ключ. | |
4. Клиент создает секрет. | |
5. Клиент шифрует этот секрет с помощью публичного ключа, полученного с сервера. | |
6. Клиент передает зашифрованный секрет серверу (третья сторона имеет доступ к зашифрованному секрету) | |
7. Сервер получает зашифрованный секрет. | |
8. Сервер расшифровывает секрет, полученный от клиента, с помощью секретного ключа ранее созданной пары. | |
9. Сервер получает секрет. | |
Таким образом клиент имеет секрет, потому что он его создал, а,сервер имеет секрет, потому что получил его в зашифрованном виде от клиента. Задача решена. | |
Третьи стороны имеют: | |
- Публичный ключ для одноразового шифрования секрета | |
- Зашифрованный секрет | |
Любые изменения информации приведут к ошибке обмена секретом. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment