‘마스터링 이더리움’ 세미나 3-2 – 4장. 암호학

이번 세미나에서는 ‘4장. 암호학’을 다룹니다. 이 세미나에 참석하는 참여자들은 이미 Mastering Bitcoin 2nd, Programming Bitcoin 세미나를 거쳤기 때문에 이번 세미나는 복습이라고 생각하면 됩니다.

 

빠르게 본문 내용을 읽습니다. 타원곡선 암호화 부분과 클라이언트 주소 상호교환 프로토클은 건너 뛰어도 됩니다.

 

아래 인용한 본문 내용들과 요약 내용들을 주의해서 다시 한 번 읽어 봅니다.

 

  • 디지털 개인키, 이더리움 주소, 디지털 서명을 통해 외부 소유 계정의 이더 소유권을 확립한다.
    • 주소는 계정을 의미하는 것으로 누가 소유권을 갖고 있는지를 나타냅니다.
    • 개인키로 생성된 디지털 서명을 통해 자금의 접근과 통제가 이루어진다.
      • 개인키는 실제적인 소유권 행사를 할 수 있음을 나타냅니다.
      • 디지털 서명으로 소유권 있음을 증명합니다.
  • 이더리움 프로토콜에는 암호화가 없기 때문에, 개인키는 트랜잭션 인증을 위한 디지털 서명을 만드는 데에만 사용한다.
  • 디지털 서명을 만들어 모든 메시지에 서명할 수 있다. 이더리움 트랜잭션에서는 트랜잭션 자체의 세부사항이 메시지로 사용된다.
    • Note that an Ethereum transaction is basically a request to access a particular account with a particular Ethereum address. When a transaction is sent to the Ethereum network in order to move funds or interact with smart contracts, it needs to be sent with a digital signature created with the private key corresponding to the Ethereum address in question.
  • 이더리움에서는 개인키로 이더 뿐만 아니라  컨트랙트에 대한 접근과 통제 또한 이루어짐에 주의합니다.
  • 이더리움은 압축되지 않은 공개키만을 사용한다.

 

해시 함수의 주요 속성

  • 결정론(determinism)
    • 주어진 입력 메시지는 항상 동일한 해시 결과를 생성한다.
  • 검증성(verifiability)
    • 메시지의 해시 계산은 효율적이다(선형 복잡성).
  • 비상관성(noncorrelation)
    • 메시지에 대한 작은 변화는 해시 출력을 너무 광범위하게 변경해야 해서 원본 메시지의 해시와 상관 관계가 없다.
  • 비가역성(irreversibility)
    • 해시로부터 메시지 계산하는 것은 불가능하다. 모든 가능한 메시지에 대한 무차별 검색과 같다.
  • 충돌 방지(collision protection)
    • 같은 해시 결과를 생성하는 2개의 서로 다른 메시지를 계산하는 것은 불가능하다.
    • 해시 충돌에 대한 저항은 특히 이더리움에서 디지털 서명 위조를 피하기 위해 중요하다.

 

  • 이더리움 주소는 16진수이며, 공개키 keccak-256 해시의 마지막 20바이트에서 파생한 식별자다.
  • 이더리움 주소는 keccak-256 단방향 해시 함수를 사용하는 공개키 또는 컨트랙트에서 파생한 고유 식별자다. 접두어 없어 공개키의 x, y를 연결한 것을 해시 함수의 입력으로 사용한다. 해시 결과의 최하위 20바이트 만을 사용하여 접두어 0x를 더하여 16진수로 표현한다.
  • 이더리움 주소는 체크섬이 없는 원시 16진수로 표시한다.
    • EIP-55는 16진수 주소의 대소문자를 수정하여 이더리움 주소에 대해 이전 버전과 호환되는 체크섬을 제공한다. 이전 버전과 호환되기 위해서는 이더리움 주소는 대소문자를 구분하지 않으며, 모든 지갑은 해석의 차이 없이 대문자 또는 소문자로 표현된 이더리움 주소를수용해야 한다는 것이다.

 

EIP-55 구현 방법

  1. 0x 접두어 없이 소문자 주소를 해시 처리한다.
  2. 해시의 16진수가 0x8 이상인 경우 각 알파벳 문자를 대문자로 만들어라. 주소와 해시를 정렬하면 표시하기가 더 쉽다.

 

주소가 20바이트이니까 해시도 20바이트만 사용하면 됩니다.

‘우리 주소에서’로 시작하는 번역 오류가 있습니다. 잘못된 부분을 정정하면 다음과 같습니다.

주소의 네 번째는 d이고, 해시의 네 번째는 6입니다. 6은 8보다 작으므로 d는 소문자 그대로 사용합니다. 주소의 여섯 번째는 f이고, 해시의 여섯 번째는 c로 8보다 크기 때문에 F로 바꿉니다.

지갑 주소가 대소문자를 혼용하고 있으면 EIP-55로 인코딩된 주소로 유효성을 검증합니다.

주소를 모두 소문자로 바꾸고 해시를 계산합니다. 인코딩 방법으로 확인해 보면 잘못된 주소인 경우 일부 대소문자가 잘못 표시될 것입니다.

About the Author
(주)뉴테크프라임 대표 김현남입니다. 저에 대해 좀 더 알기를 원하시는 분은 아래 링크를 참조하세요. http://www.umlcert.com/kimhn/

Leave a Reply

*