Шифр для генерации URL безопасного шифрованного текста без кодирования - PullRequest
2 голосов
/ 26 марта 2012

Я хочу зашифровать небольшие сериализованные структуры данных (~ 256 байт), чтобы можно было безопасно передавать их (особенно в URL-адресах).Мой текущий подход состоит в том, чтобы использовать симметричный блочный шифр, а затем кодировать с помощью base 64, а затем URL кодировать текст шифра.Это дает зашифрованный зашифрованный текст, который (что неудивительно) немного длиннее, чем исходная структура данных.Длина этих закодированных шифров представляет собой небольшую проблему с удобством использования;в идеале я хотел бы, чтобы зашифрованный текст был примерно такой же длины, что и входной текст.

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

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Для данного ключа K шифр должен создавать разные шифротекст для каждого открытого текста.Если ваше пространство сообщений составляет 256 байтов, шифр должен иметь возможность генерировать не менее 256 ^ 256 разных сообщений.Это потребует не менее 256 байтов, а любое уменьшение размера выходного алфавита требует более длинных сообщений.

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

Как уже упоминали другие, единственный реальный ответ - уменьшить размер данных, которые вы шифруете, так что вам нужно кодировать меньше данных.(Либо это, либо не помещайте данные в URL-адреса на первое место, например, сохраняйте данные в базе данных и помещайте уникальный идентификатор в URL-адрес).Так что сжимай> шифруй> кодируй.

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

Если ваша структура данных имеет длину 256 байт, шифрование ее блочным шифром из 8 байт увеличивает ее до 8 байт (в зависимости от конкретной длины ввода).

Поэтому перед применением base64 у вас есть до 264байты, которые увеличиваются кодировкой base64 до 352 байт.

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

Если размер имеет значение, я бы рекомендовал сжать данные перед их шифрованием.

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

URL-кодирование не приведет к значительному расширению строки в кодировке base64, поскольку 62 из 64 символов изменять не нужно. Тем не менее, вы можете использовать модифицированную кодировку base64 , чтобы сделать немного лучше. Эта кодировка использует символы «-» и «_» вместо символов «+» и «/», чтобы обеспечить небольшое повышение эффективности.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...