Выход AES, он меньше, чем вход? - PullRequest
1 голос
/ 28 июня 2009

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

AES - это путь?

Ответы [ 6 ]

14 голосов
/ 28 июня 2009

Невозможно создать какой-либо алгоритм, который всегда будет создавать выход меньшего размера, чем вход, но может повернуть любой выход обратно на вход. Если вы разрешите «не больше, чем вход», то в основном вы говорите об изоморфных алгоритмах, где они всегда имеют тот же размер, что и входные. Это происходит из-за принципа pigeonhole .

Кроме того, шифрование обычно имеет небольшой отступ (например, «до ближайших 8 байтов, округлено в большую сторону» - в AES это 16 байт). Да, и, кроме того, у вас есть проблема конвертации между текстовым и двоичным. Алгоритмы шифрования обычно работают в двоичном формате, но URL-адреса в тексте. Даже если вы предполагаете ASCII, вы можете получить зашифрованное двоичное значение, которое не является ASCII. Самый простой способ представления произвольных двоичных данных в тексте - использовать base64. Существуют и другие альтернативы, которые были бы весьма рискованными, но общий шаблон «преобразовать текст в двоичный файл, зашифровать, преобразовать двоичный код в текст» является наиболее простым.

2 голосов
/ 28 июня 2009

Простой ответ - нет. Любой алгоритм симметричного шифрования (включая AES) будет производить как минимум то же самое, но часто немного больше. Как отмечает Джон Скит, обычно из-за заполнения или выравнивания.
Конечно, вы можете сжать вашу строку, используя zlib и encrypt, но вам нужно будет распаковать ее после расшифровки.
Отказ от ответственности - сжатие строки с помощью zlib не гарантирует оно получается меньше, хотя

1 голос
/ 28 июня 2009

На самом деле важен не шифр, который вы используете, а режим шифрования , который вы используете. Например, режим CTR не имеет расширения по длине, но каждому шифрованию требуется новая отдельная начальная точка для счетчика. Другие режимы, такие как OFB, CFB (или CBC с перехватом зашифрованного текста), также не нужно дополнять кратной длине блока шифра, но им требуется IV. Из вашего вопроса неясно, имеется ли какая-либо информация, из которой можно было бы получить псевдослучайно IV, если будет уместен какой-либо из этих режимов. Также неясно, нужна ли вам аутентификация или если вам нужна семантическая безопасность> т.е. это проблема, если вы дважды шифруете одну и ту же строку и получаете один и тот же зашифрованный текст дважды?

0 голосов
/ 21 июля 2009

Также просто еще одна вещь, чтобы уточнить:

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

«Асимметричное шифрование» и «криптографические хеши» - это две разные вещи.

Асимметричное шифрование (например, RSA) означает, что с учетом вывода (т. Е. Зашифрованного текста) вы можете вернуть ввод (т. Е. Открытый текст), если у вас есть правильный ключ, просто для расшифровки требуется ключ отличается от ключа, используемого для шифрования. Для асимметричного шифрования применяется тот же аргумент "принципа голубя".

Криптографические хеши (например, SHA-1) означают, что, учитывая выходные данные (то есть хэш), вы не можете получить вход обратно, и вы даже не можете найти другой ввод, который хэширует к то же значение (при условии, что хеш-код безопасен). Для криптографических хэшей хэш может быть короче, чем входной. (На самом деле хеш имеет одинаковый размер независимо от длины входного файла.


И еще одна вещь: в любой защищенной системе шифрования зашифрованный текст будет на длиннее , чем открытый текст. Это связано с тем, что существует несколько возможных зашифрованных текстов, которые любой зашифрованный текст мог бы зашифровать (например, используя разные IV). Если бы это было не так, то шифр мог бы утекать информацию, потому что, если два одинаковых открытых текста были зашифрованы, они зашифровывались бы с одинаковыми зашифрованными текстами, и противник тогда узнает, что открытые тексты были такими же.

0 голосов
/ 28 июня 2009

При использовании AES выходные данные будут округлены до определенной длины (например, длина делится на впадину 16).

Если вы хотите перенести секретные данные на другой веб-сайт, публикация HTTP лучше, чем встраивание данных в URL.

0 голосов
/ 28 июня 2009

Если мы говорим о симметричной записи для получения оригинальной зашифрованной строки из зашифрованной, то это невозможно. Я думаю, что если вы не используете хеши (SHA1, SHA256 ...), вы никогда не получите зашифрованную строку меньше исходного текста. Проблема с хешами заключается в том, что они не являются решением для извлечения исходной строки, поскольку они являются односторонними алгоритмами шифрования.

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