Я ни в коем случае не специалист по криптографии или безопасности, но вижу один серьезный недостаток:
Нет способа узнать, что клиент выполняет крипто-код right . С SSL / TLS существует согласованный стандарт, который реализовали как ваш поставщик браузеров, так и поставщик серверного программного обеспечения. Вам не нужно сообщать браузеру, как работает SSL, он встроен, и вы можете быть уверены, что он работает правильно и безопасно. Но, в вашем случае, браузер узнает о правильном протоколе, только получая текстовый JavaScript с вашего сервера.
Это означает, что вы никогда не сможете поверить, что на самом деле клиент выполняет правильный криптографический код . Любой посредник может доставить JavaScript, который ведет себя идентично сценарию, который вы обычно используете, за исключением того, что он отправляет все расшифрованные сообщения на серверы злоумышленника. И у клиента нет способа защититься от этого.
Это самый большой недостаток, и я подозреваю, что это фатальный недостаток для вашего решения. Я не вижу способа обойти это. Пока ваша система полагается на доставку своего крипто-кода клиенту, вы всегда будете подвержены атакам типа «человек посередине». Если, конечно, вы не доставили этот код по SSL:)