Клиентское шифрование по 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 излишни? Стоит ли модулировать общий ключ? Спасибо за чтение!