Защита и аутентификация данных от сервера к клиенту

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

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

Заранее спасибо.


person Salis    schedule 30.05.2012    source источник


Ответы (2)


Вам нужно подписать данные, отправляемые сервером. Все клиенты могут проверить эту цифровую подпись, чтобы доказать, что ее мог создать только сервер.

Вот как это работает: Ваш сервер вычисляет хэш данных и шифрует хэш, используя некоторый закрытый ключ на сервере (Ключ подписи). Затем сервер отправляет сообщение (в виде обычного текста) и хэш клиенту. Когда клиент получает две части данных, он расшифровывает зашифрованный хэш, используя открытый ключ сервера (ключ проверки). Теперь клиент может сам вычислить хеш обычного текстового сообщения и сравнить его с хэшем, отправленным сервером. Если два хэша совпадают, то клиент знает, что сообщение должно было прийти с сервера и ни от кого другого.

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

TLS выполняет подобные действия, поэтому вы можете использовать его в качестве канала данных.

person Oleksi    schedule 30.05.2012

Ваше требование в значительной степени представляет собой описание из учебника режима односторонней аутентификации TLS (бывший SSL), также называемого аутентификацией на стороне сервера. По сути, это то, что происходит каждый раз, когда вы находитесь на веб-сайте https.

Но если вы знаете о https, я думаю, вы пытаетесь передать не данные http, а какой-то другой протокол. Вот где блестит TLS: он реализован на транспортном уровне и, следовательно, не зависит от любого протокола данных приложения, вы можете отправлять произвольные данные через сокет с шифрованием/аутентификацией TLS.

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

person emboss    schedule 30.05.2012