베이스58
베이스58(Base58)은 큰 숫자를 영숫자(alphanumeric) 텍스트로 나타내기 위해 사용되는 이진 텍스트 인코딩 방식의 집합으로 사토시 나카모토가 비트코인과 함께 사용하기 위해 도입했다. 이후 다른 암호화폐와 애플리케이션에 사용되었다.
개요[편집]
베이스58(Base58)은 큰 숫자를 영숫자(alphanumeric) 텍스트로 나타내기 위해 사용되는 이진 텍스트 인코딩 방식의 집합으로 사토시 나카모토가 비트코인과 함께 사용하기 위해 도입했다. 베이스64(Base64)와 비슷하지만 영숫자가 아닌 문자와 인쇄시 모호하게 보이는 글자를 모두 피하고자 수정되었다. 이것은 데이터를 수동으로 입력하여 일부 시각적 소스에서 복사하지만, 더블클릭하면 일반적으로 전체 문자열을 선택하기 때문에 복사 및 붙여넣기가 용이하도록 설계되었다.[1]
특징[편집]
표준 베이스64 대신 베이스58을 사용하는 이유는 일부 글꼴에서는 동일하게 보이거나 시각적으로 동일한 모양의 계정, 계좌 번호를 생성하는 데 사용할 수 있는 0, O, I, l 문자를 제외하기 위함이며 영숫자가 아닌 문자의 문자열은 계정이나 계좌에서 쉽게 받아들여지지 않는다. 이메일 사용 시 끊어야 할 구두점이 없으면 끊기지 않으며 더블클릭할 때 모두 영숫자일 경우 모든글자가 한 단어로 선택 가능하기 때문이다.[1]
베이스64와 비교하면 0(숫자 영(0)), O(대문자 오(O)), I(대문자 아이(I)), l(소문자 엘(L))과 알파벳이 아닌 문자 +(더하기, 플러스)와 /(빗금, 슬래시)가 생략된다. 베이스64와 대조적으로 인코딩의 자릿수는 원래 데이터의 바이트 경계와 제대로 정렬되지 않는다. 이러한 이유로, 이 방법은 큰 정수를 인코딩하기에 적합하지만, 더 긴 이진 데이터를 인코딩하도록 설계되지 않았다. 실제 알파벳 문자의 순서는 응용 프로그램에 따라 달라지는데, 이 때문에 '베이스58'라는 용어만으로는 형식을 충분히 기술할 수 없다. 베이스56은 베이스58에 비해 1(숫자 일(1))과 o(소문자 오(o))를 제외한다.[1]
Base58Check[편집]
Base58Check은 처음 몇 글자로 데이터 유형을 명확하게 인코딩하는 베이스58의 인코딩 형식이며 마지막 몇 글자에 오류 감지 코드를 포함하고 있다. 또한 Base58Check를 사용할 경우 사본 입력 오류를 감지하고 예방할 수 있다. 비트코인에서 사용되며, 사용자에게 제시된 데이터가 대부분 Base58Check 형식으로 인코딩되어 소형화되고 읽기 쉬우며 오류 탐지가 용이하다. 베이스58로 인코딩 될 때 Base58Check로 인코딩된 글자의 시작 부분에 특정 문자가 포함되어 있다. 이러한 문자들은 인코딩된 데이터의 종류와, 그것을 사용하는 방법을 쉽게 식별할 수 있게 도와준다. [2]
데이터(숫자)를 Base58Check 형식으로 변환하려면 인코딩 된 데이터 유형을 쉽게 구별할 수 있는 버전 바이트 라고 불리는 데이터를 앞부분에 추가해야 한다. 예를 들어 비트코인의 주소에서는 앞에 0(16진수로 0x00)이고, 개인키의 경우는 128(16진수 0x80)이다.
비트코인 주소[편집]
비트코인 주소는 공개키로부터 생성되며, 숫자와 문자로 구성되어 있으며 1로 시작한다. 비트코인 주소는 외부에 공개되며, 코인을 주고 받기 위해 사용한다. 비트코인 주소는 공개 키를 이용해 생성한다. 공개 키를 가지고 SHA256 해시를 생성하고 그 결과 값의 RIPEMD160 해시를 산출하면 160비트 크기의 숫자가 된다. 이 값이 비트코인 주소이며, Base58Check 인코딩을 통해 사람이 읽을 수 있는 58개의 문자로 제공한다.[3]
Address = RIPEMD160(SHA256(Key))
길이가 긴 숫자열을 압축해서 사용하는 방법으로 베이스64가 대표적이다. Base58Check는 베이스58 결과 값으로 생성한 해시 값을 마지막 4바이트에 추가한다. 해당 값을 Checksum 이라 한다. 이 값으로 비트코인 주소의 오타나 오류를 감지하여, 잘못된 주소 입력으로 인해 코인이 증발하는 것을 방지한다.[3]
Checksum = SHA256(SHA256(prefix+data)
특징[편집]
- 쉽게 구별할 수 있는 58개의 영숫자 기호 세트(숫자 영(0), 대문자 오(O), 대문자 아이(I), 소문자 엘(l) 제외)
- 임의 크기의 페이로드(Payload)
- 데이터에서 선행 0을 보존하기 위한 추가 단계가 있다.
- SHA256 기반 오류 검사 코드의 4바이트(32비트) 코드는 자동으로 타이핑 오류를 감지하고 수정할 수 있다.
- 비트코인 주소는 0x00을 사용하며 미래에는 0x05을 사용할 수 있다.
응용[편집]
응용 | 알파벳 |
---|---|
비트코인 주소 | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
|
IPFS 해시 | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
|
플리커에 대한 약식 URLs | 123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
|
비트코인 주소는 거의 항상 Base58Check로 인코딩되며, 사람의 가독성을 높이고 식별하기 모호한 문자를 방지하고 주소 전사 오류를 방지한다. Base58Check는 비트코인의 주소, 개인키, 암호화된 키 등을 읽거나 옮길 때 다양한 방면에서 사용된다.
베이스58 색인표[편집]
비트코인에 사용되는 베이스58 색인표는 비트코인 프로젝트에만 적용되며 외부에 사용되는 베이스58과 동일하지 않다. 제외된 문자는 숫자 영(0), 대문자 오(O), 대문자 아이(I), 소문자 엘(l)이다.
값 | 문자 | 값 | 문자 | 값 | 문자 | 값 | 문자 |
---|---|---|---|---|---|---|---|
0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 |
4 | 5 | 5 | 6 | 6 | 7 | 7 | 8 |
8 | 9 | 9 | A | 10 | B | 11 | C |
12 | D | 13 | E | 14 | F | 15 | G |
16 | H | 17 | J | 18 | K | 19 | L |
20 | M | 21 | N | 22 | P | 23 | Q |
24 | R | 25 | S | 26 | T | 27 | U |
28 | V | 29 | W | 30 | X | 31 | Y |
32 | Z | 33 | a | 34 | b | 35 | c |
36 | d | 37 | e | 38 | f | 39 | g |
40 | h | 41 | i | 42 | j | 43 | k |
44 | m | 45 | n | 46 | o | 47 | p |
48 | q | 49 | r | 50 | s | 51 | t |
52 | u | 53 | v | 54 | w | 55 | x |
56 | y | 57 | z |
각주[편집]
- ↑ 1.0 1.1 1.2 "Base58", Wikipedia
- ↑ Andreas M.Antonopoulos, Mastering Bitcoin, Safari Books Online, 2017-07
- ↑ 3.0 3.1 MB Kyle, 〈(블록체인)키, 주소, 지갑〉, 《미디엄》, 2018-07-22
참고자료[편집]
- "Base58", Wikipedia
- "Base58Check encoding", Bitcoin Wiki
- Andreas M.Antonopoulos, Mastering Bitcoin, Safari Books Online, 2017-07
- MB Kyle, 〈(블록체인)키, 주소, 지갑〉, 《미디엄》, 2018-07-22
같이 보기[편집]