Классная статья, лучше всех, которые довелось видеть до этой! После НГ надо обязательно внимательно прочесть.
а если приватный ключ равен 2^256?
Это число не подходит для приватного ключа. Приватный ключ должен быть меньше порядка группы n. Для secp256k1 n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141, что меньше чем 2
256.
ок, 2 в 255. Что тогда? Ты же понимаешь что не может быть вычислений такого количества. Я собсно все в первом посте это написал, и как я понимаю, ты тоже не знаешь как считается точка.
Умножение базовой точки на закрытый ключ сводится к сложению базовой точки, результатов удвоения базовой точки, последующих удвоений удвоения и т.д.
Удвоение - это, в свою очередь, просто сложение точки с самой собой.
В итоге, любое умножение сводится к определённому количеству сложений (базовой точки и результатов сложения).
Например (аналогично смотрите в статье), 23 * G = 2^4 * G + 2^2 * G + 2^1 * G + 1 * G = G4 + G2 + G1 + G0, где
G4 = G3 + G3 (G3 = G2 + G2), G2 = G1 + G1, G1 = G0 + G0, G0 = G.
Теперь, почему полученные числа не превысят значений больше 78 разрядов, смотрите раздел "Поле целых чисел по модулю p".
Сложение на эллиптических кривых - это не просто привычное для всех арифметическое сложение. Здесь сложение определяется пересечением кривой y^2 = x^3 + 7 прямой линией, используя замечательное свойство кривой: любая прямая (не вертикальная), пересекающая кривую в двух точках, всегда будет пересекать ее и в третьей точке (за исключением касательной, которая пересечёт её ровно в ещё одной точке).
О сложении смотрите разделы "Геометрическое сложение" и "Алгебраическое сложение".
Публичный ключ - это произведение базовой точки и приватного ключа. Для ключа = 1 получаем базовую точку:
x = 79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 (dec = 55066263022277343669578718895168534326250603453777594175500187360389116729240)
y = 483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 (dec = 32670510020758816978083085130507043184471273380659243275938904335757337482424)
Чтобы умножить базовую точку на ключ = 2^255, нужно всего-навсего 255 раз провести операцию удвоения (сложения с самой собой), начиная со сложения базовой точки G. Это любому компьютеру сделать под силу за доли секунды.