ECDH известен как Ключевой механизм инкапсуляции, что, как вы упомянули, похоже на шифрование с открытым ключом, но не то же самое.
Есть много причин предпочесть KEM, я быстро упомяну одну.
Во-первых, обратите внимание, что KEM (формально) представляет собой набор из трех алгоритмов. $(\mathsf{KGen}, \mathsf{Encaps}, \mathsf{DCaps})$, куда
$\mathsf{KGen}$ принимает на вход некоторый параметр безопасности $1^\лямбда$, и выводит пару ключей $(ск, пк)$
$\mathsf{Заглавные буквы}$ принимает на вход открытый ключ $пк$ (и, возможно, некоторая случайность, которая часто бывает только неявной), и возвращает пару $(к, с)$ производного ключа $к$, и "зашифрованный текст" $с$
$\mathsf{декап}$ принимает на вход секретный ключ $ск$ и "шифротекст" $с$, и выводит другой производный ключ $к'$.
КЭМ правильный, если $к = к'$ в конце, напр. два производных ключа согласуются.
Понятие безопасности KEM аналогично PKE, что означает, что существует естественный способ расширить традиционные понятия безопасности IND-CPA/IND-CCA.
Обратите внимание, что можно построить KEM, используя любой PKE, имея $\mathsf{Encaps}_{pk}(r) = \mathsf{Enc}_{pk}(r)$, куда $г$ это случайность, используемая KEM (это идея «шифровать равномерно случайные ключи», о которой вы упомянули).
Может быть, мы должны явно написать $\mathsf{Enc}_{pk}(f(r))$ является некоторой функцией случайности --- я не буду заморачиваться с этим явным образом.
Так зачем заботиться о KEM?
Хотя есть и другие вещи, которые вы можете упомянуть, крупный Дело в том, что есть определенные свойства, которыми обладают «естественные» KEM (такие как ECDH), которые KEM, построенный на основе подхода «шифровать случайные ключи», делают нет имеют.
Это означает, что ECDH — это не «просто» KEM, и его можно использовать в приложениях, где шифрование случайных ключей не работает.
Возможно, наиболее очевидным свойством, на которое следует указать, является «неинтерактивность».
В частности, ECDH можно записать как
- обе стороны обмениваются парой ключей Диффи-Хеллмана $(г, г^{s_i})$, а потом
- вычисление некоторой простой функции этих пар ключей.
Если мы попытаемся написать это с помощью синтаксиса KEM, мы могли бы сказать, что $\mathsf{KGen}(1^\лямбда)$ производит одну пару ключей $(г, с_0, г^{с_0})$, и что $\mathsf{Encaps}_{g^{s_0}}(r) = (g, s_1, g^{s_1})$ создает другую пару ключей, где мы моделируем «зашифрованный текст» как $г^{s_1}$.
Это имеет очень любопытное свойство однако --- $г^{s_1}$, «зашифрованный текст» схемы, делает нет вообще не зависят от публичного ключа (кроме как через генератор групп $г$, который можно стандартизировать как общедоступный параметр).
Это весьма удивительное свойство, которого нет в схеме «шифрование случайного ключа».
Это известно как схема неинтерактивного обмена ключами (NIKE).
Имущество является и тем, и другим.
полезно на практике --- "двойной храповик" Signal использует это свойство ключевым образом, что затрудняет "подключение" другого KEM для использования в качестве сигнала, и
теоретически нетривиальный --- общее построение NIKE требует некоторого причудливого примитива, такого как FHE/функциональное шифрование. Известны результаты, которые показывают, что, вероятно, невозможно построить NIKE с использованием решеток (и правдоподобных кодов) с «малыми параметрами».
На самом деле (за исключением решетчатых схем с большими параметрами) мне известен только один постквантовый NIKE, а именно CSIDH.Это означает, что прямая модификация Сигнала может быть либо постквантовой, либо
- использует CSIDH,
- использует менее эффективный вариант схемы NIST PQC (скажем, схему на основе решетки с малыми параметрами), или
- каким-то образом изменяет сам протокол Signal, обычно с некоторой эффективностью.
Хотя есть и другие нюансы, которые вы можете сказать, чтобы сравнить PKE и KEM, теоретически существует очень большое преимущество для ECDH --- это эффективные NIKE, которые вообще не очень распространены.