본문으로 건너뛰기
buybitcoinsmart

용어집 / 주소와 키

Base58Check

별칭은 Base58입니다.

Base58Check란 무엇입니까?
Base58Check는 비트코인의 원래 텍스트 인코딩으로, 이진 데이터를 옮겨 적기 쉬운 58개의 문자로 이루어진 문자열로 바꾸고 오타를 잡아내기 위해 4바이트 체크섬을 덧붙입니다.

이 문자 집합은 손으로 옮겨 적을 때 사람들이 혼동하는 네 가지 문자, 곧 숫자 0, 대문자 O, 대문자 I, 소문자 l을 뺍니다. 페이로드에 SHA-256을 두 번 적용해 얻은 4바이트 체크섬 덕분에 잘못 입력한 주소는 아무 데도 없이 사라지는 대신 지갑에서 거부되며, 통과할 확률은 42.9억분의 1 정도입니다. 1 또는 3으로 시작하는 모든 주소는 Base58Check입니다.

작동 방식

모든 Base58Check 문자열에는 세 가지 요소가 들어갑니다. 맨 앞의 버전 바이트는 이것이 어떤 종류의 데이터인지 알려 주고, 가운데의 페이로드는 실제 바이트를 담으며, 끝의 4바이트 체크섬은 버전과 페이로드를 합친 것에 SHA-256을 두 번 적용한 결과의 처음 4바이트입니다. 그다음 결과는 16진법 대신 58진법으로 표기되는데, 이렇게 하면 길이가 상당히 줄어들고 모호한 글자가 사라집니다.

익숙한 시작 문자를 만들어 내는 것은 버전 바이트입니다. 버전 0x00은 pay-to-public-key-hash 주소를 표시하며 1로 시작하는 결과가 나옵니다. 버전 0x05는 pay-to-script-hash 주소를 표시하며 3으로 시작하는 결과가 나옵니다. 버전 0x80은 Wallet Import Format의 개인 키를 표시하며 5, K 또는 L로 시작합니다. 확장 키는 대신 4바이트 버전 0x0488B21E를 사용하며, 모든 xpub가 그 네 글자로 시작하는 이유가 여기에 있습니다.

앞쪽의 0 바이트는 특별하게 처리됩니다. 그렇게 하지 않으면 진법 변환 과정에서 이것들이 버려지기 때문입니다. 페이로드 맨 앞의 0x00 바이트마다 "1" 문자 하나가 추가로 기록되며, 같은 양의 데이터를 담고도 일부 레거시 주소가 이웃 주소보다 짧거나 긴 이유가 여기에 있습니다.

확인할 수 있는 곳

Base58Check는 비트코인의 첫 10년 동안 곳곳에 쓰였고 최신 형식에는 전혀 쓰이지 않습니다. 레거시 주소, pay-to-script-hash 주소, WIF 개인 키, 그리고 지갑에서 내보내는 xprv와 xpub 확장 키가 모두 이를 사용합니다. bc1로 시작하는 것은 어떤 것도 사용하지 않습니다.

두 가지 특성이 인기와 퇴출을 모두 설명합니다. 옮겨 적기의 안전성이 핵심이었습니다. 이 문자 집합은 주소를 소리 내어 읽거나 화면에서 복사하거나 금속판에 새겨도 사람의 손을 거치면서 살아남도록 설계되었고, 체크섬은 나머지 오류를 손실이 아니라 거부로 바꿉니다. 그러나 이 인코딩은 대소문자를 구분하므로 QR 코드가 더 작은 알파뉴메릭 모드 대신 바이트 모드를 써야 하고, 무엇인가 잘못되었다는 것만 알려 줄 뿐 무엇이 어디에서 잘못되었는지는 결코 알려 주지 못합니다.

Base58Check vs Bech32

Base58Check는 오류를 검출하고 bech32는 오류를 교정합니다. BIP-173에 명시되고 2017년에 네이티브 SegWit 주소용으로 채택된 bech32는 대문자가 전혀 없는 32개 문자의 문자 집합을 사용하므로 문자열 전체가 QR 알파뉴메릭 모드에 들어가고 더 작은 이미지에서도 스캔됩니다. 이 방식의 BCH 체크섬은 최대 네 글자의 오류 검출을 보장하며, 단순히 실패하는 대신 어느 위치가 의심스러운지 짚어 줄 수 있습니다.

후속 방식에는 자체적인 수정이 필요했습니다. 원래 bech32 체크섬의 길이 확장 취약점 때문에 특정 주소가 마지막 글자를 잃거나 얻어도 탐지되지 않을 수 있었으므로, BIP-350은 상수 하나를 바꾼 bech32m을 정의했고 bc1p로 시작하는 Taproot 주소가 이것을 사용합니다. Base58Check는 계속 유효하며 무기한 작동할 것이지만, 새로운 주소 유형은 이 인코딩으로 정의되지 않고 있습니다.

혼동하기 쉬운 용어

자주 묻는 질문

비트코인 주소에는 왜 숫자 0이나 대문자 O가 절대 들어가지 않습니까?

Base58 문자 집합이 문자열을 손으로 옮겨 적을 때 사람들이 잘못 읽는 문자인 0, O, I, l을 의도적으로 제거하기 때문입니다. 이 중 하나라도 포함된 것은 유효한 레거시 비트코인 주소가 아닙니다.

bech32가 존재하는 지금도 Base58Check 주소는 계속 작동합니까?

예. 레거시 주소와 pay-to-script-hash 주소는 완전히 유효하게 남아 있으며 모든 지갑이 이를 지원합니다. 새로운 주소 유형은 대신 bech32 또는 bech32m으로 정의되며 그 주소에서 자금을 쓰는 편이 더 저렴하지만, 기존 주소를 더 이상 쓰지 않도록 강제하는 것은 없습니다.

관련 용어

주소와 키 분야의 다른 용어

이 페이지를 영어로 읽기