Русская Википедия:SKEME
SKEME — криптографический протокол распространения ключей, созданный в 1996 году Хьюго Кравчиком(Шаблон:Lang-en). Он позволяет двум сторонам получить общий секретный ключ, используя незащищённый канал связи.
Протокол SKEME послужил основой для протокола IKE Шаблон:Sfn, определённого в RFC 2409.
Основные свойства протокола
- аутентификация собеседников — уверенность в том, кто является собеседником Шаблон:Sfn;
- perfect forward secrecy (PFS) — потеря секретных ключей не ведёт к компрометации прошлой переписки Шаблон:Sfn;
- возможность отречения — третье лицо не сможет доказать, что сообщения написаны кем-либо другому адресату Шаблон:Sfn;
- strong secrecy — злоумышленник не может детектировать изменение секретного ключа Шаблон:Sfn;
- гибкость — четыре возможных режима работы позволяют достичь компромисса между производительностью и безопасностью Шаблон:Sfn.
Режимы и этапы
Обозначения
Для описания протокола используются следующие обозначения:
- <math>PKE_A(arg)</math> — шифрование сообщения <math>arg</math> с открытым ключом, принадлежащим стороне A;
- <math>H(arg)</math> — вычисление криптографической хеш-функции с аргументом <math>arg</math>;
- <math>F_K</math> — псевдослучайная функция с ключом <math>K</math>, результат вычисления которой нельзя предсказать без знания ключа;
- <math>id_A, id_B</math> — идентификаторы сторон A и B соответственно;
- <math>g, p</math> — генератор и модуль соответственно, используемые в протоколе Диффи — Хеллмана.
Базовый режим
Первый этап
Во время первого этапа стороны A и B получают эфемерный ключ <math>K_0</math>, зная открытые ключи друг друга Шаблон:Sfn. Для этого они обмениваются «половинками ключа», зашифрованными открытыми ключами друг друга, а затем комбинируют «половинки» при помощи хеш-функции.
Значения <math>K_A</math> и <math>K_B</math> должны быть выбраны случайным образомШаблон:Sfn. Если сторона A следует протоколу, то она может быть уверена в том, что эфемерный ключ <math>K_0</math> неизвестен никому, кроме B. Аналогично, сторона B может быть уверена в том, что эфемерный ключ не знает никто, кроме AШаблон:Sfn.
Второй этап
На втором этапе стороны используют протокол Диффи — ХеллманаШаблон:Sfn. Сторона А выбирает случайное число <math>x</math> и вычисляет значение <math>g^{x} \bmod p</math>. Сторона B выбирает случайное число <math>y</math> и вычисляет значение <math>g^{y} \bmod p</math>. После этого, стороны обмениваются вычисленными значениями.
Третий этап
На третьем этапе происходит аутентификация <math>g^{x}</math> и <math>g^{y}</math>, переданных во время второго этапа, с использованием эфемерного ключа <math>K_0</math>, полученного на первом этапе.
Включение <math>g^{x}</math> в первое сообщение позволяет стороне B убедиться в том, что значение <math>g^{x}</math> на втором этапе было действительно передано стороной AШаблон:Sfn. Значение <math>g^{y}</math> в этом же сообщении позволяет B защититься от атаки повторного воспроизведенияШаблон:Sfn.
Генерация сессионного ключа
Результатом выполнения протокола является сессионный ключ, вычисляемый как <math>SK = H(g^{xy} \bmod {p})</math>Шаблон:Sfn.
SKEME без PFS
Режим SKEME без PFS предоставляет возможность обмена ключами без вычислительных затрат, необходимых для обеспечения PFS Шаблон:Sfn. Для этого на втором этапе вместо значений <math>g^{x}</math> и <math>g^{y}</math>, стороны посылают друг другу случайные числа <math>nonce_A</math> и <math>nonce_B</math>.
Третий этап тоже модифицируется. Аргументы функции <math>F_{K_0}</math> меняются с <math>g^{x}</math> и <math>g^{y}</math> на <math>nonce_A</math> и <math>nonce_B</math> соответственно.
Данная модификация второго и третьего этапа позволяет сторонам убедиться в том, что ключ <math>K_0</math>, полученный на первом этапе, известен обеим сторонам. Шаблон:Sfn.
Результатом выполнения протокола в данном режиме является сессионный ключ, вычисляемый как <math>SK = F_{K_0}(arg)</math>, где <math>arg = F_{K_0}(nonce_B, nonce_A, id_A, id_B)</math> Шаблон:Sfn.
В данном режиме предполагается, что сторонам уже известен секретный ключ (например, ключ задан вручную), и они используют этот ключ для того, чтобы получить новый сессионный ключ Шаблон:Sfn. В этом режиме первый этап можно пропустить и использовать секретный ключ вместо <math>K_0</math>. В этом режиме обеспечивается perfect forward secrecy Шаблон:Sfn.
Сессионный ключ в данном режиме вычисляется так же, как в базовом Шаблон:Sfn.
Fast Re-Key
Fast Re-Key — самый быстрый режим протокола SKEME Шаблон:Sfn. Этот режим позволяет часто обновлять ключ без вычислительных затрат на асимметричное шифрование и на использование протокола Диффи — Хеллмана Шаблон:Sfn.
В этом режиме предполагается, что ключ <math>K_0</math> известен сторонам с предыдущего раунда протокола. Первый этап пропускается, а второй и третий этап, а также вычисление сессионного ключа выполняются так же, как в режиме SKEME без PFS Шаблон:Sfn.
Примечания
Литература
Ссылки