Существует ли метод шифрования, который может превратить 8-значный номер в 10 или 11 или менее цифр? - PullRequest
2 голосов
/ 31 августа 2010

Многие из тех методов шифрования, которые я видел, могут легко зашифровать простое 8-значное число, например «12345678», но в результате часто получается что-то вроде «8745b34097af8bc9de087e98deb8707aac8797d097f» (выдумано, но вы понимаете).

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

Обновление: Я не сделал вывод достаточно четким - я хочу, чтобы 8-значное число превратилось в 8-значное число, а не 8 байтов.

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Здесь многое будет зависеть от того, насколько серьезно вы имеете в виду тег «шифрование с открытым ключом».Вы действительно хотите шифрование с открытым ключом или просто учитываете эту возможность?

Если вы хотите использовать симметричное шифрование, получить 8 байтов вывода из 8 байтов ввода довольно просто: просто запустите3DES в режиме ECB (электронная кодовая книга), и это то, что вы получите.Основным недостатком ECB является то, что данный ввод всегда будет приводить к одному и тому же результату, поэтому, если ваши входы могут повторяться, злоумышленник сможет увидеть это повторение и заметить шаблон «зашифрованное значение X приводит к действию Y", даже если они не могут / не нарушают само шифрование вообще.Если вы можете жить с этим, 3DES / ECB, вероятно, ваш ответ.

Если вы не можете жить с этим, 3DES в режиме CFB, вероятно, следующий лучший.Это даст 16 байтов вывода из 8 байтов ввода (обратите внимание, что обычно он не удваивает размер ввода, а добавляет 8 байтов к размеру ввода).

3DES вряд ли кто-нибудь назвал бы передовым алгоритмом, но я бы сказал, что это все еще квалифицируется как «довольно надежное шифрование».Часть его слабости как алгоритма связана с его относительно небольшим размером блока, но это также сводит к минимуму расширение вывода.

Редактировать: Извините, я забыл о возможности открытого ключа.В большинстве криптографий с открытым ключом наименьший результат примерно равен размеру ключа.С шифрованием RSA это обычно будет означать минимум около 1024 бит (и часто значительно больше).Чтобы уменьшить результат, я бы, вероятно, использовал криптографию с эллиптической кривой, для которой ключ длиной ~ 200 бит достаточно защищен от известных атак.Это все равно будет больше, чем 3DES / CFB, но не так уж и сильно.

2 голосов
/ 31 августа 2010

Ну, вы можете посмотреть потоковый шифр, который шифрует байты 1: 1. При N-байтовом вводе есть N-байтовые зашифрованные / дешифрованные выходные данные. Такие шифры обычно основаны на алгоритме, который создает поток случайных чисел с ключом шифрования / IV, действующим как начальное число.

Для некоторых потоковых шифров посмотрите кандидатов в eSTREAM . Я не знаю о каких-либо соответствующих атаках на HC-128 и HC-256, например.

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