Diffie-Hellman

Diffie-Hellman

Легка

Вказівки

Обмін ключами Діффі-Геллмана.

Alice і Bob використовують обмін ключами Діффі-Геллмана, щоб ділитися секретами. Вони починають із простих чисел, обирають приватні ключі, генерують і обмінюються відкритими ключами, а потім генерують спільний секретний ключ.

Крок 0

Тестова програма надає прості числа p і g.

Крок 1

Alice обирає приватний ключ a, більший за 1 і менший за p. Bob робить те саме й обирає приватний ключ b.

Крок 2

Alice обчислює відкритий ключ A.

A = gᵃ mod p

Використовуючи ті самі p і g, Bob так само обчислює відкритий ключ B зі свого приватного ключа b.

Крок 3

Alice і Bob обмінюються відкритими ключами. Alice обчислює секретний ключ s.

s = Bᵃ mod p

Bob обчислює

s = Aᵇ mod p

Обчислення дають той самий результат! Тепер Alice і Bob мають спільний секрет s.

Використовувати random чи secrets?

Починаючи з Python 3.6, існує два різні модулі для отримання «випадкових» чисел:

Модуль random є псевдовипадковим: він не генерує справжньої випадковості, а працює за алгоритмом, який імітує випадковість. Оскільки ці «випадкові числа» утворюються за відомим алгоритмом, вони не є по-справжньому випадковими. Як наслідок, модуль random не годиться для криптографії і його не варто використовувати, саме тому, що він псевдовипадковий.

Модуль secrets генерує криптографічно стійкі «випадкові» числа, які забезпечують вищий рівень безпеки, потрібний для криптографії. У найстрогішому сенсі вони теж псевдовипадкові, але вони гарантують, що утворені ними числа абсолютно непередбачувані.

Оскільки це лише практична вправа, використовувати модуль random цілком прийнятно, але зауважмо, що для справжньої криптографії він був би дуже незахищеним.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Diffie-Hellman?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.