HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: криптоанализ, протокол обмена ключами, пароли, diffie-hellman, spr, pake, пэйк</p>
1 <p>Теги: криптоанализ, протокол обмена ключами, пароли, diffie-hellman, spr, pake, пэйк</p>
2 <p>Сегодня мы поговорим о<a>Пэйках</a>(PAKE, Password Authenticated Key Exchange) - протоколах обмена ключами с парольной аутентификацией. Заметка основана на статье<a>"Should you use SRP"</a>Мэтью Грина и на оригинальной статье Томаса Ву<a>"SPR-6: Improvements and refinements to the secure remote password protocol"</a>.</p>
2 <p>Сегодня мы поговорим о<a>Пэйках</a>(PAKE, Password Authenticated Key Exchange) - протоколах обмена ключами с парольной аутентификацией. Заметка основана на статье<a>"Should you use SRP"</a>Мэтью Грина и на оригинальной статье Томаса Ву<a>"SPR-6: Improvements and refinements to the secure remote password protocol"</a>.</p>
3 <h2><strong>Зачем нужны Пэйки?</strong></h2>
3 <h2><strong>Зачем нужны Пэйки?</strong></h2>
4 <p>Возьмём север, хранящий пароли пользователей в хэшированном виде. При логине, пользователь вводит свой пароль, сервер вычисляет его хэш-значение и сверяет результат с тем, что хранится на сервере. В таком подходе есть очевидная дыра: сервер "видит" пароль пользователя в открытом виде при каждом доступе! Даже если сервер и не сохраняет пароли в открытом виде (а<a>такое происходило</a>), передача подразумевает наличие защищённого канала (<strong>TLS</strong>).</p>
4 <p>Возьмём север, хранящий пароли пользователей в хэшированном виде. При логине, пользователь вводит свой пароль, сервер вычисляет его хэш-значение и сверяет результат с тем, что хранится на сервере. В таком подходе есть очевидная дыра: сервер "видит" пароль пользователя в открытом виде при каждом доступе! Даже если сервер и не сохраняет пароли в открытом виде (а<a>такое происходило</a>), передача подразумевает наличие защищённого канала (<strong>TLS</strong>).</p>
5 <p>Криптографический примитив, позволяющий пользователю не отправлять свой пароль на сервер в открытом виде, называется<strong>PAKE</strong>. Самая распространённая реализация PAKE -<a>SRP</a>(Secure Remote Password), предложенная Томасом Ву в 1998 году. SRP, имеющий прототипом протокол Diffie-Hellman, используется в TLS. Ниже мы расскажем в деталях, как работает протокол SRP.</p>
5 <p>Криптографический примитив, позволяющий пользователю не отправлять свой пароль на сервер в открытом виде, называется<strong>PAKE</strong>. Самая распространённая реализация PAKE -<a>SRP</a>(Secure Remote Password), предложенная Томасом Ву в 1998 году. SRP, имеющий прототипом протокол Diffie-Hellman, используется в TLS. Ниже мы расскажем в деталях, как работает протокол SRP.</p>
6 <h2><strong>Как работает PAKE?</strong></h2>
6 <h2><strong>Как работает PAKE?</strong></h2>
7 <p>PAKE - особая форма протокола обмена ключами, в результате которого клиент (пользователь) и север генерируют на основе открытых данных общий ключ, используемый затем в качестве симметричного ключа. Популярный пример такого протокола -- обмен ключами<a>Diffie-Hellman</a>, в своей примитивной форме страдающий от атак<a>"человек по середине"</a>. Протоколы PAKE не уязвимы к такого рода атакам и позволяют пройти аутентификацию зарегистрированному на сервере пользователю без отправки пароля.</p>
7 <p>PAKE - особая форма протокола обмена ключами, в результате которого клиент (пользователь) и север генерируют на основе открытых данных общий ключ, используемый затем в качестве симметричного ключа. Популярный пример такого протокола -- обмен ключами<a>Diffie-Hellman</a>, в своей примитивной форме страдающий от атак<a>"человек по середине"</a>. Протоколы PAKE не уязвимы к такого рода атакам и позволяют пройти аутентификацию зарегистрированному на сервере пользователю без отправки пароля.</p>
8 <p>PAKE состоит из двух шагов:</p>
8 <p>PAKE состоит из двух шагов:</p>
9 <p>- Регистрация (sign up): новый клиент отправляет на сервер проверочный материал для своего пароля. Сервер сохраняет в базе полученный материал для данного Id. - Генерация ключа/логин: клиент и сервер генерируют общий сессионный ключ.</p>
9 <p>- Регистрация (sign up): новый клиент отправляет на сервер проверочный материал для своего пароля. Сервер сохраняет в базе полученный материал для данного Id. - Генерация ключа/логин: клиент и сервер генерируют общий сессионный ключ.</p>
10 <p>По сути протокол реализует<a>доказательство с нулевым разглашением</a>(zero-knowledge proof). SRP решает два шага PAKE следующим образом. Перед началом общения клиент и сервер располагают общими параметрами: большим простым числом N (вида N = 2*q +1, где q - простое число), g - генератором мультипликативной группы по модулю N и хэш-функцией H(). Значение k равно 3. Все вычисления проводятся по модулю N.</p>
10 <p>По сути протокол реализует<a>доказательство с нулевым разглашением</a>(zero-knowledge proof). SRP решает два шага PAKE следующим образом. Перед началом общения клиент и сервер располагают общими параметрами: большим простым числом N (вида N = 2*q +1, где q - простое число), g - генератором мультипликативной группы по модулю N и хэш-функцией H(). Значение k равно 3. Все вычисления проводятся по модулю N.</p>
11 <p>Клиент генерирует пароль passwd и "солевое" значение salt (случайное значение небольшой по сравнению с passwd длины). Сервер сохраняет значение соли и "зашифрованный" результат хэширования пароля с солью.</p>
11 <p>Клиент генерирует пароль passwd и "солевое" значение salt (случайное значение небольшой по сравнению с passwd длины). Сервер сохраняет значение соли и "зашифрованный" результат хэширования пароля с солью.</p>
12 <p>Клиент и сервер генерируют общий пароль K.</p>
12 <p>Клиент и сервер генерируют общий пароль K.</p>
13 <p>В конце протокола клиент и сервер проверяют, действительно ли они получили одинаковое значение сессионного ключа K. Способов такой проверки может быть несколько, вот один из них:</p>
13 <p>В конце протокола клиент и сервер проверяют, действительно ли они получили одинаковое значение сессионного ключа K. Способов такой проверки может быть несколько, вот один из них:</p>
14 <p>Есть два значительных недостатка протокола SRP: - отсутствие доказательства стойкости протокола, следовательно нет внятно сформулированной проблемы для криптоанализа; - невозможность реализации протокола на эллиптических кривых.</p>
14 <p>Есть два значительных недостатка протокола SRP: - отсутствие доказательства стойкости протокола, следовательно нет внятно сформулированной проблемы для криптоанализа; - невозможность реализации протокола на эллиптических кривых.</p>
15 <p>Альтернативой протоколу SRP является более эффективный протокол<a>OPAQUE</a>. Несмотря на свои преимущества, протокол идёт в пакете с доказательством и адаптивен к эллиптическим кривым, OPAQUE не столь широко распространен, как SRP. Однако среди практиков безопасности сети<a>есть мнение</a>, что OPAQUE ничем не лучше существующих решений для веб серверов.</p>
15 <p>Альтернативой протоколу SRP является более эффективный протокол<a>OPAQUE</a>. Несмотря на свои преимущества, протокол идёт в пакете с доказательством и адаптивен к эллиптическим кривым, OPAQUE не столь широко распространен, как SRP. Однако среди практиков безопасности сети<a>есть мнение</a>, что OPAQUE ничем не лучше существующих решений для веб серверов.</p>
16 <p><em>На этом пока всё. Не забывайте оставлять свои комментарии!</em></p>
16 <p><em>На этом пока всё. Не забывайте оставлять свои комментарии!</em></p>
17  
17