이더리움 keystore에 대해서는 아래 한글과 영문자료로 우선 전체를 이해할 필요가 있다.
https://julien-maffre.medium.com/what-is-an-ethereum-keystore-file-86c8c5917b97
결국 둘다 같은 내용이다.
그러면 이 둘에 해당하는 key들을 직접 생성할 수 없을까?
linux에서 openssl정도로 가능한데, 아래 자세히 설명되어 있다.
https://kobl.one/blog/create-full-ethereum-keypair-and-address/
key생성하는 전체 코드(Complete example, linux가정)
# Generate the private and public keys
# openssl을 통해 타원곡선 사용해 개인키/공개키를 생성한다
> openssl ecparam -name secp256k1 -genkey -noout | openssl ec -text -noout > Key
# Extract the public key and remove the EC prefix 0x04
# Key에서 공개키를 추출하고 prefix를 제거한다
> cat Key | grep pub -A 5 | tail -n +2 | tr -d '\n[:space:]:' | sed 's/^04//' > pub
# Extract the private key and remove the leading zero byte
# Key에서 개인키를 추출하고 앞의 00 byte를 없앤다
> cat Key | grep priv -A 3 | tail -n +2 | tr -d '\n[:space:]:' | sed 's/^00//' > priv
# Generate the hash and take the address part
# 해쉬값을 생성해서 주소를 만들어 낸다
# linux에서는 $ git clone https://github.com/vkobel/ethereum-generate-wallet 한 후에 ethereum-generate-wallet/lib/x86-64/keccak-256sum을 활용한다
> cat pub | keccak-256sum -x -l | tr -d ' -' | tail -c 41 > address
*0xdcc703c0E500B653Ca82273B7BFAd8045D85a470 처럼 생긴 주소는 비어있는 공개키로 생성된 것이라 주의해야 한다.
재미있게도 이렇게 잘못 생성한 주소로 돈을 보낸 사람이 적지 않다. 여기서 볼 수 있다. etherscan
ex> $ touch empty; cat empty | keccak-256sum -x -l | tr -d ' -' | tail -c 41
# (Optional) import the private key to geth
# geth로 개인키를 가지고 실제 맞는지 검증해볼 수 있다
> geth account import priv
ex> $ ./geth --datadir "/Users/neibc/dev/geth/data2" --networkid 2125 account import prv #prv파일에 위 prv 저장 가정
출력되는 geth의 address가 상기의 생성한 address와 맞는지 확인한다.
마지막으로 또 재미있는 것은 0x7e5f4552091a69125d5dfcb7b8c2659029395bdf 라는 주소이다. 이 지갑주소는 private key가 알려져있다. 아래를 참조해보자. ( https://lsongnotes.wordpress.com/2018/04/30/manually-decrypting-ethereum-keystore-file/ )
Ex>
$ echo "0000000000000000000000000000000000000000000000000000000000000001" > plain_key1.txt
$ geth –datadir . account import plain_key1.txt
etc...
$ echo "3141592653589793238462643383279502884197169399375105820974944592" > plain_key2.txt
$ geth –datadir . account import plain_key2.txt
$ echo "2718281828459045235360287471352662497757247093699959574966967627" > plain_key3.txt
$ geth –datadir . account import plain_key3.txt
이렇게 하면 위 주소가 나온다. 신기하게도 누군가 이 계좌로 소액을 입금하고 있으며, 입금 즉시 곧바로 출금한다.
https://www.blockchain.com/eth/address/0x7e5f4552091a69125d5dfcb7b8c2659029395bdf
'블록체인' 카테고리의 다른 글
이더리움 geth를 사용하여 확인/송금 등을 script화 하자 (1) | 2021.08.06 |
---|---|
1조원이 묻힌 암호화폐 계좌를 확보할 수 있을까? 엔지니어를 위한 이더리움/비트코인 계좌 해킹 (0) | 2021.07.09 |
이더리움(ethereum) 서버 geth의 채굴을 gpu로 해보자 (0) | 2021.07.04 |
이더리움(ethereum) 서버인 geth를 private, 사설망으로 구성해보자(linux) (0) | 2021.07.04 |
이더리움(ethereum) 서버인 geth를 구동해보자 - linux, main net 모드 (0) | 2021.07.04 |