Протокол Диффи-Хеллмана почему у меня Ева подбирает ключ (Python3)? Привет! решил разобраться с Протоколом Диффи-Хеллмана и попутно накидал его на Пайтоне. Только вот загвоздка, почему у меня в качестве шпиёна Евы получается подобрать ключ ну например Алисы?g = 3 p = 7334832323 a = 15 b = 30 # функция для получения AB def crypt_dh(g,p,ab): result = g**ab % p return result A = crypt_dh(g,p,a) B = crypt_dh(g,p,b) # секретные ключиАлисы и Боба k_Alice = B**a % p k_Bob = A**b % p print('Alice Key: ', k_Alice) print('Bob Key: ', k_Bob) # Ева знает g,p,A,B def encrypt(g,p,AB,k_Name): encryption = 'Fail' for key in range(1000): result = AB**key % p if result == k_Name: encryption = A**key % p return encryption # Результат шпиона k_Eva = encrypt(g,p,A,k_Alice) print('Eva Key: ', k_Eva) Результат: Alice Key: 5283143412 Bob Key: 5283143412 Eva Key 5283143412
Проблема состоит в том, что функция encrypt, которую вы написали, подбирает ключ, используя перебор значений от 0 до 999.
Если мы посмотрим на логику вашей функции encrypt, вы верно проверяете, что AB возводится в степень key по модулю p равно ключу k_Name, и затем используете это значение для вычисления ключа A по степени key по модулю p.
Однако, когда вы позволяете key перебирать значения от 0 до 999, это дает возможность Еве найти точно такой же ключ, как у Алисы или Боба, что и видно в вашем случае.
Чтобы сделать протокол безопасным от таких атак, стоит использовать большие значения для параметров p и g, а также выбирать абсолютно случайные значения для секретных ключей a и b.
Также цикл в вашей функции encrypt можно модифицировать, чтобы сканировать весь возможный диапазон значений, а не только от 0 до 999.
В целом, Протокол Диффи-Хеллмана является открытым ключевым алгоритмом и может быть уязвим к атакам, если не выполнять соответствующие меры безопасности.
Проблема состоит в том, что функция encrypt, которую вы написали, подбирает ключ, используя перебор значений от 0 до 999.
Если мы посмотрим на логику вашей функции encrypt, вы верно проверяете, что AB возводится в степень key по модулю p равно ключу k_Name, и затем используете это значение для вычисления ключа A по степени key по модулю p.
Однако, когда вы позволяете key перебирать значения от 0 до 999, это дает возможность Еве найти точно такой же ключ, как у Алисы или Боба, что и видно в вашем случае.
Чтобы сделать протокол безопасным от таких атак, стоит использовать большие значения для параметров p и g, а также выбирать абсолютно случайные значения для секретных ключей a и b.
Также цикл в вашей функции encrypt можно модифицировать, чтобы сканировать весь возможный диапазон значений, а не только от 0 до 999.
В целом, Протокол Диффи-Хеллмана является открытым ключевым алгоритмом и может быть уязвим к атакам, если не выполнять соответствующие меры безопасности.