Как мне ввести энтропию в закодированную строку Base64? - PullRequest
1 голос
/ 05 марта 2012

Я создаю веб-сервис json (C #, WCF), и мне нужно идентифицировать пользователя.Управление сеансом отсутствует, поэтому пользователю необходимо отправить идентификационную строку для каждой команды.Решение, которое я придумал, заключается в том, чтобы AES-шифровать учетные данные пользователя и время истечения срока действия строки (в настоящее время 1000 мс), а затем использовать Base64 для его кодирования (HttpServerUtility.UrlTokenEncode) перед отправкой (через URL-адрес или иным способом).

Моя проблема заключается в следующем: закодированная строка почти всегда выглядит одинаково, с очень небольшими изменениями (я предполагаю, что это будут минуты и секунды истечения срока действия, поскольку дата и час учетных данных очень редко изменяются. Хотя строка можетиспользоваться только один раз (последняя полученная строка записана, а вторая до последней, вероятно, истекла), я все еще думаю, что было бы легко просто перехватить и заблокировать запрос GET, выдумать несколько вещей, а затем повторно отправить его.когда атака автоматизирована, даже тайм-аут, вероятно, не сработает.

Итак. Как я могу ввести дополнительную (обратимую) энтропию в строку Base64 в кодировке AES?

Ответы [ 2 ]

3 голосов
/ 05 марта 2012

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

Это позволило бы аутентифицировать пользователя со случайной строкой без необходимости постоянно передавать свое имя пользователя и пароль. С таблицами Rainbow очень легко восстановить хешированные пароли и другие вещи.

Добавление SALT к зашифрованной строке перед шифрованием также поможет. Я бы порекомендовал добавить в конец как минимум 15 дополнительных случайных символов. Это сделает грубое принуждение намного сложнее, если вы выберете этот путь.

1 голос
/ 05 марта 2012

Способ добавить энтропию к зашифрованным данным AES / CBC состоит в том, чтобы использовать случайный IV и добавить этот IV (ровно 16 байтов, размер блока AES) к зашифрованному тексту, а затем кодировать его с помощью Base 64. Я надеюсь, что вы используете CBC вместо ECB, поскольку это может быть небезопасно.

...