Русская Википедия: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>A \longrightarrow B \colon PKE_B(K_A)</math>
<math>B \longrightarrow A \colon PKE_A(K_B)</math>
<math>K_0 = H(K_A, K_B)</math>

Значения <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>A \longrightarrow B \colon g^{x} \pmod {p}</math>
<math>B \longrightarrow A \colon g^{y} \pmod {p}</math>

Третий этап

На третьем этапе происходит аутентификация <math>g^{x}</math> и <math>g^{y}</math>, переданных во время второго этапа, с использованием эфемерного ключа <math>K_0</math>, полученного на первом этапе.

<math>A \longrightarrow B \colon F_{K_0}(g^{y}, g^{x}, id_A, id_B)</math>
<math>B \longrightarrow A \colon F_{K_0}(g^{x}, g^{y}, id_B, id_A)</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>A \longrightarrow B \colon nonce_A</math>
<math>B \longrightarrow A \colon 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>A \longrightarrow B \colon F_{K_0}(nonce_B, nonce_A, id_A, id_B)</math>
<math>B \longrightarrow A \colon F_{K_0}(nonce_A, nonce_B, id_B, id_A)</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.

Pre-shared key и PFS

В данном режиме предполагается, что сторонам уже известен секретный ключ (например, ключ задан вручную), и они используют этот ключ для того, чтобы получить новый сессионный ключ Шаблон: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.

Примечания

Шаблон:Примечания

Литература

Ссылки