Поскольку этот вопрос довольно популярен, я счел полезным дать ему обновление.
Подчеркиваю правильный ответ, заданный AviD, на этот вопрос:
Вы не должны хранить данные, требующие шифрования в вашем файле cookie. Вместо этого храните произвольный ключ (128 бит /16 байт) в файле cookie и сохраняйте информацию, которую вы хотите сохранить на сервере, идентифицированный с помощью файла cookie.
Я ищу информацию об "лучшем" алгоритме шифрования для шифрования файлов cookie.
У меня есть следующие требования:
-
Он должен быть быстрым
шифрование и дешифрование данных будут выполняться для (почти) каждого запроса -
Он будет работать с небольшими наборами данных, обычно строки длиной около 100 символов
-
Он должен быть безопасным, но это не похоже на то, что мы обеспечиваем банковские транзакции.
-
Нам нужно иметь возможность расшифровать информацию, чтобы SHA1 и т.п. отсутствовали.
Теперь я прочитал, что Blowfish является быстрым и безопасным, и я прочитал, что AES является быстрым и безопасным. С Blowfish с меньшим размером блока.
Я думаю, что оба алгоритма обеспечивают более чем адекватную безопасность? поэтому скорость станет решающим фактором. Но я действительно не знаю, подходит ли этот алгоритм для строки с небольшим символом, и если есть, возможно, более подходящий алгоритм для шифрования файлов cookie.
Итак, мой вопрос:
Какой алгоритм шифрования лучше всего подходит для шифрования данных cookie?
Обновление
Чтобы быть более точным, мы хотим зашифровать 2 файла cookie: один с информацией о сеансе, а другой с информацией "remeber me".
Платформа - это PHP как модуль apache для Linux на VPS.
Обновление 2
Я согласен с cletus, что сохранение любой информации в файле cookie небезопасно.
Однако у нас есть требование реализовать функцию "remeber me". Принятый способ сделать это - установить cookie. Если клиент представляет этот файл cookie, ему или ей разрешен доступ к системе с (почти) равными правами, как если бы он представил правильную комбинацию имени пользователя.
Поэтому мы по крайней мере хотим зашифровать все данные в файле cookie, чтобы он:
a) злонамеренные пользователи не могут прочитать это содержимое,
b) злонамеренные пользователи не могут сфабриковать свой собственный файл cookie или тампер.
(Все данные из файлов cookie дезинфицируются и проверяются на достоверность, прежде чем мы что-либо с ним сделаем, но это другая история)
Файл cookie сеанса больше не содержит sessionId/timestamp. Его можно было бы использовать без шифрования, но я не вижу вреда в его шифровании? (кроме времени вычисления).
Итак, учитывая, что мы должны хранить некоторые данные в файле cookie, что лучший способ его зашифровать?
Обновление 3
Ответы на этот вопрос заставили меня пересмотреть выбранный подход. Я действительно могу сделать то же самое без необходимости шифрования. Вместо шифрования данных я должен отправлять только те данные, которые бессмысленны без контекста и не могут быть угаданы.
Однако я тоже не понимаю:
Я думал, что шифрование позволило нам отправить данные в BigBadWorld & trade;, и по-прежнему (честно) уверен, что никто не сможет читать или вмешиваться в это...
Разве это не все, что нужно для шифрования?
Но реакции ниже продвигаются вперед: не доверяйте шифрованию для обеспечения безопасности.
Что мне не хватает?