이더리움 주소와 프라이빗키의 관계

이더리움은 탈중앙화된 블록체인 플랫폼으로, 사용자는 개인 키(프라이빗키)와 공개 키(퍼블릭키), 그리고 주소(Address)를 통해 자신의 자산을 관리합니다. 이 글에서는 이더리움 주소와 프라이빗키의 관계를 수학적으로 이해하고, 각 요소가 어떻게 연결되는지 자세히 설명합니다.

프라이빗키란 무엇인가?

프라이빗키는 256비트 길이의 무작위 숫자로, 사용자가 소유한 이더리움 자산에 접근할 수 있는 유일한 수단입니다. 일반적으로 16진수로 표현되며, 총 64자리로 구성되어 있습니다. 예를 들어:

0x4c0883a69102937d6231471b5dbb6204fe51296170827920a2076b53f38d2d0f

이 프라이빗키는 절대 외부에 공개되어서는 안 되며, 유출될 경우 자산을 도난당할 수 있습니다.

공개키 생성 과정

프라이빗키에서 공개키는 타원곡선 암호 알고리즘(Elliptic Curve Cryptography, ECC)을 통해 생성됩니다. 이더리움은 secp256k1이라는 곡선을 사용하며, 수학적으로는 다음과 같이 표현할 수 있습니다:

\[ K = k \cdot G \]

여기서:

  • \( k \)는 프라이빗키
  • \( G \)는 곡선 상의 생성점(Generator Point)
  • \( K \)는 공개키

ECC 연산은 단방향 함수이기 때문에, 공개키를 가지고 프라이빗키를 역산할 수 없습니다.

이더리움 주소 생성 과정

공개키에서 이더리움 주소를 생성하는 과정은 다음과 같은 순서를 따릅니다:

  1. 공개키 \( K \)를 Keccak-256 해시함수로 해싱한다.
  2. 해시된 결과의 마지막 20바이트(40자리 16진수)를 추출한다.
  3. 여기에 0x를 앞에 붙이면 이더리움 주소가 된다.

예를 들어, 공개키가 아래와 같다면:

0x04bfcab1c0a7f2d7285cb05c36d9fffaedc7c6... (생략)

Keccak-256 해시를 적용하면:

0x5d1c6f7e4505f40b184f857fb955e6f4b35d5801d77cdade... (생략)

마지막 40자리를 추출하면 주소는 다음과 같습니다:

0x5d1c6f7e4505f40b184f857fb955e6f4b35d5801

주소와 프라이빗키의 관계

이더리움 주소는 프라이빗키로부터 생성된 공개키를 다시 해싱하여 만들어진 값입니다. 즉, 프라이빗키 → 공개키 → 주소의 단방향 구조를 갖습니다. 이 관계 덕분에 프라이빗키를 보유한 사람만이 해당 주소의 자산을 이동시킬 수 있습니다.

주소 자체는 프라이빗키나 공개키에 비해 노출되어도 보안상 큰 문제가 없지만, 프라이빗키가 노출되면 해당 주소의 모든 자산을 도난당할 수 있으므로 철저한 보안이 필요합니다.

실제 예시로 보는 키 생성

다음은 실제로 키를 생성하는 간단한 예시입니다 (Python 언어 사용):

from eth_account import Account

acct = Account.create()
print("Private Key:", acct.key.hex())
print("Address:", acct.address)

이 코드는 새로운 프라이빗키와 이더리움 주소를 생성하며, 주소는 자동으로 공개키로부터 파생됩니다.

결론

프라이빗키란 무엇인가?: 프라이빗키는 자산의 소유권을 증명하는 핵심 요소로, 무작위로 생성되는 256비트 숫자입니다.

공개키 생성 과정: 프라이빗키로부터 타원곡선 연산을 통해 공개키가 생성됩니다. 이는 단방향 연산으로 복원이 불가능합니다.

이더리움 주소 생성 과정: 공개키를 Keccak-256 해시하여 마지막 20바이트를 추출하면 이더리움 주소가 됩니다.

주소와 프라이빗키의 관계: 프라이빗키 → 공개키 → 주소 순으로 파생되며, 보안상의 이유로 프라이빗키는 절대 노출되어서는 안 됩니다.

실제 예시: Python 코드로 손쉽게 새로운 키 쌍과 주소를 생성할 수 있습니다.