이더리움 트랜잭션의 서명 검증 방법

이더리움은 타원곡선디지털서명(ECDSA) 알고리즘을 이용하여 트랜잭션을 서명합니다. 비트코인과 마찬가지로 secp256k1 곡선을 사용하고 있습니다. ECDSA로 서명한 메시지를 검증하려면 서명에 사용한 비밀키에 대응하는 공개키가 필요합니다.

그런데 네트워크로 전송되는 이더리움 트랜잭션 포맷을 보면 서명자의 공개키가 포함되어 있지 않습니다. 트랜잭션에 보낸 사람의 주소는 포함되어 있지만 이더리움 주소는 공개키의 해시값이기 때문에 주소만 가지고 공개키를 복원하는 것은 불가능합니다.

그럼 이더리움은 어떻게 트랜잭션이 서명이 유효한지 검증할 수 있을까요? 놀랍게도 ECDSA는 메시지(트랜잭션의 해시)와 서명만 있으면 서명에 사용된 공개키를 복원하는 게 가능합니다. 완벽한 복원은 아니고 후보를 4개까지 줄일 수 있습니다.

그래서 이더리움은 4개의 후보 중에 어떤 공개키를 써야 하는지를 트랜잭션에 포함시켜서 보냅니다. 이더리움 트랜잭션 서명은 r, s, v 컴포넌트로 이루어져 있는데 여기서 r, s는 각각 32바이트로 이루어진 서명 데이터이고, v는 1바이트로 4개의 후보 중에 어떤 공개키를 사용해야 하는지 지정합니다.

자세한 내용이 궁금하신 분은 SEC 문서의 4.1.6 Public Key Recovery Operation을 읽어보시기 바랍니다.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s