Русская Википедия:Обмен зашифрованными ключами
Обмен зашифрованными ключами (Шаблон:Lang-en) — протокол, разработанный Стивом Белловином и Майклом Мерритом[1]. EKE работает при условии, что у пользователей до начала работы протокола есть общий секрет. Протокол позволяет формировать сеансовый ключ для установления защищенного соединения. Для каждого сеанса генерируется новый сессионный ключ.
Предисловие
Данный протокол использует симметричное и асимметричное шифрование. В каждой сессии протокола генерируется случайным образом открытый ключ и шифруется на имеющимся у сторон секретном ключе. Использование двух видов шифрования - главная особенность данного протокола. В качестве общего секрета в схеме может выступать пароль, что делает данный протокол удобным при использовании в системах, где общий секрет является паролем.
Протокол EKE
Алиса и Боб обладают общим секретом P. Используя протокол EKE у них есть возможность генерировать общий сеансовый ключ K.
- Алиса генерирует случайную пару открытый-закрытый ключ, шифрует симметричным шифрованием открытый ключ K' с использованием общего секрета P в качестве ключа. Посылает Боб.
- <math>Alice \to \left\{ A, E_P(K') \right\} \to Bob</math>
- Боб, зная общий секрет, расшифровывает сообщение и получает ключ K'. Далее - случайным образом генерирует сеансовый ключ k, шифрует его открытым ключом K' и общим секретом P. Посылает Алиса.
- <math>Bob \to \left\{ E_P(E_{K'}(k)) \right\} \to Alice</math>
- Алиса получает общий сеансовый ключ k, расшифровывая сообщение. Генерирует случайную строку <math>R_A</math>, шифрует её на k. Посылает Боб.
- <math>Alice \to \left\{ E_k(R_A) \right\} \to Bob</math>
- Боб получает строку Алисы, расшифровывая сообщение. Далее - генерирует свою случайную строку <math>R_B</math>. Общим сеансовым ключом шифрует обе строки, передает зашифрованные строки Алисе.
- <math>Bob\to \left\{ E_k(R_A,R_B) \right\} \to Alice</math>
- Алиса получает <math>R_A</math> и <math>R_B</math>, расшифровывая сообщение. Значение <math>R_A</math>,полученное от Боба, сравнивается с тем, что было выбрано в пункте (3). Если значения совпадают, то Алиса шифрует <math>R_B</math> на ключе и посылает Бобу.
- <math>Alice \to \left\{ E_k(R_B) \right\} \to Bob</math>
- Боб получает <math>R_B</math>, расшифровывая сообщение. Значение <math>R_B</math>,полученное от Алисы, сравнивается с тем, что было выбрано в пункте (4). Если значения совпадают, то работа протокола завершена - участники могут обмениваться сообщениями используя при их шифровании ключ k.
Стойкость к атакам
В результате работы протокола пассивный криптоаналитик Ева может получить доступ только к <math>E_P(K')</math> и <math>E_P(E_{K'}(k))</math>, а также к сообщениям, зашифрованным на общем сессионном ключе k. Так как в алгоритме используется схема асимметричного шифрования и ключи K' и k выбираются случайно, Ева не сможет подобрать P. Таким образом общий секрет P может быть простым паролем, который в состоянии запомнить человек.
Этапы 3-6 обеспечивают подтверждение. На этапах 3-5 Алиса удостоверяется, что Боб знает общий сеансовый ключ. На этапах 4-6 Боб удостоверяется, что Алиса знает общий сеансовый ключ. Эта же задача решается в протоколе Kerberos посредством обмена метками времени.
Реализации
При реализации данного протокола возможно использование многих алгоритмов с открытыми ключами, но также надо учитывать, что ограничения методов шифрования на ключи могут дать взломщику дополнительные возможности для проведения атак. Использование случайных последовательностей в данном протоколе сделает атаку "брут-форсом" невозможной.
Реализация EKE с использованием системы Эль-Гамаля[1]
Преимущества
При использовании схемы Эль-Гамаля[2] возможно упрощение основного протокола.
Инициализация
Значения g - порождающий элемент группы и p - модуль, по которому производятся вычисления, выбираются для всех пользователей протокола. Также в соответствии с протоколом EKE у пользователей есть общий секрет r. Тогда <math>g^r mod(p)</math> - открытый ключ.
Работа протокола
- В данном алгоритме открытый ключ не надо шифровать на общем секрете P. Для общего случая такой подход не работает. На первом шаге протокола Алиса посылает Бобу:
- <math>Alice \to \left\{ A, g^r mod(p) \right\} \to Bob</math>
- Для алгоритма Эль-Гамаля Боб выбирает случайное число R. Тогда на данном этапе Боб посылает данное сообщение:
- <math>Bob \to \left\{ E_P(g^R mod(p), kg^{rR} mod(p)) \right\} \to Alice</math>
Реализация EKE с использованием протокола Диффи — Хеллмана, DH-EKE[3]
При реализации EKE с использованием протокола Диффи — Хеллмана[4] ключ K генерируется автоматически участниками работы протокола во время его исполнения.
Преимущества
При использовании протокола DH-EKE решается уязвимость базового протокола Диффи-Хеллмана к атаке человек посередине(MITM). Если криптоаналитик не знает общий секрет пользователей, то он не сможет[3] подобрать ключ, потому что шифруются случайные значения.
Инициализация
Значения g - порождающий элемент группы и n - модуль, по которому производятся вычисления, выбираются для всех пользователей протокола. В соответствии с протоколом EKE у пользователей есть общий секрет P.
Работа протокола
- Алиса случайно выбирает <math>r_A</math>, посылает его Бобу. При этом нет необходимости, чтобы Алиса шифровала первое сообщение на общем секрете P.
- <math>Alice \to \left\{ A, g^{r_A} mod(n) \right\} \to Bob</math>
- Боб случайно выбирает <math>r_B</math>, вычисляет K, генерирует случайную строку <math>R_B</math>, шифрует её на ключе K. Далее - вычисляет <math>g^{r_B} mod(n)</math>, шифрует его на общем секрете P. Передает Алисе.
- <math>K = g^{r_A*r_B} mod(n)</math>
- <math>Bob \to \left\{ E_P(g^{r_B} mod(n)),E_K(R_B) \right\} \to Alice</math>
- Алиса получает <math>g^{r_B} mod(n)</math>, расшифровывая первую часть сообщения с использованием общего секрета P. Далее - вычисляет K, расшифровывает полученным ключом вторую часть сообщения Боба. Генерирует случайную строку <math>R_A</math>, шифрует полученные строки на ключе K и посылает Бобу.
- <math>Alice\to \left\{ E_K(R_A,R_B) \right\} \to Bob</math>
- Боб получает <math>R_A</math> и <math>R_B</math>, расшифровывая сообщение. Значение <math>R_B</math>,полученное от Алисы, сравнивается с тем, что было выбрано в пункте (3). Если значения совпадают, то Боб шифрует <math>R_A</math> на ключе K и посылает Алисе.
- <math>Bob \to \left\{ E_K(R_A) \right\} \to Alice</math>
- Алиса получает <math>R_A</math>, расшифровывая сообщение. Значение <math>R_A</math>,полученное от Боба, сравнивается с тем, что было выбрано в пункте (4). Если значения совпадают, то работа протокола завершена - участники могут обмениваться сообщениями используя при их шифровании ключ K.
Усиленный протокол EKE
Стивом Белловином и Майклом Мерритом в работе[1] было предложено усиление части протокола запрос-ответ. Данное усиление позволяет[3] избежать компрометации данных при условии, что у криптоаналитика есть значение прошлого общего сеансового ключа k.
- На шаге 3 Алиса генерирует случайное число <math>S_A</math>. Посылает Бобу:
- <math>Alice\to \left\{ E_k(R_A,S_A) \right\} \to Bob</math>
- На шаге 4 Боб генерирует случайное число <math>S_B</math> и посылает Алисе:
- <math>Bob\to \left\{ E_k(R_A,R_B,S_B) \right\} \to Alice</math>
При такой работе протокола Алиса и Боб могут вычислить общий сеансовый ключ -- <math>S=S_A\oplus S_B</math>. В дальнейшем этот ключ используется для установления защищенного соединения, ключ k используется как ключ обмена ключами.
Допустим, что Ева получила доступ к значению S, но при этом работа протокола построена так, что это не даст Еве никакой информации об общем секрете P. К тому же, так как на ключе K шифруются только случайные данные, то криптографические подходы для его восстановлению неприменимы.
Примечания
Шаблон:Криптосистемы с открытым ключом
- ↑ 1,0 1,1 1,2 Шаблон:Статья
- ↑ Шаблон:Статья
- ↑ 3,0 3,1 3,2 Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — Шаблон:М: Триумф, 2002. — С. 82. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
- ↑ Шаблон:Статья