ECIES - это общедоступный алгоритм шифрования?
Я реализовал алгоритм шифрования RSA для шифрования симметричного ключа, используемого при шифровании данных, но размер ключа и размер зашифрованного текста RSA создали проблему с памятью, поэтому я искал решение для других методов криптографии с открытым ключом. Я нашел интегрированную схему шифрования на основе эллиптических кривых (ECIES) и понимаю теорию, лежащую в ее основе, однако мне немного неясно, как этот метод использовать в качестве общедоступного / асимметричного алгоритма шифрования. Метод вычисляет симметричное шифрование с ключом, полученным из общего секретного кода, для шифрования и дешифрования (используя один и тот же ключ).
Так как же это можно принять за алгоритм асимметричного шифрования? Или есть какой-нибудь способ реализовать это как асимметричное шифрование?
1 ответ
Мета: это не вопрос или проблема программирования или разработки. Это, вероятно, принадлежит crypto.SX; Вы могли бы попросить о миграции.
Если быть точным, ECIES - это гибридная схема шифрования с открытым ключом, как и большинство других. Например, RSA обычно используется, как вы сказали, для шифрования рабочего (для каждого сообщения) симметричного ключа, а не для непосредственного шифрования данных.
Перефразируя описание википедии:
- (Обычно заранее) Боб генерирует (статическую) пару ключей и публикует публичный ключ достоверно (например, используя сертификат)
2-5. Алиса генерирует эфемерную пару ключей, получает общую DEK, шифрует данные и отправляет ее с помощью эфемерной публичной клавиши (правка) и уничтожает эфемерную приватную клавишу
- Боб использует свой приватный ключ для получения DEK и расшифровывает данные
ДОБАВЛЕНО и расширено ниже, по комментариям: Да, DEK одинаков на обоих концах (обратите внимание, я использовал "значение", означающее один, а не несколько), и именно поэтому эта схема работает; и часть ECIES, которая использует DEK для шифрования и дешифрования данных, является симметричной, но все другие операции (которые надежно создают эфемерный общий DEK) - нет.
Жизненно важно, чтобы никто кроме Алисы (или Боба) не узнал ее эфемерную личную клавишу; если они это сделают, они могут расшифровать. Но ей не нужно явно хранить это в секрете, потому что она уничтожает его сразу после использования для отправки сообщения; Вот что значит эфемерный.
Посмотрим:
публичный ключ получателя является публичным, и любой может зашифровать
получатель имеет (статический) закрытый ключ и может расшифровать
никто больше не имеет (статического) частного ключа Боба или эфемерного частного ключа Алисы, и никто другой не может расшифровать
получателю нужна только одна пара ключей; если есть несколько отправителей, они все могут использовать одну и ту же публичную клавишу, но не могут расшифровать трафик друг друга, и им не нужно тайно получать публичную клавишу; для тысячи или миллиона отправителей это стоит столько же, сколько один отправитель или очень мало
Вместо этого рассмотрим свойства стандартной / традиционной симметричной схемы:
обе стороны должны иметь ключ (только один, а не пара), которым они делятся заранее; оба должны держать это в секрете и не делиться ни с кем другим
для этого обычно требуется, чтобы стороны встречались заранее или использовали физически безопасные средства, такие как курьер, для передачи ключа от одного к другому или, возможно, от центрального органа к обоим
каждый ключ может использоваться только одной парой сторон; для нескольких отправителей Боб должен иметь и управлять таким количеством разных ключей, а у каждого отправителя (Алиса, Эбби, Энн и т. д.) должен быть свой ключ. Каждый отправитель должен отдельно встретиться с Бобом, или каждый из них должен иметь отдельного курьера (или двух), прежде чем они будут общаться с ним. Для тысячи или миллиона отправителей это становится чрезвычайно дорогостоящим
У ECIES нет ни одного из этих свойств обычной или симметричной системы, а также всех свойств описанной выше публичной клавиши или асимметричной системы, хотя он также использует некоторые симметричные операции наряду со своими асимметричными операциями.
И именно поэтому для меня это звучит как (гибридное) шифрование с открытым ключом!
@dave_thompson_085 хорошо объяснил концепцию. Однако я хотел бы добавить пример, чтобы прояснить это.
Например:
- Алиса генерирует открытый "qA" и закрытый ключ "dA".
- Алиса отправляет Бобу свой открытый ключ.
- Используя этот открытый ключ, Боб генерирует случайную пару симметричных ключей (R и S).
- Боб шифрует сообщение ключом "S" и отправляет этот зашифрованный текст вместе с ключом "R" Алисе.
- С помощью этого ключа "R" Алиса может умножить свой закрытый ключ "dA" и сгенерировать симметричный ключ "S" для расшифровки зашифрованного текста.
Таким образом, сообщение шифруется с использованием симметричного ключа, но по сети оно асимметрично, поскольку по сети обменивается только открытым ключом, который используется для генерации симметричного ключа для получателя, а закрытый ключ используется для генерации того же симметричного ключа. на стороне отправителя.