Почему SRP не является эквивалентом открытого текста? - PullRequest
3 голосов
/ 28 декабря 2010

О протоколе SRP: http://en.wikipedia.org/wiki/Secure_remote_password_protocol

Я вижу, что генерация сеансового ключа (K) совершенно безопасна, но на последнем этапе пользователь отправляет подтверждение K (M). Если сеть небезопасна и злоумышленник в средней части захватывает M, он сможет пройти аутентификацию, не имея K. верно?

Ответы [ 2 ]

12 голосов
/ 29 декабря 2010

немного фона

Хорошо известные значения (установлены заранее):

  n    A large prime number. All computations are performed modulo n.
  g    A primitive root modulo n (often called a generator).

Пароль пользователя устанавливается как:

x = H(s, P)
v = g^x 

  H()  One-way hash function
  s    A random string used as the user's salt
  P    The user's password
  x    A private key derived from the password and salt
  v    The host's password verifier

Аутентификация:

+---+------------------------+--------------+----------------------+
|   | Alice                  | Public Wire  | Bob                  |
+---+------------------------+--------------+----------------------+
| 1 |                        |        C --> | (lookup s, v)        |
| 2 | x = H(s, P)            | <-- s        |                      |
| 3 | A = g^a                |        A --> |                      |
| 4 |                        | <-- B, u     | B = v + g^b          |
| 5 | S = (B - g^x)^(a + ux) |              | S = (A · v^u)^b      |
| 6 | K = H(S)               |              | K = H(S)             |
| 7 | M[1] = H(A, B, K)      |     M[1] --> | (verify M[1])        |
| 8 | (verify M[2])          | <-- M[2]     | M[2] = H(A, M[1], K) |
+---+------------------------+--------------+----------------------+

    u    Random scrambling parameter, publicly revealed
  a,b    Ephemeral private keys, generated randomly and not publicly revealed
  A,B    Corresponding public keys
  m,n    The two quantities (strings) m and n concatenated
    S    Calculated exponential value 
    K    Session key

Ответ на ваш вопрос:

Как видите, обе стороны рассчитывают K (= ключ сеанса) отдельно, основываясь на значениях, доступных для каждого из них.
Если пароль Алисы P, введенный на шаге 2, совпадает с паролем, который она первоначально использовала для генерации v, тогда оба значения S будут совпадать.

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

0 голосов
/ 28 декабря 2010

Доказательство действительно только для определенного К.

Без MITM:

Alice <-K-> Bob

Алиса выдает доказательство для К, и Боб принимает его

С MITM:

Alice <-K1-> Eve <-K2-> Bob

Алиса создает доказательство для К1, но когда Ева представляет его Бобу, он не принимает его, потому что оно не соответствует К2.

...