SRP: протокол безопасной удалённой аутентификации по паролю
Разберитесь, как SRP позволяет клиенту и серверу взаимно аутентифицироваться без хранения паролей на сервере
«SRP: протокол безопасной удалённой аутентификации по паролю» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Обзор и история SRP
Протокол безопасного удалённого пароля (SRP) был разработан Томом Ву в Стэнфордском университете и опубликован в виде RFC 2945 в 2000 году. Позднее была определена улучшенная версия SRP-6a. SRP обеспечивает взаимную аутентификацию на основе общего пароля, не передавая сам пароль даже в зашифрованном виде.
Сервер хранит проверочное значение, а не пароль
Во время регистрации в SRP клиент вычисляет проверочное значение v = g^x mod N, где x = H(соль || пароль), а N — большое безопасное простое число. Сервер хранит только соль и проверочное значение v. Даже если база данных сервера будет скомпрометирована, сохранённое проверочное значение не раскрывает пароль напрямую.
Формирование ключа сеанса SRP
Во время входа в SRP клиент и сервер выполняют обмен, подобный обмену Диффи—Хеллмана, в результате которого формируется общий ключ сеанса. Вычисления с обеих сторон используют значение, полученное из пароля, поэтому правильно вычислить итоговый ключ сеанса могут только клиент, знающий пароль, и сервер, располагающий соответствующим проверочным значением.
Взаимная аутентификация в SRP
SRP обеспечивает взаимную аутентификацию: клиент доказывает, что знает пароль, а сервер доказывает, что располагает подлинным проверочным значением. Это предотвращает фишинговые атаки, при которых поддельный сервер пытается получить сведения о пароле, поскольку без настоящего проверочного значения поддельный сервер не сможет правильно завершить обмен SRP.
Вычисление проверочного значения
Проверочное значение вычисляется как v = g^x mod N, где x = H(соль || пароль), g — образующий элемент, а N — безопасное простое число размером 2048 бит или больше. Задача дискретного логарифмирования делает вычислительно невыполнимым восстановление x из v. Проверить пароль можно только успешно завершив полный обмен SRP.
Улучшения SRP-6a
SRP-6a устраняет недостатки исходных вариантов SRP-3 и SRP-6: в нём введён множитель k = H(N, g) и изменён порядок вычислений на стороне клиента и сервера. Эти изменения предотвращают некоторые атаки угадывания с двойной выгодой и обеспечивают раннюю привязку вклада сервера к протоколу.
SRP в рабочих системах
SRP получил широкое практическое применение. Apple использует SRP при синхронизации связки ключей iCloud, позволяя устройствам получать данные связки ключей без раскрытия пароля учётной записи серверам Apple. 1Password использовал SRP в своей модели аутентификации, чтобы предотвратить раскрытие учётных данных на стороне сервера.
SRP предотвращает фишинг
Поскольку SRP формирует ключ сеанса, связывающий пароль и проверочное значение сервера, фишинговый сервер не может правильно завершить рукопожатие SRP. При подключении пользователя к фишинговому сайту через SRP аутентификация завершится неудачей. Это обеспечивает встроенную защиту от фишинга, которой нет при традиционной передаче пароля.
Ограничения SRP
SRP требует значительных вычислительных ресурсов, поскольку использует модульное возведение в степень для больших целых чисел (2048 бит и более). Его сложно правильно реализовать: многочисленные тонкости проверки параметров уже приводили к уязвимостям реализаций. Кроме того, протокол требует защищённого канала (TLS), чтобы предотвратить пассивное прослушивание самого обмена.
Наборы шифров TLS-SRP
RFC 5054 определяет наборы шифров TLS-SRP, которые встраивают взаимную аутентификацию SRP непосредственно в рукопожатие TLS. Это устраняет необходимость в сертификатах сервера, сохраняя зашифрованную взаимную аутентификацию. Однако на практике TLS-SRP получил ограниченное распространение, поскольку появились более современные альтернативы — FIDO2 и OPAQUE.
SRP и современные альтернативы
Хотя SRP стал революционным решением, современные альтернативы, такие как OPAQUE, обеспечивают более сильные гарантии безопасности (устойчивость к предварительным вычислениям), а FIDO2 и ключи доступа полностью устраняют пароли. Для новых систем предпочтительны OPAQUE или FIDO2, но SRP остаётся допустимым выбором для систем, которым нужна парольная взаимная аутентификация без уязвимости к фишингу.
Проверка проверочного значения SRP
Что хранит сервер в SRP вместо пароля пользователя?
Итоги урока: аутентификация SRP
SRP хранит проверочное значение пароля, а не сам пароль, формирует общий ключ сеанса посредством обмена, подобного DH, и обеспечивает устойчивую к фишингу взаимную аутентификацию. SRP-6a улучшает исходный протокол, повышая устойчивость к атакам угадывания. Связка ключей iCloud от Apple и 1Password используют SRP в рабочих системах. Для новых систем современными преемниками считаются OPAQUE и FIDO2.
Часто задаваемые вопросы
Урок «SRP: протокол безопасной удалённой аутентификации по паролю» бесплатный?
Да — полный текст урока «SRP: протокол безопасной удалённой аутентификации по паролю» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «SRP: протокол безопасной удалённой аутентификации по паролю»?
Разберитесь, как SRP позволяет клиенту и серверу взаимно аутентифицироваться без хранения паролей на сервере Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «SRP: протокол безопасной удалённой аутентификации по паролю»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Фундаментальная проблема аутентификации по паролю
- SRP: протокол безопасной удалённой аутентификации по паролю
- Протоколы PAKE и их свойства
- Аутентификация без пароля: WebAuthn и FIDO2