Итак, чтобы получить пару биткоин ключей (приватный + публичный), алгоритм будет следующий:
1. Придумываем любое 256-битное число. Это и будет приватный ключ.
2. Умножаем приватный ключ на магическую константу G которая на самом деле вектор с координатами
x= 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
y= 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
G*приватный_ключ = публичный ключ.
Теперь остается вопрос: как это умножение устроено?
Понятно, что
G*приватный_ключ = G+G+G+... (сложить столько раз, скольки равен приватный_ключ)
G*1 = G (по определению единицы)
Осталось понять: как вычислить хотя бы
G*2 = G+G
Эти функции являются односторонней функцией, которая означает, что если
a = function (b), то нет практического способа найти
b, если вы знаете
a.
и нет практического способа получить
private_key из
public_key.