Diffie-Hellman (UA)
ЩО ЦЕ ТАКЕ
Протокол Діффі-Хеллмана (DH) — це не шифрування. Це протокол узгодження спільного секрету. Двоє людей через відкритий канал, де все видно, домовляються про спільний ключ — і жоден перехоплювач цей ключ не отримає.
Після того як ключ узгоджено, його використовують для симетричного шифрування (наприклад AES). DH сам нічого не шифрує — він вирішує задачу безпечної доставки ключа.
Придумали Вітфілд Діффі та Мартін Хеллман у 1976 році — за рік до публікації RSA.
АЛГОРИТМ
Публічно домовляєтесь про два числа: просте
pі генераторg(первісний корінь за mod p)Аліса генерує приватний ключ
a(випадковий, 2 ≤ a ≤ p−2)Боб генерує приватний ключ
b(випадковий, 2 ≤ b ≤ p−2)Аліса рахує
A = g^a mod pі відправляє БобуБоб рахує
B = g^b mod pі відправляє АлісіАліса рахує
K = B^a mod pБоб рахує
K = A^b mod pОбидва отримали однаковий
K = g^(ab) mod p— це і є спільний ключ
Відкрито: g, p, A, B
Секретно: a, b, K
МАТЕМАТИКА
Чому K збігається
Це чиста властивість степенів:
K=Bamodp=(gb)amodp=gabmodp
K=Abmodp=(ga)bmodp=gabmodp
Результат однаковий бо (g^b)^a = (g^a)^b = g^(ab). Порядок піднесення до степеня не має значення.
Криптостійкість — задача дискретного логарифму
Перехоплювач бачить g, p, A, B. Щоб отримати K йому треба знайти або a з A = g^a mod p, або b з B = g^b mod p.
Ця задача називається задачею дискретного логарифму — аналог факторизації з RSA. В одну сторону рахується миттєво, у зворотну — практично неможливо.
В RSA пасткова операція — множення двох великих простих (факторизація). В DH — модульне піднесення до степеня (дискретний логарифм). Принцип той самий: в одну сторону дешево, у зворотну — нескінченно дорого.
При p розміром 2048+ біт перебір усіх можливих a займе надзвичайно багато часу.
Первісний корінь і чому він важливий
g повинне бути первісним коренем за модулем p — тобто його степені g^1, g^2, ..., g^(p-1) мають породжувати всі числа від 1 до p−1.
Наприклад, p = 7, g = 3:
Якщо g не є первісним коренем — його степені покривають лише частину можливих значень, простір ключів K стає малим і перебір стає реальним.
Нагадування з RSA: первісний корінь — це число, порядок якого рівно p−1. Воно проходить увесь цикл Ейлера не зациклюючись раніше.
Forward Secrecy — головна перевага над RSA
RSA шифрує одним довготривалим приватним ключем. Якщо через рік цей ключ витече — весь записаний раніше трафік можна розшифрувати.
DH генерує нові a і b для кожної сесії і одразу знищує їх після отримання K. Навіть маючи всі ключі — старий трафік не розшифрувати, бо a і b вже не існують. Це і є forward secrecy.
СЛАБКЕ МІСЦЕ — MitM
Базовий DH не автентифікує учасників. Якщо між Алісою і Бобом сидить Єва:
Єва встановлює окремий DH з Алісою і окремий з Бобом. Обидва думають що говорять один з одним. Математика ідеальна — але вона не говорить тобі хто надіслав B.
Тому DH у чистому вигляді не використовується. У TLS він комбінується з цифровими підписами (RSA або ECDSA) — щоб довести що публічне значення справді від легітимної сторони.
Last updated