# 공개키란 무엇인가

#### <mark style="color:blue;">**공개키(Public Key)란?**</mark>

공개키는 암호학의 핵심 개념으로, 비트코인 네트워크에서 매우 중요한 역할을 합니다. 공개키는 개인키로부터 타원곡선 디지털 서명 알고리즘(ECDSA, 특히 secp256k1 곡선)을 통해 생성되는 길고 복잡한 문자열(일반적으로 256비트)입니다. 쉽게 말해:

* **정의**: 공개키는 누구와도 공유할 수 있는 값으로, 비트코인을 받거나 거래 서명을 검증할 때 사용됩니다.
* **개인키와의 관계**: 개인키는 자금 소유권을 증명하기 위해 거래에 서명하는 “비밀 키”이고, 공개키는 그로부터 파생되어 타인이 해당 서명이 유효한지 검증할 수 있게 해주는 “공개 키”입니다.
* **생성 방식**: 개인키 → 공개키 변환은 일방향(역연산 불가)이므로, 안전성이 보장됩니다.

#### <mark style="color:blue;">**공개키와 비트코인 주소의 관계**</mark>

비트코인에서 공개키 자체가 곧바로 수신용 주소로 쓰이지는 않습니다. 공개키는 추가 처리 과정을 거쳐 실제 주소가 됩니다. 주소 유형(P2PKH, P2SH, 세그윗, 탭루트 등)에 따라 공개키가 변환·활용되는 방식이 달라집니다:

1. **P2PKH(레거시 주소)**
   * 공개키를 SHA-256, RIPEMD-160 해시로 변환해 짧은 공개키 해시를 만듭니다.
   * 버전 바이트와 체크섬을 붙여 “1”로 시작하는 주소가 생성됩니다.
   * 예: Public Key → Hash → 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
2. **P2SH(스크립트 주소)**
   * 공개키가 멀티시그 등 스크립트의 일부로 포함되고, 스크립트를 해시해 “3”으로 시작하는 주소를 만듭니다.
   * 주소에는 공개키가 직접 보이지 않으며, 스크립트 논리 안에 포함됩니다.
3. **세그윗(SegWit) 주소**
   * 공개키는 여전히 핵심이지만, 서명 데이터가 분리 저장되어 효율이 높습니다. 공개키 해시 또는 스크립트 해시는 Bech32로 인코딩되어 “bc1q”로 시작합니다.
   * 거래 시 공개키는 “위트니스 데이터”의 일부로 제공됩니다.
4. **탭루트(Taproot, P2TR 주소)**
   * 공개키는 슈노르 서명 기술과 함께 처리되어 “bc1p”로 시작하는 탭루트 출력이 생성됩니다.
   * 공개키는 더 복잡한 조건부 스크립트를 지원하면서 프라이버시를 강화합니다.

#### <mark style="color:blue;">**공개키의 역할**</mark>

* **비트코인 수신**: 주소(공개키에서 파생)를 상대에게 공유하면 상대가 BTC를 보낼 수 있습니다.
* **거래 검증**: 비트코인을 지출할 때, 공개키로 개인키 서명을 검증하여 거래의 정당성을 보장합니다.
* **보안성**: 타원곡선 암호의 수학적 복잡성 덕분에 공개키로부터 개인키를 유도하는 것은 사실상 불가능하므로, 공개적으로 공유해도 안전합니다.

#### <mark style="color:blue;">**쉬운 비유**</mark>

공개키는 “우편함 번호”, 개인키는 “우편함 열쇠”에 비유할 수 있습니다. 다른 사람에게는 우편함 번호(주소)를 알려 편지를 보내게 할 수 있지만(BTC 수신), 우편함을 여는 열쇠(개인키)는 본인만 가지고 있습니다. 공개키는 주소를 생성하고 서명을 검증하는 “기술적 설계도”에 가깝습니다.

#### <mark style="color:blue;">**간단한 예시**</mark>

* 개인키 예: `5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn`
* 파생된 공개키 예: `04x1...`(아주 긴 16진수 문자열)
* 최종 주소 예: `1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa`(P2PKH 유형)
