Русская Википедия:Схема Сакаи — Касахары
Схема Сакаи — Касахары (SAKKE) — личностная криптографическая система, предложенная Раучи Сакаи и Масао Касахара в 2003 году.[1] Вместе со Шаблон:Iw, данный алгоритм является одной из немногих личностных схем, применяемых в индустрии. Является криптографическим приложением Шаблон:Iw на эллиптических кривых и конечных полях. Доказательство безопасности схемы было изложено в 2005 году Ченом и Ченгом.[2] Схема описана в Инженерном совете Интернета (RFC) RFC 6508.
В связи с тем, что данная схема является специфичным случаем личностной криптографии, основным вариантом её использования является возможность кому угодно зашифровать сообщение, зная только публичный идентификатор (например, e-mail) получателя. В данном ключе, алгоритм позволяет избавиться от необходимости пользователям обмениваться публичными сертификатами для шифрования.
Описание схемы
Схема Сакаи — Касахара позволяет зашифровать сообщение <math>\mathbb{M}</math> для получателя с конкретным идентификатором <math>\textstyle I_U</math>. Таким образом, только пользователь с закрытым ключом <math>\textstyle K_U</math>, соответствующим <math>\textstyle I_U</math>, сможет расшифровать переданное сообщение.
Для реализации схемы необходимо, чтобы отправитель и получатель доверяли одному и тому же генератору закрытых ключей (ГЗК), который так же может называться системой управления ключами (Шаблон:Iw). Целью ГЗК является генерация приватного ключа <math>\textstyle K_U</math>, соответствующего публичному идентификатору <math>\textstyle I_U</math>. ГЗК должен сохранно и безопасно доставить закрытый ключ получателю, а также свой (зависящий от ГЗК) открытый параметр <math>\textstyle Z</math> всем участникам схемы. Данные действия не рассматриваются в определении самой схемы.
Предварительные замечания
Схема использует две мультипликативные группы <math>\textstyle E</math> и <math>\textstyle G</math>. Предполагается, что:
- Шаблон:Iw, также известная как задача дискретного логарифмирования, тяжело решаема в <math>\textstyle E</math>. Это означает, что при данных элементах группы <math>\textstyle P</math> и <math>\textstyle Q</math>, вычислительно тяжело найти такой <math>\textstyle x</math>, что <math>\textstyle Q = xP</math>.
- Задача дискретного логарифмирования, тяжело решаема в <math>\textstyle G</math>. Это означает, что для двух элементов группы <math>g</math> и <math>t</math>, вычислительно сложно найти такой <math>\textstyle x</math>, что <math>\textstyle g^x = t</math>.
- Существует билинейное отображение — спаривание Тейта — Лихтенбаума <math>\textstyle e(,)</math> из <math>\textstyle E</math> в <math>\textstyle G</math>. Это означает, что для члена <math>\textstyle P</math> группы <math>\textstyle E</math> и для <math>\textstyle g = e(P,P)</math> из группы <math>\textstyle G</math> выполняется:
- <math>\textstyle e(P,xP) = e(xP,P) = e(P,P)^x = g^x</math>
Зачастую <math>\textstyle E</math> является суперсингулярной эллиптической кривой, как, например, <math>\textstyle E: y^2 = x^3 - 3x</math> (над конечным полем простого порядка <math>\textstyle p</math>). Генератор <math>\textstyle P</math> простого порядка <math>\textstyle q</math> выбирается из <math>\textstyle E</math>. Группа <math>\textstyle G</math> является образом группы, сгенерированной <math>\textstyle P</math>, с помощью спаривания (над расширением второй степени конечного поля с простым порядком <math>\textstyle p</math>).
Также необходимо наличие двух хэш-функций: <math>\textstyle H_1</math> и <math>\textstyle H_2</math>, таких, что:
- <math>\textstyle H_1</math> возвращает положительное целое число <math>\textstyle x</math>, удовлетворяющее <math>\textstyle 1<x<q</math>.
- <math>\textstyle H_2</math> возвращает <math>\textstyle n</math> битов, где <math>\textstyle n</math> является длиной сообщения <math>\mathbb{M}</math>.
Генерация ключей
На вход ГЗК подаётся главный ключ <math>\textstyle z</math>, удовлетворяющий <math>\textstyle 1 < z < q</math>, а также открытый ключ <math>\textstyle Z = zP</math>, являющимся элементом группы <math>\textstyle E</math>. Алгоритм вычисляет закрытый ключ <math>\textstyle K_U</math>, соответствующий <math>\textstyle ID_U</math> следующим образом:
- <math>\textstyle K_U = (\frac{1}{z + H_1(ID_U)})P</math>
Шифрование
Чтобы зашифровать неповторяющееся сообщение <math>\mathbb{M}</math>, отправителю необходимо знать идентификатор получателя <math>\textstyle ID_U</math> и открытый ключ генератора закрытых ключей <math>\textstyle Z</math>. Далее отправителю необходимо произвести следующие операции:
- Вычилить <math>\textstyle id = H_1(ID_U)</math>
- Сгенерировать <math>\textstyle r</math>: <math>\textstyle r = H_1(\mathbb{M} || id)</math>, где операция <math>\textstyle ||</math> является побитовым «или».
- Сгенерировать точку <math>\textstyle R</math> в группе <math>\textstyle E</math>:
- <math>\textstyle R = r((id)P + Z)</math>
- Создать зашифрованное сообщение с помощью битовой маски:
- <math>\textstyle S = \mathbb{M} \oplus H_2(g^r)</math>
- Зашифрованным сообщением является пара: <math>\textstyle (R,S)</math>
Обратите внимание на то, что сообщение не должно повторяться, так как при неизменном идентификаторе получателя алгоритм выдаст тот же шифротекст. Существует расширение протокола для случая, если сообщения потенциально могут повторяться.
Дешифрование
Для того чтобы расшифровать сообщение, адресованное <math>\textstyle ID_U</math>, получателю необходимо знать закрытый ключ <math>\textstyle K_U</math>, сгенерированный ГЗК и открытое значение <math>\textstyle Z</math>. Процедура расшифровки сообщения состоит из следующих действий:
- Вычислить <math>\textstyle id = H_1(ID_U)</math>
- Получить зашифрованное сообщение: <math>\textstyle (R,S)</math>.
- Вычислить:
- <math>\textstyle w = e(R,K_U)</math>
- Выделить сообщение:
- <math>\textstyle \mathbb{M} = S \oplus H_2(w)</math>
- Чтобы проверить полученное сообщение, нужно вычислить <math>\textstyle r = H_1(\mathbb{M}||id)</math>. Сообщение достоверно тогда и только тогда, когда:
- <math>\textstyle r((id)P + Z) \equiv R</math>
Демонстрация корректности алгоритма
Данные равенства показывают корректность приведённого алгоритма:
- <math>\textstyle w = e(R,K_U) = e(r((id)P + Z),K_U) = e(r((id)P + zP),K_U) = e((r(id+z))P,K_U)</math>
Благодаря билинейности отображения:
- <math>\textstyle w = e((r(id+z))P,K_U)= e((r(id+z))P,(\frac{1}{(id+z)})P) = e(P,P)^{\frac{r(id+z)}{(id+z)}} = g^r</math>
В результате получаем:
- <math>\textstyle S \oplus H_2(w) = (\mathbb{M} \oplus H_2(g^r)) \oplus H_2(w) = \mathbb{M}</math>
Стандартизация
С данным протоколом связаны два стандарта:
- Первоначальная стандартизация была произведена IEEE в 2006.[3]
- Схема была стандартизована IETF в 2012 году по RFC 6508. Алгоритм используется как часть протокола MIKEY_SAKKE, описанного в RFC 6509.
Примечания