개인키→공개키→주소는 어떤 관계일까?

김규원·2025년 8월 14일
0
post-thumbnail

개인키, 공개키, 주소에 대한 아주 간단한 정리

개인키(Private Key)

  • 블록체인 지갑을 처음 만들 때 생성되는 마스터 열쇠
  • 256비트의 난수로 구성된 값.

공개키(Public Key)

  • 개인키에서 타원 곡선 암호(ECC)를 사용해 변환한 값
  • 개인키 → 공개키는 가능하지만, 공개키 → 개인키는 불가능
  • 비트코인과 이더리움은 secp256k1 이라는 타원 곡선 알고리즘을 사용
https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/

개인키에서 공개키를 만드는 방법?

곡선 위의 한 점 𝐾 = 𝑘 × 𝐺
k (1 ≤ k < n, n은 곡선의 정수 순환 수)

  • 𝑘 = 무작위 256비트 정수 = 개인 키(Private Key)
  • G = 곡선 상의 기본점(generator point) (모두가 아는 고정 값)
  • ×는 일반 곱셈이 아니라 점 덧셈(point addition)을 반복하는 연산
  • 해당 연산은 𝑘 → 𝐾 만 가능하며, 그 반대는 이산로그 문제로 인해 실질적으로 불가능
  • 즉, 다른 사람들은 𝐾 를 보고 몇 번 돌렸는지 절대 추측 불가

주소(Address)

  • 공개키에서 해시 알고리즘을 통해 얻을 수 있는 값
  • 공개키는 매우 길고 복잡하므로, 해시 함수를 통해 안전하고 짧게 줄임

비트코인에서 주소를 생성하는 법

  1. 공개키를 압축하여 압축 공개키로 변환
  2. SHA-256 함수 실행
  3. 2의 결괏값을 RIPEMD-160 해시 함수에 입력
    • RIPEMD-160 해시 함수는 SHA-256에 비해 충돌 저항성이 강함
    • 즉, 같은 주소에 대해 여러 소유자가 발생하는 오류 방지 가능
  4. 앞에 버전(version)데이터 삽입
    • [버전] + [3의 결과]
  5. 4의 결과를 SHA-256 해시 함수에 두 번 넣은 후, 해당 결괏값의 맨 앞 자리 4개를 체크섬(checksum)으로 사용
    • [버전] + [3의 결과] + [체크섬]
  6. 최종 데이터를 Base58 인코딩 방식을 통해 사람이 읽을 수 있는 문자열로 변환

개인키 → 공개키 → 주소 관계 한 줄 요약

개인키(k, 랜덤 큰 수)
  └─ ECC 곡선 연산(k × G)
        → 공개키(K, 곡선 위 점)
             └─ 해시 & 압축
                   → 주소(사람/네트워크가 쓰는 표기)
profile
행복한 하루 보내세요

0개의 댓글