Ваша система в целом небезопасна, но я не пытаюсь отговорить вас или кого-либо от игры с подобными вещами.Вы должны продолжать.Но крайне важно, чтобы вы рассматривали все, что вы создаете, как «игрушечную» систему, которую никогда не следует рассматривать или рекламировать как «безопасную».
Давайте разберем вопрос безопасности на две части.
- Насколько безопасен обмен ключами?
- Насколько безопасным является шифрование, которое вы используете после получения общего ключа?
Позвольте мне ответить (2) сначала какэто будет самое простое.Это будет ужасно небезопасно, если вы не будете умнее всех людей, которые работали и изучали TLS на протяжении многих лет.TLS до версии 1.2 (которую используют несколько сайтов) в принципе уязвимы для выбранных атак зашифрованного текста (CCA) и для атаки BEAST на практике в зависимости от выбора костюма шифра.А SSL 2.0 еще хуже сломан.
Дело в том, что очень умные люди, работавшие над этими протоколами годами, неправильно поняли некоторые вещи.Есть все основания полагать, что вы сами, работая над подобными вещами, сделаете огромные ошибки.Основные алгоритмы шифрования в порядке.Они не сломаны.Но протоколы таковы.
Так что, если вы не изучили и не полностью поняли все детали SSL, почему они есть и как они пошли не так в некоторых случаях, то почти наверняка любой протоколВы придумаете, будет ужасно.
Теперь на вопрос (2).Есть две проблемы с этим.(а) Диффи-Хеллман не предназначен для обеспечения безопасности, которая вам, вероятно, нужна;и (б) я не думаю, что вы правильно внедрили DH.
2.a:
Обмен ключами Диффи-Хеллмана, если все сделано правильно, безопасен для обмена ключами, но ничего не делает для аутентификации.Вот почему вопрос «это безопасно» часто является неправильным вопросом.Это безопасно для некоторых целей, но в целом небезопасно для других, поскольку оно не предназначено для этих других целей.
Как указывалось Josh3737 , для клиента и сервера нет способазнать, что они разговаривают с правильной стороной.Если Сэм - сервер, а Чарли - Клиент, ничто не мешает Мэллори настроить свой собственный сервер, который маскируется под Сэма.Так что Кэти может пройти обмен ключами с Мэллори, думая, что она разговаривает с Сэмом.Мэллори может притвориться Чарли, когда разговаривает с Сэмом.
После этого Мэллори может действовать как Человек Посередине между Сэмом и Чарли.Когда Чарли отправляет данные, предназначенные Сэму, Мэллори расшифрует их, используя общий ключ между C и M, прочитает их (и, возможно, изменит), а затем повторно зашифрует общий ключ между M и S и отправит их в S.
Чтобы решить проблему аутентификации, вам нужна какая-то инфраструктура открытых ключей (PKI), и это действительно проблема.Система центров сертификации и такая, которая у нас есть с SSL / TLS, чревата проблемами, но она остается лучшей из всех существующих систем.
2.b:
512-битный открытый модуль вдольс 512-битными закрытыми ключами недостаточно.Ключи DH должны быть больше.Я не пошел бы с чем-то меньшим, чем 2048 бит.Вы можете получить 1024 бита, которые вас не беспокоят, если кто-то сможет открыть сегодняшние секреты через пять лет.
Вы не предоставили достаточно информации о том, как были выбраны ваши простые числа.Не каждый премьер будет работать.Вам нужно использовать «безопасное простое число» для вашего модуля, иначе у злоумышленника есть ярлыки для вычисления дискретного логарифма.