srp


Предыдущая | Следующая

Secure Remote Password Protocol (SRPP) — протокол парольной аутентификации, устойчивый к прослушиванию и MITM-атаке и не требующий третьей доверенной стороны. SRP содержит некоторые элементы из других протоколов обмена ключами и идентификации, при этом вносит небольшие усовершенствования и уточнения. Протокол сохраняет стойкость и эффективность протоколов класса Encrypted key exchange (англ.)русск., при этом избавляясь от некоторых их недостатков.

Содержание

Обзор

Протокол SRP позволяет пользователю идентифицировать себя на сервере, при этом не передавая своего пароля, то есть подтвердить тот факт, что он знает свой пароль, и только этот факт. Он имеет ряд полезных качеств:

SRP эффективно реализует Доказательство с нулевым разглашением между пользователем и сервером, хранящим информацию о его пароле. При прослушивании за один раз злоумышленником может быть проверена только одна версия пароля, начиная с версии 6 данного протокола. Данный протокол имеет много ревизий, на данный момент последняя ревизия — 6a.

В результате работы данного протокола обе стороны получают длинный секретный ключ, проверяемый на соответствие между сторонами после получения. В случаях, когда помимо аутентификации необходимо шифрование данных, SRP предоставляет более надёжные, чем SSH, и более быстрые, чем Diffie-Hellman, средства для достижения этой цели. Протокол SRP версии 3 описывается в RFC 2945. SRP версии 6 также используется для аутентификации в SSL/TLS и других стандартах, таких как EAP и SAML, и в данный момент стандартизуется IEEE P1363 и ISO/IEC 11770-4.

Принцип работы

Введем обозначения, необходимые для рассуждения:

Понятия пароля и верификатора соответствуют общепринятым понятиям секретного и открытого ключей, с двумя оговорками: пароль, как правило, меньше секретного ключа, так как его помнит пользователь, а память у него небольшого размера; в свою очередь, верификатор по математическим свойствам схож с открытым ключом, так как он легко получается из пароля, а обратная операция является вычислительно неразрешимой. Однако вместо того, чтобы быть общеизвестным, верификатор хранится сервером в тайне. Способ аутентификации, который предполагает хранение сервером верификатора, но не пароля, называется основанным на верификации (verifier-based).

Из исходных параметров вычисляются A,B (см. ниже). Сервер хранит пароли, используя следующую формулу:

После этого сервер хранит пару (Isv) в своей базе данных. Аутентификация происходит по следующей схеме:

  1. Клиент -> Сервер: IA = ga (идентифицируется, a — произвольное)
  2. Сервер -> Клиент: sB = kv + gb (посылает сохраненное s, произвольное b)

На обеих сторонах: u = H(AB)

На стороне клиента:

  1. x = H(sp) (пользователь вводит пароль)
  2. S = (B — kgx)(a + ux) (вычисляется ключ сессии)
  3. K = H(S) (K — это искомый ключ для шифрования)

На стороне сервера:

  1. S = (Avu)b (вычисление ключа сессии)
  2. K = H(S) (K — это искомый ключ для шифрования)

Теперь обе стороны имеют общий секретный ключ K. Для завершения аутентификации, им необходимо свериться, что их ключи совпадают. Один из возможных способов:

Клиент -> Сервер: M = H(H(N) xor H(g), H(I), sABK) и проверка на стороне сервера

Сервер -> Клиент: H(AMK) и проверка на стороне клиента

Сравнение с некоторыми типами алгоритмов

Речь пойдет о простых типах алгоритмов аутентификации и их уязвимостях в сравнении с данным, что покажет преимущества SRP.

Самый простой способ аутентификации — передача незашифрованного пароля от клиента к серверу, после чего сервер сравнивает полученный пароль или его хеш с элементом базы данных. Очевидный недостаток — уязвимость для прослушивания.

Модифицируя первый алгоритм, получаем аутентификацию с запросом и подтверждением (challenge-response), где обмен происходит так:

после этого клиент вычисляет хеш от трех величин: r, c, password, и посылает его обратно. Данный метод уязвим для перебора, так как злоумышленник, имея r, c, hash, может подобрать пароль клиента.

Анализируя первые два алгоритма, можно прийти к третьему, который защищен и от перебора по словарю. Семейство таких протоколов называется Encrypted key exchange (англ.)русск. (EKE). Суть этого алгоритма в том, что обе стороны генерируют свои открытые ключи для асимметричного шифрования, и обмениваются ими с помощью симметричного алгоритма, используя известный обоим пароль пользователя как ключ. Данное семейство протоколов имеет широкое распространение, с разными реализованными модификациями, добавляющими некоторые свойства:

  1. При получении пароля злоумышленник не может расшифровать обмен данными, который уже состоялся, либо при получении сессионного ключа какого-либо сеанса он не может узнать пароль пользователя (даже полным перебором), однако, по-прежнему, на сервере хранится аналог открытого текста пароля, который может быть украден для получения собственно пароля (например, DH-EKE, SPEKE).
  2. При получении информации из базы данных сервера, злоумышленник не может получить из них пароль, но теряется предыдущее свойство(например, A-EKE).
  3. Модификация обладает свойствами 1 и 2 за счет введения дополнительного раунда обмена ключами, однако претерпевает сильную потерю в производительности из-за значительных дополнительных вычислений.

Для того, чтобы избежать всех указанных уязвимостей и получить алгоритм с хорошей скоростью работы, была разработана концепция AKE (Asymmetric key exchange), отличающаяся от предыдущих прежде всего тем, что при передаче данных отсутствует всякое шифрование, которое избавляет систему от ненужных затрат вычислительной мощности и возможных уязвимостей определенных алгоритмов шифрования. Одной из реализаций AKE и является SRP.