이더리움 계정, address/private-key/public-key의 관계

in kr •  7 years ago 

이더리움 계정과 익명성 보장

  • 이더리움 계정은 한번 쓰고 버리는 것
  • 트랜잭션마다 새로운 계정을 생성/사용하는 것이 권장사항 (이더리움 계정은 이메일 계정처럼 오래 유지하는 것이 아님)
  • 트랜잭션마다 새로운 계정을 사용함으로써 익명성을 보장할 수 있음

이더리움 계정 생성 방법 (account address/private-key/public-key의 관계)

계정주소 생성 절차

  • private-key 생성 (32byte, hex 인코딩할 경우 64byte)
    • Elliptic-Curve 암호 체계 사용 (secp256k1 커브가 이더리움 표준)
  • 생성된 private-key로부터 public-key 유도 (64byte, hex 인코딩할 경우 128byte)
  • 유도한 public-key로부터 계정주소 유도 (20byte, hex 인코딩할 경우 40byte)
    • public-key에 keccak-256 hash 적용
    • 계산된 hash 값의 하위 20byte를 이더리움 계정주소로 사용
  • 참고자료: https://kobl.one/blog/create-full-ethereum-keypair-and-address/
    # Generate the private and public keys
    > openssl ecparam -name secp256k1 -genkey -noout | 
      openssl ec -text -noout > Key
    
    # Extract the public key and remove the EC prefix 0x04
    > 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
    > 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
    > cat pub | keccak-256sum -x -l | tr -d ' -' | tail -c 41 > address
    
    # (Optional) import the private key to geth
    > geth account import priv
    

시사점

  • 누구나 쉽게 계정주소를 만들 수 있다 (계정주소를 만들고 검증하는 center authority가 없다)

Q&A

TX 검증을 위한 public-key 확보 방법?

TX 변조 가능성?

  • Q: 윗 질문에서 signature로부터 public-key를 얻을 수 있다면, 제 3자가 TX를 가로채서 자기 TX인 것처럼 위장할 수 있다 (자기 private-key로 서명하고, 자기 public-key와 함께 TX를 배포). 보안측면에서 문제 없는가?
  • A: 제 3자가 TX 송신자인 척하는 것은 가능.
    • 하지만, TX는 송신자의 ETH를 수신자에게 이체하는 것
    • 그리고 TX 송신자는 이더리움 gas fee도 지불해야 함
    • 제 3자가 TX 송신자인 것처럼 위장해서 얻을 수 있는 이득이 없음 (반론 환영)

ref

(이상)

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

요점정리네요!! 리스팀 해놓고 공부해야겠네요 :)

'geth 소스 읽기' 연재 잘 보고 있습니다. 항상 감사드립니다. ^^