Клиентское шифрование по HTTP с обменом ключами Диффи-Хеллмана и AES

После просмотра видео на YouTubeОбмен ключами Диффи-ХеллманаЯ хотел попробовать реализацию в JavaScript (закон Этвуда).

Я набросал шифр на Node.js со следующими правилами:

Шаг 1: Клиент и сервер согласовывают общий ключ:

Клиент и сервер начинаются с 512-битного простого открытого ключа pK

Клиент генерирует 512-битный первичный закрытый ключ kC и отправляет powMod (3, kC, pK)

Сервер генерирует 512-битный первичный закрытый ключ kS и отправляет powMod (3, kS, pK)

Клиент и сервер используют powMod (response, privatekey, pK) в качестве общего ключа

Шаг 2: Общение

Перед тем как клиент отправляет данные, они шифруются с помощью общего ключа с использованием крипто-библиотеки Stanford Javascript (256-битная AES, аутентификация HMAC, усиление пароля PBKDF2 и аутентификация-шифрование CCM).

Как только сервер расшифровывает данные с помощью общего ключа, он генерирует новый 512-битный первичный закрытый ключ и отправляет его как зашифрованный ответ SJCL.

Клиент и сервер переключаются на новый общий ключ с помощью powMod (3, prevSharedKey, newPrivKey)

Теперь у меня есть несколько вопросов ..

Насколько безопасна такая система по сравнению с HTTPS или другими алгоритмами? Каковы самые слабые стороны такой системы?

С точки зрения безопасности / практичности, было бы лучше использовать 1024-битные ключи для большей безопасности? Варианты HMAC / PBKDF2 / CCM излишни? Стоит ли модулировать общий ключ? Спасибо за чтение!

Ответы на вопрос(3)

Ваш ответ на вопрос