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

in #kr6 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

(이상)

Sort:  

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

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