Comments 6
Когда будет карма, перенеси в habrahabr.ru/blogs/infosecurity/
-2
UFO just landed and posted this here
Занятно, только из-за экономии по трафику вы решились на генерацию уникальных закрытых ключей? Хм… Это нарушает стройную идею асимметричного шифрования.
0
Извините меня, но вы страдаете полной фигнёй, если не сказать больше. Вы изобрели собственный, притом весьма некачественный велосипед. Никто так в здравом уме не делает.
Почему бы не забить на всё, и не обернуть в обычный SSL, который за вас всё сделает хорошо и красиво?
Но, если уж хотите свою реализацию, то нужно кардинально менять логику.
1. Основное: данные с помощью RSA не шифруют! Вы же сами рассказали про трудоёмкость операции, как результат вы нагружаете клиента и сервера этой работой. Умные люди придумали много хороших симметричных алгоритмов: DES, AES и прочие. Которые гораздо более стойкие чем RSA и гораздо более быстрые и эффективные. Генерите на сервере/клиенте случайный ключ для AES, передавайте его зашифрованным публичным от RSA и дальше используйте именно его, а про RSA забудьте.
2. Вы правильно посчитали что публичный ключ можно раздавать всем угодно, но вот одна маленькая проблема — у вас нет гарантии того, что вы отдаёте и получаете тот ключ, который хотите, а не попали на злобного человека-в-середине. С одной стороны, это мелочь, но вы так напираете на безопасность, что данный факт забывать совершенно не следует. Решение — передавать открытый ключ отдельным каналом, или же подписать его отдельной подписью от VeriSign, который уже есть в системе у клиента (да-да, получились банальные сертификаты). Если не хочется с этим возиться: разместите этот ключ у себя на сайте, и не передавате в сообщениях, пусть клиенты его вручную вбивают, когда 10 раз убедятся что сайт не поддельный.
Ну вот как-то так, заранее извиняюсь, если комментарий получился несколько грубым или фамильярным :)
Почему бы не забить на всё, и не обернуть в обычный SSL, который за вас всё сделает хорошо и красиво?
Но, если уж хотите свою реализацию, то нужно кардинально менять логику.
1. Основное: данные с помощью RSA не шифруют! Вы же сами рассказали про трудоёмкость операции, как результат вы нагружаете клиента и сервера этой работой. Умные люди придумали много хороших симметричных алгоритмов: DES, AES и прочие. Которые гораздо более стойкие чем RSA и гораздо более быстрые и эффективные. Генерите на сервере/клиенте случайный ключ для AES, передавайте его зашифрованным публичным от RSA и дальше используйте именно его, а про RSA забудьте.
2. Вы правильно посчитали что публичный ключ можно раздавать всем угодно, но вот одна маленькая проблема — у вас нет гарантии того, что вы отдаёте и получаете тот ключ, который хотите, а не попали на злобного человека-в-середине. С одной стороны, это мелочь, но вы так напираете на безопасность, что данный факт забывать совершенно не следует. Решение — передавать открытый ключ отдельным каналом, или же подписать его отдельной подписью от VeriSign, который уже есть в системе у клиента (да-да, получились банальные сертификаты). Если не хочется с этим возиться: разместите этот ключ у себя на сайте, и не передавате в сообщениях, пусть клиенты его вручную вбивают, когда 10 раз убедятся что сайт не поддельный.
Ну вот как-то так, заранее извиняюсь, если комментарий получился несколько грубым или фамильярным :)
+8
Все верно, и еще небольшая ремарка.
Реализация RSACryptoServiceProvider в .NET очень неудачна. Если погуглить — можно найти десяток статей, почему этим классом пользоваться нельзя.
Реализация RSACryptoServiceProvider в .NET очень неудачна. Если погуглить — можно найти десяток статей, почему этим классом пользоваться нельзя.
0
Спасибо за здравую критику, и правда следует пересмотреть некоторые решения.
По сути, в статье я пытался показать один из вариантов использования RSA для шифрования в архитектуре клиент-сервер, совершенно не претендуя на то, что данный метод является лучшим. Он просто дает представление о том, как это реализовывается :)
По сути, в статье я пытался показать один из вариантов использования RSA для шифрования в архитектуре клиент-сервер, совершенно не претендуя на то, что данный метод является лучшим. Он просто дает представление о том, как это реализовывается :)
+1
Sign up to leave a comment.
Реализация алгоритма RSA в архитектуре «клиент-сервер»