Направо към съдържанието

Дифи-Хелман

от Уикипедия, свободната енциклопедия

Протоколът Дифи-Хелман (на английски: Diffie-Hellman) е асиметричен алгоритъм за криптиране. Патентът му важи от 1976 г. до 1997 г.

Позволява договарянето на сесиен ключ без изпращането му по несигурната връзка. Двете договарящи се страни избират 2 случайни прости числа, след което обменят ограничен обем от информация, така че всяка страна да може да изчисли общия ключ, без това да е възможно за трета, злонамерена страна. Ако обмяната на информация се подслушва тогава договорения общ ключ е компрометиран.

Илюстрация на идеята зад протокола Дифи-Хелман

Пример: Да кажем, че двете страни, които ще си кореспондират са Алис и Боб

  1. Алис и Боб се уговарят да използват като модул числото p = 23 за делене с остатък и числото g = 5 за основа (което е примитивен корен на модула 23).
  2. След това Алис избира едно целочислено число a = 6 и изпраща на Боб ключа A = ga mod p
    • A = 56 mod 23 = 8
  3. Боб също избира целочислено число b = 15 и изпраща на Алис ключа B = gb mod p
    • B = 515 mod 23 = 19
  4. Алис изчислява общият ключ s = Ba mod p
    • s = 196 mod 23 = 2
  5. Боб изчислява общият ключ s = Ab mod p
    • s = 815 mod 23 = 2

Така и двамата получиха един и същ общ ключ (т.е. числото 2).

Както Alice така и Bob достигнаха до една и съща стойност s, тъй като използваха един и същи модул mod p,

[1]

И по-специално,

Обърнете внимание, че a, b, и (gab mod p = gba mod p) се пазят в тайна. Всички други стойности – p, g, ga mod p, и gb mod p – се изпращат в открит вид. Щом веднъж Алис и Боб изчислят общият таен ключ те могат да го използват като криптиращ ключ, който е известен само на тях двамата и могат да си изпращат един на друг съобщения по един и същ открит комуникационен канал.

Разбира се, колкото са по-големи стойностите на числата a, b, и p толкова по сигурна ще бъде комуникацията между тях, така, че ще е необходимо да се направи този пример по-сигурен, тъй като в него има само 23 възможни резултата за n mod 23. Все пак, ако p е цяло просто число на най-малко 600 бита или цифри, тогава дори най-модерните бързи компютри не могат да намерят a като им са зададени само g, p и ga mod p. Този проблем се нарича проблем на дискретните логаритми. Изчисляването на ga mod p е известно като модулно експонентиране - modular exponentiation и може да бъде направено ефективно дори за големи числа.

Обърнете внимание, че g изобщо не е необходимо да бъде голямо число, а в практиката обикновено е малко цяло число (като например 2, 3, 0x10001, ...).

Графика на тайните

[редактиране | редактиране на кода]

Графиката по-долу показва кой какво знае, отново с не-секретните стойности за blue и секретните стойнисти за red. Тук Ева (Eve) е подслушващата—тя гледа и слуша какво се изпраща между Алис и Боб, но тя не променя съдържанието на комуникацията между тях.

  • g = публична база (просто число), известно на Алис, Боб и Ева. g = 5
  • p = публичен модул (просто число), известен на Алис, Боб и Ева. p = 23
  • a = Частният ключ на Алис (Alice's private key), известен само на Алис. a = 6
  • b = Частният ключ на Боб (Bob's private key) известен само на Боб. b = 15
  • A = Публичният ключ на Алис (Alice's public key), известен на Алис, Боб и Ева. A = ga mod p = 8
  • B = Публичният ключ на Боб (Bob's public key), известен на Алис, Боб и Ева. B = gb mod p = 19
Алис
Известни Неизвестни
p = 23
g = 5
a = 6 b
A = 5a mod 23
A = 56 mod 23 = 8
B = 19
s = Ba mod 23
s = 196 mod 23 = 2
s = 2
Боб
Известни Неизвестни
p = 23
g = 5
b = 15 a
B = 5b mod 23
B = 515 mod 23 = 19
A = 8
s = Ab mod 23
s = 815 mod 23 = 2
s = 2
Ева
Известни Незвестни
p = 23
g = 5
a, b
A = 8, B = 19
s = 19a mod 23 = 8b mod 23
s

Сега s е общо споделеният таен ключ и той е известен както на Алис така и на Боб, но не и на Ева.

Забележка: За Алис ще е трудно да реши кой е частният ключ на Боб или за Боб да намери кой е частният ключ на Алис. Ако не е трудно за Алис да намери частният ключ на Боб (или обратно), Ева просто може да подмени техните със своята двойка на частен/публичен ключ, като включи публичният ключ на Боб в своя частен ключ, като по този начин получи фалшив споделен таен ключ, и да намери частният ключ на Боб (и да го използва за да намери споделеният таен ключ). Ева може да се опита да избере двойка публичен / частен ключ която ще направи лесно откриването на частния ключ на Боб.)

Друга демонстрация на Дифи-Хелман (Diffie-Hellman) (също използва твърде малки числа с цел практическо използване) е показано тук Архив на оригинала от 2011-08-12 в Wayback Machine..[2]

  1. Garzia, F. Handbook of Communications Security. WIT Press, 2013. ISBN 1845647688. с. 182.
  2. Buchanan, Bill. Diffie-Hellman Example in ASP.NET. Посетен на 27 август 2015. Архив на оригинала от 2011-08-12 в Wayback Machine.
  Тази страница частично или изцяло представлява превод на страницата Diffie–Hellman key exchange в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​