Крипточуваки - 36
Реалізація безпечного віддаленого пароля (SRP)
Щоб зрозуміти SRP, подивіться, як ви генеруєте ключ AES з DH; Тепер просто спостерігайте, що ви можете виконати “протилежну” операцію та створити числовий параметр із хешу. Потім:
Замініть A і B на C і S (клієнт і сервер)
C і S
Домовтеся про N=[Просте число від NIST], g=2, k=3, I (email), P (пароль)
S
- Згенеруйте сіль як випадкове ціле число
-
Згенеруйте рядок xH=SHA256(сіль пароль) - Перетворіть xH на ціле число x (поставте 0x у hexdigest)
- Згенеруйте v=g**x % N
- Зберегти увсе окрім x, xH
C->S
Надіслати I, A=g**a % N (а-ля Діффі Хеллман)
S->C
Надішліть сіль, B=kv + g**b % N
S, C
Обчислити рядок uH = SHA256(A | B), u = ціле від uH |
C
-
Згенерувати рядок xH=SHA256(сіль пароль) - Перетворіть xH на ціле число x (поставте 0x у hexdigest)
- Згенеруйте S = (B - k * gx)(a + u * x) % N
- Створити K = SHA256(S)
С
- Згенеруйте S = (A * v**u) ** b % N
- Створити K = SHA256(S)
C->S
Надіслати HMAC-SHA256(K, сіль)
S->C
Надішліть “OK”, якщо HMAC-SHA256(K, сіль) перевірено
Ви захочете зробити це на якомусь REPL; може знадобитися кілька спроб.
Немає значення, як ви переходите від цілого до рядка або від рядка до цілого (де все відбувається в SHA256 або з нього), якщо ви робите це однаковим чином. Я тестував, використовуючи десяткове представлення цілих чисел ASCII як вхідні дані для SHA256 і перетворюючи шістнадцятковий дайджест на ціле число під час обробки його виводу.
По суті, це Діффі Хеллман із налаштуванням змішування пароля з відкритими ключами. Сервер також робить додатковий крок, щоб уникнути зберігання еквівалента пароля, який легко зламати.