Э-э-эУдачи с этим.Вы смотрели спецификацию TLS ?Как вы думаете, вы можете придумать что-то адекватное, что будет проверено миллионами людей?
Нет, действительно, TLS за многие годы тестировался и совершенствовался многими людьми, криптографами, которые не делают ничего, кроме взлома таких протоколов, было бы непросто придумать что-то адекватное.
SSL был разработан экспертами в этой области, и они наверняка тоже сначала подумали, что их протокол был абсолютно неразрывным.Но тогда была версия 2, затем 3, затем TLS v.1, v1.1 и теперь 1.2.
Если у вас нет опыта разработки безопасных протоколов, вам следует придерживаться основного направления и использоватьTLS / SSL.
Безопасность - это одна из редких областей, где это имеет смысл и на самом деле здорово пойти с мейнстримом, поэтому я бы сказал, что добавленные деньги будут потрачены хорошо.
Редактировать:
Возможно, я был немного резок, и мне не хватило некоторых объяснений того, почему ваш подход не может конкурировать с довольно сложным протоколом, таким как TLS, поэтому давайте проанализируем его:
1) Как бы вы сделалиобмен ключами?Чтобы AES работал на обоих концах, вам необходимо выполнить Обмен ключами , для симметричного шифрования обе стороны должны иметь один и тот же ключ.Как вы сказали, вы хотели бы генерировать его случайным образом на клиенте - пока все хорошо.Первая проблема - вам нужно сгенерировать безопасное случайное число - иначе, например, с помощью встроенного генератора случайных чисел Javascript - злоумышленники смогут предсказать ваши случайные числа через некоторое время.
2) Допустим, вы освоили это.Тогда возникает следующая проблема: как бы вы отправили этот ключ на сервер безопасным способом, т.е. осуществили обмен ключами?Там вам понадобится некоторая форма аутентификации на стороне сервера, в противном случае любой человек может навязать ваш сервер и сделать это:
- , чтобы обманом заставить людей отправлять свои ключи на свой мошеннический сервер сначала
- затем перенаправьте ключ на ваш сервер
- ваш сервер должным образом отправит данные, зашифрованные с помощью установленного ключа
- , злоумышленники перехватят эти данные и с радостью прочитают ваши секреты, расшифровав ключ, который онипросто украл
3) Так что вам нужна аутентификация сервера, по крайней мере, если не аутентификация клиента тоже.Это будет означать, что вам потребуется некоторая форма асимметричной криптографии с открытым ключом, чтобы зашифровать / обернуть ключ открытым ключом сервера, так что только сервер сможет его расшифровать.
4) Как только вы освоите это, вывсе еще подвержены более сложным видам атак, таким как повторные атаки , атаки "человек посередине" , атаки отражением , ...
5) Возможно, вам также понадобится Perfect Forward Secrecy , чтобы после взлома ключа злоумышленник не смог расшифровать любые прошлые данные.Для достижения этой цели вам потребуется Diffie-Hellman (предпочтительно в форме Elliptic Curve Cryptography ).
6) И последнее, но не менее важное, механизм сессии, вероятно, такжебудьте добры, чтобы вы могли забрать предыдущие сеансы с уже установленными симметричными ключами, чтобы вы могли уменьшить нагрузку на сервер, не выполняя повторную установку его с помощью несколько ресурсоемких алгоритмов открытых ключей.
-> Добавьте еще пару функций, таких как безопасное согласование набора алгоритмов, которые клиент и сервер подтверждают, что они поддерживают, и вы будете повторно реализовывать протокол TLS.
Извините, если это звучит немного саркастично, но я знаю,кажется заманчивым накатывать свои собственные криптографические схемы (это тоже весело), но в конце концов вы должны придерживаться TLS: он (относительно) прост в использовании, он работает на транспортном уровне (так что вы можете кодировать свои приложения, как будтоне было никакого шифрования вообще) и самое главное, это безопасно.
РЕДАКТИРОВАТЬ: Ну, в последнее время были некоторые атаки, но почти все атаки использовали "человеческий фактор" в этих протоколах, атакуя сертификаты открытых ключей, которые поддерживают протокол (Comodo, DigiNotar и т. Д. выдающиеся примеры) или более загадочные особенности протокола, такие как согласование алгоритма и т. д., но BEAST был впервые, когда TLS был успешно атакован на уровне криптографии, что одновременно интересно и страшно потому что основы этой атаки были известны некоторые годы сейчас.
Тем не менее, учитывая недавние исправления для BEAST, я бы поспорил, что TLS по-прежнему является лучшим вариантом для безопасного общения в Интернете, особенно по сравнению с решениями ручной работы.