Асимметричный потоковый шифр с коротким открытым текстом => короткий шифрованный текст - PullRequest
2 голосов
/ 07 декабря 2010

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

Стандарт .NET RSACryptoService, по-видимому, выводит минимум 128 байтов для любого короткого открытого текста, включаяпустой открытый текст.Минимально поддерживаемый BlockSize - 128, и единственным поддерживаемым режимом является CBC.

Идеальный алгоритм вообще не будет расширять открытый текст, обеспечивая асимметричное свойство.Ожидаемый размер входного файла составляет 50-100 байт, но не более 150.

Ответы [ 4 ]

4 голосов
/ 07 декабря 2010

Определенно возможно достичь ваших целей для интересующих вас размеров, используя эллиптическую кривую шифрование Эль-Гамаля и варианты.Библиотека Bouncycastle C # является одним из вариантов реализации.

Так, например, с помощью кривой NIST P-256 вы можете зашифровать 32 байта данных и получить 64-байтовый результат.Если вы используете правильное заполнение, вы можете зашифровать меньше данных.Я верю, что PGP когда-то задумывался об этом, но я не знаю, делали ли они когда-либо.

1 голос
/ 07 декабря 2010

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

1 голос
/ 07 декабря 2010

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

Техника использования асимметричного шифра следующая:

  • используя криптографически сильный генератор случайных чисел, создайте секретный ключ S
  • шифровать данные с использованием симметричного алгоритма (например, AES-256-CBC) и ключа S
  • ключ шифрования S с использованием асимметричного алгоритма (например, RSA) и ключ A пары ключей
  • добавить зашифрованную форму ключа S к зашифрованному сообщению

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

Вы также должны принять во внимание IV и заполнение для режима CBC, и вы должны принять во внимание заполнение для RSA. Это складывает. Совершенные алгоритмы требуют IV и дополнения. Учитывая, что у вас есть один IV, два дополнения и случайный симметричный ключ (зашифрованный) для хранения вместе с сообщением (зашифрованным), криптографический материал должен занимать место.

0 голосов
/ 07 декабря 2010

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

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