Какой алгоритм шифрования лучше всего подходит для шифрования файлов cookie? - PullRequest
47 голосов
/ 03 марта 2009

Поскольку этот вопрос довольно популярен, я подумал, что полезно обновить его.

Позвольте мне подчеркнуть правильный ответ , заданный AviD на этот вопрос:

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



Я ищу информацию о «лучшем» алгоритме шифрования для шифрования файлов cookie.

У меня есть следующие требования:

  • Должно быть быстро
    шифрование и дешифрование данных будут выполняться для (почти) каждого запроса

  • Он будет работать с небольшими наборами данных, обычно со строками длиной около 100 символов или менее

  • Это должно быть безопасно, но мы не защищаем банковские операции

  • Мы должны иметь возможность расшифровать информацию, чтобы SHA1 и т. П. Вышли.

Теперь я прочитал, что Blowfish быстр и безопасен, и я прочитал, что AES быстр и безопасен. С Blowfish, имеющим меньший размер блока.

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

Итак, мой вопрос:
Какой алгоритм шифрования лучше всего подходит для шифрования данных cookie?

Обновление
Точнее, мы хотим зашифровать 2 куки: один с информацией о сеансе, а другой с информацией «запомни меня».

Платформа представляет собой PHP как модуль apache в Linux на VPS.

Обновление 2
Я согласен с cletus , что хранение любой информации в cookie-файле небезопасно.

Однако у нас есть требование для реализации функции «запомни меня». Принятый способ сделать это - установить cookie. Если клиент представляет этот файл cookie, ему или ей разрешается доступ к системе с (почти) равными правами, как если бы он представил действительную комбинацию пароля пользователя.

Итак, мы по крайней мере хотим зашифровать все данные в куки, чтобы они:
a) злоумышленники не могут прочитать его содержимое,
b) злоумышленники не могут изготовить свой собственный файл cookie или вмешаться в него.

(Все данные из файлов cookie очищаются и проверяются на достоверность, прежде чем мы что-то с ними делаем, но это уже другая история)

Файл cookie сеанса содержит больше идентификатор сессии / метку времени. Возможно, его можно использовать без шифрования, но я не вижу вреда в его шифровании? (кроме времени вычислений).

Итак, учитывая, что нам необходимо сохранить некоторые данные в файле cookie, как лучше всего их зашифровать?

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

Однако я тоже в растерянности:
Я думал, что шифрование позволяет нам отправлять данные в BigBadWorld & trade; и все еще быть (достаточно) уверенным, что никто не сможет их прочитать или подделать ...
Разве это не весь смысл шифрования?

Но реакция ниже подталкивает к: Не доверяйте шифрованию для обеспечения безопасности.

Чего мне не хватает ??

Ответы [ 12 ]

0 голосов
/ 18 января 2010

Я думаю, что «раздача» любых данных, даже зашифрованных, когда речь идет об имени пользователя и пароле, не годится ... Есть много JS, которые могут понюхать это ... Я предлагаю вам создать в пользовательской таблице БД поле cookie_auth или что-то еще ...

после первого входа в систему: текущий: браузер, IP-адрес и некоторый собственный солт-ключ, плюс ваше имя хоста var ...

создать хеш и сохранить в этом поле ... установить печенье ... когда cookie "отвечает", сравните все это с сохраненным хешем и сделайте ...

, даже если кто-то «украл» печенье, он не сможет его использовать: -)

Надеюсь, это поможет: -)

FEHA vision.to

0 голосов
/ 03 марта 2009

AES (также известный как Rijndael) является самым популярным. Размер блока составляет 128 бит, это всего 16 байтов, и вы говорите «около 100 символов».

...