первый я создал это ОЕ используя brainwallet ... от 1LoestmTyf96fLFf9Rfb4CZUGMsXtZGsok к 1EwGDERoz4W8Cyf3murUjcFq9kQhDsEWCM значного 0.00095143 BTC с 0,000001 платой BTC.
то я хочу, чтобы понять, как это ТЙ проверяются в математике ....
как описано в википедия чтобы проверить ECDSA подпись на этом этапе:
1. Убедитесь, что г и s являются целыми числами в [1, п-1]. Если нет, то подпись недействительна.
2. Вычислить е = HASH (м), где HASH та же функция, используемая при генерации подписи.
3. Пусть г будет LN Левые биты е.
4. Вычислить ш = з-1 мод п.
5. Вычислить u1 = г * ш по модулю п, u2 = г * ш по модулю п.
6. Вычислить точку кривой (x1, y1) = u1 * G + и2 * Qa.
6. подпись действительна, если г == x1 модулю п, недопустимый в противном случае.
мой сырой ТХ 01000000011575f1aacac4f66f9cfecd6ea1ef272e8cb5ce33f5ae97d1fcf02cec774a82e007000 0008b48304502204117f9f3173b915d03be6170d7af520bfa78d9d9fd35c829d974d3aaead09ae9 0221008a032016f639b730779945f7b5bedb3701a0645c1752c1b27fccc617019f172b014104ef0 9f65a570580ae9e33bea461b5d27bef90e521020f924c599a0d918f84c2781eb29f21d8985aefb9 19e1feccde73bea07edea0cd04b15e7c88a19e80df2dd0ffffffff01a7730100000000001976a91 498dccb66b17e1efb1f0d2bba0446502f2625444488ac00000000
как описано в Эта статья я начинаю вычислить сообщение (м) мои ТЙ поэтому мой неподписанные ТЕ 01000000011575f1aacac4f66f9cfecd6ea1ef272e8cb5ce33f5ae97d1fcf02cec774a82e007000 0001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488acffffffff01a7730100000000 001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488ac0000000001000000
Затем я вычислить хеш моего сообщения, как описано в Bitcoin вики должно быть двойное использование hashed..i питон, чтобы сделать это
котировка
# Двойной хэш-функций используется Bitcoin
импорт hashlib
м = "01000000011575f1aacac4f66f9cfecd6ea1ef272e8cb5ce33f5ae97d1fcf02cec774a82e007000 0001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488acffffffff01a7730100000000 001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488ac0000000001000000"
д = hashlib.sha256 ()
d2 = hashlib.sha256 ()
d.update (м)
d.hexdigest ()
d2.update (d.digest ())
е = d2.hexdigest ()
печать E
и в результате этого хэшаимпорт hashlib
м = "01000000011575f1aacac4f66f9cfecd6ea1ef272e8cb5ce33f5ae97d1fcf02cec774a82e007000 0001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488acffffffff01a7730100000000 001976a91498dccb66b17e1efb1f0d2bba0446502f2625444488ac0000000001000000"
д = hashlib.sha256 ()
d2 = hashlib.sha256 ()
d.update (м)
d.hexdigest ()
d2.update (d.digest ())
е = d2.hexdigest ()
печать E
котировка
4ebb9eb31e4a87591b66491308520e92679729d21e6e3197969a8dc463645fe7
Теперь я начинаю вычислять его с помощью sagemathкотировка
# R, S пара из подписанной сделки
г = 0x4ebb9eb31e4a87591b66491308520e92679729d21e6e3197969a8dc463645fe7
г = 0x4117f9f3173b915d03be6170d7af520bfa78d9d9fd35c829d974d3aaead09ae9
s = 0x8a032016f639b730779945f7b5bedb3701a0645c1752c1b27fccc617019f172b
# Проверка подписи
ш = мод (ы ^ -1, п)
u1 = моды ((г * и), п)
и2 = моды ((г * и), п)
# высчитывает
С = и1 * G + и2 * Qa
печать г
печать C.x
г = 0x4ebb9eb31e4a87591b66491308520e92679729d21e6e3197969a8dc463645fe7
г = 0x4117f9f3173b915d03be6170d7af520bfa78d9d9fd35c829d974d3aaead09ae9
s = 0x8a032016f639b730779945f7b5bedb3701a0645c1752c1b27fccc617019f172b
# Проверка подписи
ш = мод (ы ^ -1, п)
u1 = моды ((г * и), п)
и2 = моды ((г * и), п)
# высчитывает
С = и1 * G + и2 * Qa
печать г
печать C.x
и в результате ...
котировка
г = 134a083ace7ff01daa33b41000a1774755a8acaf58524caece273d97ea52323d
C.x = 4117f9f3173b915d03be6170d7af520bfa78d9d9fd35c829d974d3aaead09ae9
C.x = 4117f9f3173b915d03be6170d7af520bfa78d9d9fd35c829d974d3aaead09ae9
все это не то же самое, иначе подпись недействительна? !!!
или может быть я что-то потерять, так что мои вычисления ошибиться? !!
спасибо за помогает ....