Как аутентифицировать клиента на основе владения симметричным ключом? - PullRequest
1 голос
/ 30 июня 2010

Наши клиенты обращаются к нашему веб-сервису через SSL и идентифицируют себя с помощью имени пользователя и пароля.Затем наш сервер генерирует симметричный ключ и отправляет его обратно клиенту.

Затем клиент устанавливает TCP-соединение с нашим сервером и отправляет сообщение для входа.На этом этапе я хочу аутентифицировать клиента.

Моя идея состоит в том, чтобы клиент шифровал известный / статический фрагмент текста симметричным ключом и использовал его в качестве доказательства того, что он обладаетkey.

Поскольку симметричный ключ генерируется случайным образом, можно ли использовать здесь статический фрагмент текста?

Любой ввод приветствуется.

Ответы [ 2 ]

2 голосов
/ 01 июля 2010

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

Принятый способ сделать это - вызов / ответ. Клиент подключается, сервер генерирует случайный запрос и отправляет его клиенту, а клиент отвечает зашифрованной версией запроса (хотя на самом деле вы должны использовать здесь HMAC, а не блочный шифр, потому что в противном случае ваш клиент эффективно оракул расшифровки одного блока!). Также было бы безопаснее использовать два разных случайных ключа (предоставляемых одновременно через веб-сервис), один для шифрования и один для аутентификации.

Обратите внимание, что эта схема, как написано, все еще подвержена атаке "человек посередине". Вам определенно лучше использовать SSL, как подсказывает The Rook . Это потребует от вашего клиента генерации открытого ключа и отправки его в веб-службу. Веб-служба отвечает подписанным сертификатом, содержащим открытый ключ клиента вместе с уникальным идентификатором клиента (имя пользователя или что-то еще) в поле DN. Сервер в отдельном соединении проверяет используемый клиентский сертификат (проверяя, подписан ли он вашим веб-сервисом) и проверяет, совпадает ли идентификатор клиента в сертификате с клиентом, который запрашивает соединение.

2 голосов
/ 30 июня 2010

SSL создан для аутентификации как клиента, так и сервера, а асимметричная криптография - самый безопасный примитив, который вы можете использовать в этом сценарии.Симметричные шифры могут использоваться для аутентификации с использованием кода аутентификации связующего сообщения блока шифрования *, известного как режим CBC-MAC.Использование CBC-MAC имеет аналогичную защиту как HMAC, но использует симметричный шифр вместо функции дайджеста сообщения.Режим CBC-MAC используется WPA для защиты беспроводных сетей.

...