Шифрование данных с использованием криптографии с эллиптической кривой

#encryption #openssl #public-key-encryption #cryptoapi #ecies

Вопрос:

Мне нужно зашифровать данные с помощью ECIES с помощью openssl. Есть ли какой-либо API в openssl? результат зашифрованный текст = ввод)ecies(открытый ключ , обычный текст)

Если нет API , как я могу вычислить.

Комментарии:

1. ECIES в основном совпадает с (эфемерно-статическим) ECDH, за которым следует KDF (обычно по координате X результата), а затем обычный симметричный шифр.

2. Да, но не передавайте его через хэш-функцию, как указывает ECDH, а используйте HKDF . И вы, возможно, захотите заменить статический (надежный!) открытый ключ получателя с сертификатом позже. В противном случае вы просто выбрасываете эфемерный закрытый ключ стороны, выполняющей шифрование, и включаете соответствующий открытый ключ с зашифрованным текстом, и вуаля. Проще простого. Ну, вроде как :П

3. Вы не можете напрямую шифровать данные с помощью эллиптической кривой (ну, во всяком случае, не какой-либо значительной длины). Однако вы можете сгенерировать секретный ключ, используя статический, доверенный открытый ключ получателя и эфемерный открытый ключ. Соответствующий открытый ключ затем может быть присоединен к зашифрованному тексту секретного ключа, чтобы статический закрытый ключ можно было использовать для создания того же секрета для расшифровки — HKDF-это просто конкретный KDF на основе HMAC. Это также в Надувном замке. Для остальной части функциональности BC действительно не требуется. Нет, вы не можете смешивать кривые, вам нужно выбрать одну.

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

5. ОП, это называется «умножением точек». Алиса умножает свой закрытый ключ на открытый ключ Боба, чтобы получить общий секрет. Боб делает то же самое — он умножает свой закрытый ключ на открытый ключ Алисы, чтобы получить тот же общий секрет. Я думаю, что функция, которую вы ищете, такова EC_POINT_mul() . Видишь openssl.org/docs/man1.0.2/man3/EC_POINT_mul.html .