Рейтинг:1

Асимметрично зашифровать короткое сообщение в короткую строку

флаг cn

У меня есть строка, размер которой составляет <32 символа из следующего ограниченного набора символов.

  • прописные и строчные латинские буквы: От А до Я и от А до Я
  • цифры: от 0 до 9
  • специальные символы: !#$%&'*+-/=?^_`{|}~

Я хочу зашифровать эту строку с помощью открытого ключа, где результирующее сообщение <64 символа.

Я понимаю, что будет компромисс между размером и безопасностью.

kelalaka avatar
флаг in
[Шифрование ECC Elgamal] (https://crypto.stackexchange.com/a/9990/18298), если вы можете вынести [кодировку сообщения] (https://crypto.stackexchange.com/q/76340/18298)
Рейтинг:2
флаг my

Я хочу зашифровать эту строку с помощью открытого ключа, где результирующее сообщение <64 символа.

На самом деле, похоже, вы можете, если немного уменьшите безопасность.

Одним из подходов было бы использование ECIES с, скажем, Р-192. (EC-Elgamal также будет работать - я думаю, что это лучший подход)

В этой схеме закрытый ключ представляет собой случайное значение $г$, а открытый ключ — это значение $P = rG$, куда $G$ является точкой генератора. Для шифрования мы выбираем случайное значение $s$, и вычислить оба $sG$ и $sP$; мы отправляем точку $sP$ (или, в вашем случае, только координату x) с помощью функции создания ключа, которая генерирует ключ, который мы используем для шифрования фактического сообщения. Шифрованный текст состоит из значения $sG$ (в вашем случае только координата x) и симметричное шифрование.

Теперь, если мы используем кривую P-192, координата x точки $sG$ может быть выражен в 192 битах; используя предоставленный нам алфавит (в котором 81 символ), это займет 31 символ (например, путем преобразования значения от 0 до примерно $2^{192}$ в базе 81).

Что касается симметричного шифрования сообщения, мы можем использовать метод шифрования с сохранением формата [1]; это может преобразовать сообщение, состоящее из алфавита из 81 символа, в зашифрованный текст того же алфавита и длины.

Таким образом, шифрование из 31 символа (наибольшего, что, как вы сказали, вас интересует) будет зашифровано как сообщение из 31 + 31 = 62 символа - в соответствии с вашими требованиями.

Стоимость охраны:

  • P-192 имеет «96-битную безопасность»; это немного меньше, чем мы обычно используем, но все равно довольно хорошо.

  • Мы пропускаем длину сообщения (поскольку метод Format Preserving Encryption сохраняет длину); если это дополнительное требование, вы всегда можете дополнить сообщение до 32 байтов (последний символ указывает фактическую длину сообщения) — при этом мы по-прежнему соблюдаем требования к длине


[1]: Обычно в ECIES мы используем явное преобразование целостности в симметричном шифровании. Я бы сказал, что в данном случае в этом нет необходимости — любая модификация FPE будет расшифровывать как что-то случайное, и противник всегда может заменить зашифрованный текст чем-то, что расшифровывает что-то случайное (простым способом выбора случайного открытого текста и его шифрования). с открытым ключом).

флаг cn
Похоже, что ElGamal можно использовать с P-192 (не простым, может быть, P-191?) для шифрования моего сообщения, которое я могу позже расшифровать с помощью закрытого ключа. Я смотрю на этот пример https://cryptographyacademy.com/elgamal/ Почему, как вы говорите, нужна только координата x? Также, где здесь играет роль симметричное шифрование с сохранением формата?
poncho avatar
флаг my
@Xavier: я посмотрел на ЭльГамаля; сделать так, чтобы все соответствовало ограничениям, которые у вас есть, сложно (размер кривой должен быть достаточно большим, чтобы вы могли кодировать строку, плюс необходимая изменчивость, чтобы получить правильную координату; с другой стороны, он не может быть слишком большим, или размер зашифрованного текста превышает лимит.
poncho avatar
флаг my
Что касается того, где появляется симметричный шифр, то он используется для шифрования фактического открытого текстового сообщения (в то время как значение $sG$ используется для передачи симметричного зашифрованного текста). Итак, что делает дешифратор: извлекает значение $sG$ (произвольно выбирая одну из двух координат $y$), вычисляя $r(sG)$ (которое имеет ту же координату $x$, что и значение $rP$ шифровальщика; преобразование этого в симметричный ключ (с использованием kdf), а затем выполнение симметричного дешифрования.Я предлагаю симметричный алгоритм FPE, чтобы уменьшить размер зашифрованного текста...
poncho avatar
флаг my
Что касается того, почему вам нужна только координата x, ну, координата x $r(sG)$ зависит только от координаты x $sG$; следовательно, чтобы расшифровать, мы можем преобразовать координату x в зашифрованном тексте обратно в полный $P$ (произвольно выбрав одну из двух возможностей - не имеет значения, была ли выбранная нами та же самая, что и у шифровальщика). ). Я полагаю, вы могли бы использовать точечное сжатие для передачи всего значения $sG$ - однако в этом нет необходимости (и это целый бит - мы бежим достаточно близко к пределу размера, что это нетривиальная проблема)
poncho avatar
флаг my
@Xavier: Кроме того, когда мы говорим «P-192», я имею в виду конкретную эллиптическую кривую с размером поля (и порядком группы) около $2^{192}$ — она использует простое поле и поэтому не имеет значения, является ли 192 простым числом или нет. Он также известен как secp192r1 (как определено в https://www.secg.org/SEC2-Ver-1.0.pdf).
флаг cn
Спасибо за разъяснение, если честно, это все немного выше моего понимания. Знаете ли вы хороший пример реализации ECIES с использованием кривой secp192r1?
poncho avatar
флаг my
@Xavier: быстрый Google находит https://github.com/insanum/ecies - он использует OpenSSL (и, хотя это не относится к P-192, OpenSSL поддерживает эту кривую). Обратите внимание, что ваши требования довольно специфичны — потребуется немного поработать, чтобы преобразовать этот код во что-то, что соответствует вашим требованиям.
флаг cn
спасибо за всю помощь, у меня есть рабочая реализация по вашему дизайну. Я нашел этот [пример] (https://asecuritysite.com/ecc/ecc3) полезным для понимания ECIES. Моя единственная проблема сейчас заключается в том, чтобы выяснить, как передать только значение x и решить всю точку при расшифровке. Насколько я понимаю, дается x, который я бы нашел для y на эллиптической кривой из формулы `y ^ 2 = x ^ 3 + ax + b`. Глядя на кривую [secp192r1](https://neuromancer.sk/std/secg/secp192r1), когда я вычисляю значение y, приведенный выше пример реализации утверждает, что точка не находится на кривой.

Ответить или комментировать

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