Достаточно ли безопасно / возможно ли использовать шифрование RSA в этом случае? - PullRequest
4 голосов
/ 08 июля 2011

Не так давно я обнаружил шифрование / дешифрование RSA, и у меня немного опыта.В настоящее время я разрабатываю приложение на C #, которое должно отправлять на мой сервер некоторую конфиденциальную информацию.Могу ли я зашифровать эту информацию локально в программе на C #, отправить ее на сервер и затем расшифровать (используя скрипт PHP)?Этого достаточно, чтобы никто не мог видеть исходную информацию, кроме сервера и клиента?

РЕДАКТИРОВАТЬ: клиент (приложение C #) не должен расшифровывать какую-либо информацию, поэтому закрытый ключ будет храниться только на удаленномвеб-сервер (конечно, на стороне сервера).

Ответы [ 8 ]

5 голосов
/ 08 июля 2011

возможно? Да. Хитрый? ОЧЕНЬ да Использовать RSA напрямую нелегко; Вы должны быть осторожны, чтобы правильно использовать padding , подписывать данные, чтобы избежать атак манипулирования данными и т. д. и т. д.

Я бы порекомендовал вам просто использовать SSL - жестко закодировать приемлемый сертификат в вашем клиенте и убедиться, что это сертификат сервера, к которому вы подключаетесь. Тогда библиотека SSL позаботится обо всех хитрых для вас деталях. Вы также можете рассмотреть возможность вызова GnuPG или использования какой-либо другой подобной библиотеки, если вы выполняете какую-то пакетную передачу.

2 голосов
/ 08 июля 2011

В настоящее время я разрабатываю приложение на C #, которое должно отправлять на мой сервер некоторую конфиденциальную информацию.

Это именно то, для чего был создан SSL.Вы заново его изобретаете?

Могу ли я зашифровать эту информацию локально в программе на C #, отправить ее на сервер и затем расшифровать (используя скрипт PHP)?

Конечно, возможно, но какой открытый ключ вы используете?Вы встраиваете его в свое приложение или извлекаете его с сервера?Первый подход уязвим, а второй возвращается именно к тому, что делает SSL.

Этого достаточно, чтобы никто не мог видеть исходную информацию, за исключением сервера и клиента?

Разумеется, в этом и заключается весь смысл безопасности транспортного уровня, защищая передаваемую информацию.Просто используйте технологии, которые уже существуют, чтобы решить эту проблему:)

2 голосов
/ 08 июля 2011

Да, это безопасно, если вы случайно не отправите закрытые ключи :) Я сделал это, и никто не смог расшифровать его, по крайней мере, не в разумные сроки:)

2 голосов
/ 08 июля 2011

Если у вас есть ключ хорошей длины (скажем, 2048 байт), который не был скомпрометирован, тогда он должен это сделать.

Конечно, если кто-то достаточно решителен и обладает достаточной вычислительной мощностью и временем, он может попытаться перебить сообщение (возможно, , что ему повезет рано, но вряд ли).

1 голос
/ 08 июля 2011

Вы смотрели на XML-RPC (через https или какой-либо другой вариант ssl) - это также устранит необходимость в написании синтаксического анализатора для вашей серверной стороны, поскольку почти каждый язык программирования имеет своего родапакет клиент / сервер RCP.Как правило, лучше использовать установленный безопасный протокол связи.Vanilla crypto хорош для защиты данных в локальном пространстве (например, шифрование жесткого диска или файла), но как только вы начинаете получать и отправлять, в обычном RSA появляется целый ряд уязвимостей.(Атака «Человек посередине», спуфинг и т. Д.)

Также для расширения вашего крипто-фу ищите обмен ключами Диффер-Хельмана и криптографию по эллиптической кривой

1 голос
/ 08 июля 2011

Очевидная уязвимость будет зависеть от того, как вы распространяете приложение.Если он распространяется открыто, он может быть открыт для человека в середине атаки.Это будет работать примерно так: злоумышленник напишет имитацию, которая работает, как ваша, но использует свой ключ для отправки данных на свой сервер.Затем их сервер расшифровывает данные, повторно шифрует их вашим ключом и отправляет на ваш сервер.Любой ответ обрабатывается аналогично.

Для конечного клиента единственное различие, которое вообще может быть видимым, может быть немного больше, больше времени для получения ответов - но если вы оставите машину слегка загруженной, то естьВесьма вероятно, что они никогда не узнают / не заметят.

1 голос
/ 08 июля 2011

Практически никогда не стоит использовать библиотеки криптографии напрямую, потому что есть множество хитрых угловых случаев, которые вы, вероятно, пропустите, которые затем становятся дырами в безопасности.Вместо этого вы должны попытаться использовать существующую технологию на самом высоком уровне.Например, если ваш клиент подключается к серверу по протоколу TCP, вы можете легко заменить его на TLS, который более или менее автоматически выполняет шифрование и дешифрование.Если он подключается с использованием HTTP, вы можете использовать HTTPS.Если вы не знаете, какую технологию лучше использовать, попробуйте рассказать нам немного больше о том, как взаимодействуют ваш клиент и сервер.

1 голос
/ 08 июля 2011

Это зависит от того, насколько вы ожидаете, что ваш клиент будет.Если ключ, который вы используете для шифрования данных, широко распространяется вместе с приложением, он может попасть в руки кого-то, кто может использовать этот ключ для выяснения шифрования, и тогда ваше общение не будет безопасным.Однако, если ваше приложение распространяется среди избранных пользователей, которые, как вы знаете, не позволят злоумышленнику получить ключ, вы можете быть достаточно уверены в том, что ваш ключ будет в безопасности.здесь ключ подвергается разоблачению.RSA - это, как правило, хороший протокол, предполагающий использование ключа хорошей длины.Однако, если ваш ключ открыт, как я уже сказал выше, все ставки выключены.

...