Создание пары открытый / закрытый ключ с использованием асимметричного шифра.
Создание симметричного ключа на сервере.
Отправьте открытый ключ на клиентскую сторону.
Создать случайный ключ для стороны клиента симметричного шифра.
Зашифруйте этот случайный ключ, используя клиентскую часть открытого ключа.
Отправьте зашифрованный ключ на сервер.
Сервер выполняет следующие действия:
а. Расшифровывает случайный симметричный ключ с помощью закрытого ключа.
б. Создает токен, содержащий сгенерированный клиентский ключ.
с. Подписывает токен.
* * Д тысячу двадцать три. Шифрует токен с помощью симметричного ключа сервера.
е. Шифрует уже зашифрованный токен с помощью сгенерированного клиентом ключа.
е. Посылает зашифрованный токен.
Клиент получает этот токен и выполняет следующие действия:
а. Расшифровывает токен с помощью ключа, который он сгенерировал.
б. Хранит расшифрованный токен.
с. В этот момент сохраненный токен шифруется только с помощью симметричного ключа сервера.
На каждом от клиента до сервера:
а. Зашифруйте исходящие данные, используя сгенерированный клиентом ключ.
б. Отправьте токен + зашифрованные данные
На каждый запрос сервер получает:
а. Расшифруйте токен с помощью симметричного ключа сервера.
б. Проверьте подпись.
с. Расшифруйте данные, используя сгенерированный клиентом ключ, который хранится в токене.