Как код подтверждения загружается на клиент? Подробнее о заявке? Если это скрипт проверки, загруженный через HTTP, то схема в корне нарушена. Вам, вероятно, нужно использовать SSL, особенно если вы уже доказали это.
Не зная больше о вашей системе, похоже, что противнику в атаке «человек посередине» нужно только:
- Заменить открытый ключ в проверочном коде своим собственным.
- Отмените все «безопасные» коммуникации с собственной подписью.
- Ваш скрипт не видит ничего плохого, поскольку проверенный им открытый ключ был изменен противником.
Не говоря уже о том, что все сообщения в текстовом формате (так что, надеюсь, личная / конфиденциальная информация не передается?)
SSL решает эту проблему, потому что все сертификаты должны быть подписаны корневым центром сертификации, которому доверяет / установленный с помощью веб-браузера. Предполагается, что центры сертификации выдают сертификаты для доменов только тем людям, которые контролируют / владеют ими; следовательно, предыдущая атака не будет работать.
Теперь, если ваш клиент установлен в доверенном режиме таким образом, что злоумышленник не может вмешаться в него, вы можете продолжить использовать свою схему и при этом оставаться в безопасности. Например, если клиент установлен на клиентском ПК вручную или безопасно доставлен другим способом (например, через SSL и / или с использованием подписи кода).
(я заметил ссылку на хэширование MD5. Не используйте хэши MD5; MD5 поврежден.)