Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритм RSA.doc
Скачиваний:
22
Добавлен:
27.10.2018
Размер:
453.12 Кб
Скачать

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

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

  • q и N = 2q + 1 выбираются так, что N и q простые. N должно быть достаточно большим, чтобы дискретное логарифмирование по модулю N было практически неосуществимо.

  • Вся арифметика выполняется по модулю N (поле ).

  • g — генератор мультипликативной группы 

  • k — параметр, получаемый на обоих сторонах, например, k = H(Ng) в ревизии 6а (в ревизии 6 k было постоянным и равно 3).

  • s — соль

  • I — идентификатор пользователя в системе сервера (username).

  • p — пароль пользователя, соответствующий I.

  • H() — криптографическая хеш-функция, например, SHA-256

  • x — секретный ключ, x = H(sp).

  • v — верификатор пароля на стороне сервера, v = gx.

  • u — произвольный параметр для кодирования.

  • a,b — секретные одноразовые числа

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

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

  • x = H(sp) (s выбирается произвольным образом)

  • v = gx (вычисление верификатора пароля)

После этого сервер хранит пару (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-responce), где обмен происходит так:

  • Клиент — Сервер: username+r, где r — произвольный текст

  • Сервер — Клиент: с, где с — произвольный текст (challenge)

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

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

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

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

  3. Модификация обладает свойствами 1 и 2 за счет введения дополнительного раунда обмена ключами, однако претерпевает сильную потерю в производительности из-за значительных дополнительных вычислений.

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