logo search
Алгоритм RSA

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

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

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