블록체인 주소 소개
탈중앙화 금융과 분산 원장의 세계에서 "주소"는 자금을 받기 위해 사용되는 공개 식별자입니다. 우리는 흔히 주소를 긴 영숫자 문자열로 보지만, 이 문자열은 인간의 가독성, 오류 탐지 및 공간 효율성을 위해 설계된 정교한 인코딩 체계의 결과물입니다.
Base58, Bech32, EIP-55와 같은 인코딩 체계를 이해하는 것은 개발자, 보안 연구원 및 파워 유저에게 매우 중요합니다. 이 가이드는 블록체인 주소가 어떻게 구성되고 검증되는지를 정의하는 기술 표준을 심층적으로 다룹니다.
1. Base58 및 Base58Check: 비트코인의 유산
비트코인의 원래 주소 형식(1 또는 3으로 시작하는 레거시 주소)은 Base58 인코딩을 사용합니다.
왜 Base58인가?
표준 Base64 인코딩에는 0(숫자 0)과 O(대문자 O), 또는 I(대문자 I)와 l(소문자 L)과 같이 인간이 쉽게 혼동할 수 있는 문자가 포함되어 있습니다. Base58은 이러한 모호한 문자를 제거하기 위해 사토시 나카모토에 의해 특별히 설계되었습니다.
Base58 알파벳:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Base58Check: 오류 탐지 추가
사용자가 실수로 잘못 입력된 주소로 자금을 보내는 것을 방지하기 위해 비트코인은 Base58Check를 사용합니다. 이는 인코딩 전에 페이로드에 4바이트 체크섬을 추가합니다.
Base58Check 프로세스:
- 버전 바이트: 주소 유형을 나타내는 접두사가 추가됩니다(예: P2PKH의 경우
0x00, P2SH의 경우0x05). - 페이로드: 공개 키의 실제 해시(RIPEMD-160).
- 체크섬 계산:
SHA256(SHA256(버전 + 페이로드))를 계산합니다. 결과의 처음 4바이트가 체크섬입니다. - 결합:
버전 + 페이로드 + 체크섬. - Base58 인코딩: 결합된 전체 바이트 배열이 Base58 문자열로 변환됩니다.
단 하나의 문자라도 변경되면 체크섬 검증이 실패하여 오타로부터 사용자를 보호합니다.
2. Bech32 및 Bech32m: 세그윗(SegWit) 그 이후
비트코인이 세그윗과 함께 발전하면서 새로운 주소 형식이 필요해졌습니다. Bech32(BIP 173에서 정의됨)는 네이티브 세그윗 주소(bc1q로 시작)의 표준이 되었습니다.
Bech32의 장점
- 대소문자 구분 없음: Bech32 문자열은 모두 소문자입니다(대문자도 가능하지만 혼용은 금지됨). 따라서 입력하거나 소리 내어 읽기가 더 쉽습니다.
- QR 코드 효율성: 소문자와 숫자만 사용하기 때문에 Bech32는 QR 코드에서 더 효율적입니다.
- 더 나은 오류 탐지: Bech32는 최대 4개의 오류를 탐지하고 잠재적으로 수정할 수 있는 BCH 코드를 사용합니다.
- Base58 모호성 없음: 혼동하기 쉬운 문자를 제외한 문자 세트를 사용합니다.
Bech32 알파벳:
qpzry9x8gf2tvdw0s3jn54khce6mua7l (1, b, i, o가 제외되었음에 유의).
Bech32m: "1" 문자 문제 해결
2021년, 탭루트(v1 위트니스 프로그램) 이상에서 사용할 때 원래 Bech32의 사소한 취약점을 해결하기 위해 Bech32m(BIP 350)이 도입되었습니다. Bech32m은 현재 탭루트 주소(bc1p로 시작)의 표준입니다.
3. 이더리움 주소 형식 및 EIP-55 체크섬
비트코인과 달리 이더리움 주소는 공개 키의 Keccak-256 해시의 마지막 20바이트에서 직접 파생됩니다. 일반적으로 0x로 시작하는 16진수 문자열로 표시됩니다.
내장 체크섬의 부재
원래 이더리움 주소에는 내장된 체크섬이 없었습니다. 표준 0x 주소에서 문자를 잘못 입력하면 자금이 단순히 유효하지 않거나 도달할 수 없는 목적지로 전송되었습니다.
EIP-55: 대소문자 혼합 체크섬
주소 길이를 변경하지 않고 이 문제를 해결하기 위해 비탈릭 부테린은 EIP-55를 제안했습니다. 대문자를 사용하여 체크섬을 인코딩합니다.
EIP-55 알고리즘:
- 주소를 소문자로 변환합니다(
0x제외). - 소문자 주소 문자열의 Keccak-256 해시를 계산합니다.
- 주소의 각 문자 $i$에 대해:
- 해시의 $i$번째 니블(nibble)이 $\ge 8$이면, 주소의 $i$번째 문자를 대문자로 바꿉니다.
- 그렇지 않으면 소문자로 유지합니다.
예시:
- 표준:
0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed - EIP-55:
0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed
비트코인 주소 검증기 또는 이더리움 주소 검증기는 트랜잭션 목적지의 무결성을 보장하기 위해 이러한 특정 알고리즘을 구현해야 합니다.
4. 요약표: 주소 인코딩 비교
| 기능 | Base58Check | Bech32 / Bech32m | EIP-55 (이더리움) |
|---|---|---|---|
| 블록체인 | 비트코인 (레거시) | 비트코인 (세그윗/탭루트) | 이더리움 |
| 접두사 | 1 또는 3 |
bc1q 또는 bc1p |
0x |
| 문자 세트 | 58개 문자 (영숫자) | 32개 문자 (소문자 + 숫자) | 16개 문자 (16진수) |
| 체크섬 유형 | 이중 SHA-256 (4바이트) | BCH 코드 | Keccak-256 (대소문자 혼합) |
| 대소문자 구분 | 있음 | 없음 (대소문자 구분 안 함) | 선택 사항 (권장) |
FAQ: 일반적인 블록체인 인코딩 질문
Q: 왜 어떤 비트코인 주소는 1로 시작하고 다른 것은 3으로 시작하나요?
A: 1로 시작하는 주소는 P2PKH(Pay-to-Public-Key-Hash) 주소입니다. 3으로 시작하는 주소는 P2SH(Pay-to-Script-Hash) 주소로, 주로 멀티시그 또는 중첩된 세그윗에 사용됩니다.
Q: 이더리움 주소로 BTC를 보낼 수 있나요?
A: 아니요. 인코딩 체계와 기본 암호화 곡선이 겹칠 수 있지만 네트워크 프로토콜은 완전히 다릅니다. 다른 체인의 주소로 자산을 보내면 대개 영구적인 손실이 발생합니다.
Q: "베니티 주소(Vanity Address)"란 무엇인가요?
A: 베니티 주소는 특정 단어나 패턴(예: 1Love...로 시작)이 포함된 블록체인 주소입니다. 이는 일치하는 공개 해시가 발견될 때까지 수백만 개의 키 쌍을 무차별 대입하여 생성됩니다.
Q: "Invalid Address(유효하지 않은 주소)" 오류를 어떻게 해결하나요?
A: 이 오류는 일반적으로 체크섬 검증이 실패했음을 의미합니다. 오타가 있는지 다시 확인하고, 0과 O를 혼동하지 않았는지 확인하며, 올바른 네트워크로 보내고 있는지 확인하세요(예: 세그윗 BTC를 레거시 전용 지갑으로 보내지 마세요).
결론
블록체인 주소 인코딩은 단순한 문자열 그 이상입니다. 이는 필수적인 보안 계층입니다. Base58Check의 오타 저항성, Bech32의 효율성, 또는 EIP-55의 영리한 대소문자 혼합 체크섬 등, 이러한 표준들은 수십억 달러의 자금이 안심하고 전 세계로 이동할 수 있도록 보장합니다. 개발자나 사용자로서 이러한 형식을 완벽히 이해하는 것은 탈중앙화 웹의 기술적 아키텍처를 이해하는 첫 걸음입니다.