LINUX.ORG.RU
ФорумTalks

Есть ли подходящий алгоритм асимметричного шифрования?

 


0

1

В openssl есть шифрование rsa (rsautl). Но оно на выходе дает не меньше 512 байт, даже если шифруешь несколько байт. Есть ли какая альтернатива? Чтобы результат шифрования был не сильно длиннее исходного короткого текста

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 1)

эллиптические кривые

Harald ★★★★★
()

У Эль Гамаля вроде блок поменьше. Ну или кривые, они сейчас в моде.

gadfly ★★
()

Вродебы симметричные шифры шифруют на число кратное длине ключа, там просто лишнее заменяется нулями или рандомом (уж не помню, но вроде это меняется)

так что или уменьшай длину ключа, или использую что-то просто типа xor-а.

Deleted
()

на выходе дает не меньше 512 байт, даже если шифруешь несколько байт

Любой блочный шифр так работает.

Sadler ★★★
()

Используй симметричный поточных шифр, типа ChaCha20. А ассиметричным ключами меняйся.

atrus ★★★★★
()
Ответ на: комментарий от atrus

Не точно выразился. Однаправленный на момент передачи. Публичный ключ заранее выяснили

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

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

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

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

atrus ★★★★★
()

ecies или elgamal на эллиптических кривых. Но все равно будет заметное укрупнение (а ECIES предполагает только комбинирование с симметричным шифрованием).

А какой вектор атаки ты пытаешься предотвратить?

michwill ★★★★★
()

алгоритм асимметричного шифрования

Никуда не денешься - результат шифрования - (mod n), где n - произведение простых чисел. Которые у тебя сколько там, 2048 бит каждое? Вот и получаешь свои 512 байт.

Меньше никак, иначе разложение на простые множители будет слишком быстрое. (с другими алгоритмами асимметричного шифрования - будет примерно та же история - все упирается в сложность вычисления обратной функции)

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от michwill

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Асимметричных потоковых не бывает?

Да, это там невозможно. Эллиптика позволяет сильнее ужаться. ElGamal с кривой P-256 может результат уже в пределах 512 бит держать.

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

Насколько мелкие? 16 байт норм? Ты можешь передать ключ через ассиметричный алгоритм и шифровать кусочки отдельно AES. Просто к ключу добавляешь номер блока. Если 128 бит много, можешь рискнуть взять KHAZAD, там блок 64 бит.

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

atrus ★★★★★
()
Ответ на: комментарий от atrus

У меня еще сверх-большое время передачи данных предполагается.

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)

1. Берете некоторое значение - синхропосылку, вектор инициализации и т.п. (например размером в 8-16 байт) - т.н.IV[0]

2. зашифровывате его асимметричным шифром, получаете 512 байт гаммы (G[0] = encrypt(IV[0], key))

3. Берете первые 512 байт из сообщения (T[0])

4. Формируете исходящее сообщение формате <синхропосылка>, <сообщение XOR гамма>: IV[0], (T[0] XOR G[0])

4. Если сообщение более 512 байт, то расчитываете новые векторы инициалиазции IV[N] например по принципу IV[N] = sha256(T[N-1]) XOR sha256(G[N-1])

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

Nastishka ★★★★★
()
Последнее исправление: Nastishka (всего исправлений: 1)
Ответ на: комментарий от Nastishka

Расшифровка тривиальная, только на входе у вас зашифрованный текст и фрагмент гаммы, а не исходный текст и фрагмент гаммы.

Nastishka ★★★★★
()
Ответ на: комментарий от cvs-255

Ну это ок, просто учти что самое быстрое шифрование публичным ключем в где-то 50 тыс. раз медленнее симметричного.

Впрочем вру, NTRU может быть очень быстрым. Но этот алгоритм еще нигде не принят

michwill ★★★★★
()
Ответ на: комментарий от michwill

самое быстрое шифрование публичным ключем в где-то 50 тыс. раз медленнее симметричного.

по сравнению с временем передачи, это вообще не критично

cvs-255 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.