공개 키 (Public Key)
공개 키(public key)는 공개키 암호에서 개인 키와 한 쌍을 이루는 키로, 다른 사람에게 알려 줘도 되는 쪽입니다. 개인 키로 만든 디지털 서명을 검증하거나, 개인 키를 가진 사람만 풀 수 있도록 데이터를 암호화하는 데 쓰입니다.
자세히 알아보기
비트코인과 이더리움은 타원곡선 secp256k1을 사용합니다. 개인 키는 256비트(32바이트) 정수 k이고, 공개 키는 곡선의 기준점 G를 k번 더한 점 K = k·G입니다. k에서 K를 계산하기는 쉽지만, K와 G만 보고 k를 구하는 문제(타원곡선 이산로그 문제)는 알려진 방법으로는 사실상 풀 수 없습니다. 그래서 공개 키를 공개해도 개인 키는 드러나지 않습니다.
공개 키는 곡선 위 점의 좌표 (x, y)로 표현됩니다. 비압축 형식은 접두 바이트 04 뒤에 x와 y를 붙인 65바이트이고, 압축 형식은 y가 짝수인지 홀수인지를 나타내는 02 또는 03 뒤에 x만 붙인 33바이트입니다. y는 곡선 방정식으로 x에서 다시 계산할 수 있으므로 두 형식은 같은 공개 키를 가리킵니다.
공개 키의 핵심 역할은 서명 검증입니다. 개인 키 소유자가 ECDSA 같은 방식으로 메시지에 서명하면, 누구나 공개 키로 그 서명이 짝이 되는 개인 키로 만들어졌는지, 메시지가 바뀌지 않았는지를 확인할 수 있습니다. 검증하는 쪽은 개인 키를 알 필요가 없습니다.
블록체인·암호화폐에서는
공개 키와 주소는 서로 다른 값입니다. 비트코인의 전통적인 주소(P2PKH)는 공개 키에 SHA-256과 RIPEMD-160을 차례로 적용한 20바이트 값(hash160)에 버전 바이트와 체크섬을 붙여 Base58Check로 인코딩한 것입니다. 이더리움 주소는 공개 키의 Keccak-256 해시 중 마지막 20바이트입니다. 주소는 공개 키에서 만들어지지만, 주소만으로 공개 키를 거꾸로 계산할 수는 없습니다.
트랜잭션을 보낼 때 지출하는 쪽은 개인 키로 서명하고, 노드는 공개 키로 그 서명을 검증합니다. P2PKH 주소에는 공개 키의 해시만 들어 있으므로, 공개 키 자체는 그 주소의 코인을 쓰는 트랜잭션에서 서명과 함께 공개됩니다. 탭루트(BIP 341) 출력에는 32바이트 공개 키가 해시 없이 직접 들어갑니다.
쉽게 말하면
공개 키는 관청에 등록해 둔 인감의 인영과 비슷합니다. 도장(개인 키)은 본인만 갖고 있고, 등록된 인영(공개 키)은 누구나 볼 수 있어서 서류에 찍힌 도장이 본인 것인지 대조할 수 있습니다. 다만 현실에서는 인영을 보고 비슷한 도장을 새길 수도 있지만, 공개 키에서 개인 키를 계산하는 일은 사실상 불가능하다는 점이 다릅니다.
예시
비트코인 위키의 예시에서 압축 공개 키 0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352에 SHA-256과 RIPEMD-160을 적용하면 f54a5851e9372b87810a8e60cdd2e7cfd80b6e31이 나오고, 여기에 버전 바이트 0x00과 체크섬을 붙여 인코딩한 주소가 1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs입니다. 송금받을 때 상대에게 알려 주는 것은 이 주소이고, 공개 키는 서명 검증에 쓰입니다. 이 예시의 개인 키는 공개되어 있으므로 실제 자금에 쓰면 안 됩니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.