티스토리 뷰

비트코인 주소, 비밀키, WIF 시크릿, 공개키, 니모닉..

등의 말들을 모두 들어보셨나요?

그렇다면 위에 제시된 것들이 서로 어떤 관계를 가지며 어떤 역할을 하는 지도 정확히 이해하고 계시나요?

비트코인 주소에 대해 공부를 하다보면 이런 용어들을 자주 만나게 되실텐데요. 각각 어떤 역할을 하며 사로 어떤 관계를 가지고 있는 지 알아보는 시간을 가져보고자 합니다.



위 다섯가지 항목의 관계는 아래와 같이 표현할 수 있습니다. 양방향 화살표는 서로 변환이 가능하다는 의미이고요. 단방향 화살표는 한쪽 방향으로만 해당 값을 만들어 낼 수 있음을 의미합니다.

 

 

HD Wallet 의 경우 니모닉으로부터 비밀키가 만들어 집니다.

(종이지갑에서는 니모닉을 사용하지 않습니다)

 

그리고 비밀키의 또 다른 형태가 WIF 시크릿입니다. 비밀키와 WIF 는 양방향으로 변환이 가능합니다.


종이 지갑을 만들 때 가장 먼저 해야할 일은 바로 안전하게 비밀키를 생성하는 것입니다.

 

 

비밀키란

아래와 같이 무작위로 선택된 256자리의 이진수입니다.

10100001000100101001000001111110100000001010010111011011110111001001100010101001101000001110001110110100011011110100011110110010110010010010100110001101110101000000100100010011111011101010101000001111110011011110111111000001010010000011101011111




위 256자리의 이진수에는 어떤 규칙이나 제한도 필요하지 않습니다.
단지 256 글자이기만 하면 어떤 값이든 모두 유효합니다

(엄밀하게는 0보다 크고 2^256 - 2^32 - 977 보다 작은 자연수이어야 합니다)

2진수 표현은 너무 길기 때문에 보통 16진수로 표현을 합니다. 위 2진수 값을 16진수로 표현하면 아래와 같은 모습이 됩니다.

A112907E80A5DBDC0098A9A0E3B46F47596494C6750244FB5541F9BDF829075F



나머지는 모두 이 비밀키로부터 만들어 집니다.

비밀키는 나의 지갑에서 비트코인을 출금할 경우 디지털 서명을 위해 사용됩니다. 비밀키를 잃어버린다면 내 지갑속 비트코인은 영원히 잠겨 버리는 것이죠.

이 비밀키는 체크섬을 포함하지 않기 때문에 한글자만 실수를 하더라도 영원히 비밀키를 찾지 못하는 위험성이 있기 때문에 일반적으로 이 형태 그대로 보관되지는 않으며 니모닉이나 WIF 포맷으로 변환하여 관리하는 것을 추천합니다.

 

 

공개키는

ECDSA 디지털 서명 알고리즘을 통해 계산이 되며 역으로 공개키를 가지고 비밀키를 만들어 내는 것은 불가능합니다. 이 공개키는 비밀키를 이용한 서명이 당사자의 서명이 맞는 것인지 검증하는데 사용됩니다.

위 비밀키를 통해 만들어지는 공개키의 모습은 다음과 같습니다.

0465f760a3a156b1efa9a9558718e9b046107a48d584654f6265d741420b1e52e8a9418ce2ca947dbc00fd365467251196bda321b17a50c1b6e6353e842dca11bf

 

 

비트코인 주소는

공개키를 통하여 만들어 집니다. 공개키를 바로 주소로 사용하지 않는 이유는 너무 길고 수기로 입력할 경우에는 오기 혹은 오타가 발생할 가능성이 많기 때문입니다.

그렇기 때문에 공개키를 해시(SHA256)하고 유효성 검증을 위한 체크섬을 더한 후,
식별이 어려운 숫자 영(0), 대문자 오(O), 대문자 아이(I), 소문자 엘(l)을 제거하여(BASE58 encoding) 인코딩한 값을 비트코인 주소로서 사용합니다.

1AQ2yJjeMT5dojaGaKEwiGgnJimgXDfFEu

위 비트코인 주소는 유효성 검증을 위한 체크섬을 포함하기 때문에 1글자만 틀려도 유효한 주소인지 여부를 판단할 수 있습니다.

비트코인 주소를 생성하는 구체적인 과정은 아래 사이트에서 확인하실 수 있습니다
https://gobittest.appspot.com/Address

 

WIF 란,

Wallet Import Format 을 의미합니다. 일반적으로 지갑서비스에서 WIF 포맷의 비밀키를 이용해 해당 주소의 비트코인을 import 할 때 사용됩니다.

 

WIF는 비밀키에 네트워크 종류와 공개키 압축여부 그리고 체크섬을 더한 후 BASE58 로 인코딩한 결과입니다. 비트코인 주소와 마찬가지로 비밀키 포맷의 유효 여부를 판단할 수 있어 관리하기에 편리합니다.

 

WIF 포맷을 만들기 위해서 아래와 같은 온라인 도구를 이용할 수도 있지만 보안상의 이유로 추천하지는 않습니다.
https://learnmeabitcoin.com/technical/wif

아래는 앞서 제시되었던 비밀키에 대한 WIF 값입니다

L2cpDGFq7oFV4cBrbeJt88GQDxdJpYXVTTWUMUEx4krVoNBTVqmV

 

 

마지막으로 니모닉이란

복잡한 엔트로피를 사람이 기억할 수 있도록 의미있는 단어들의 조합으로 매핑시켜 놓은 것입니다.

엔트로피란 단어가 갑자기 툭 튀어 나왔는데,

엔트로피란 128비트 이상의 랜덤으로 생성된 임의의 128~256비트 이진수 값입니다. 이 엔트로피로부터 HD Wallet 에서 사용하는 비트코인 주소들의 비밀키가 만들어 집니다.

그리고 엔트로피값을 관리하기 쉬운 형태로 표현한 것이 니모닉이 됩니다.

즉 니모닉은 엔트로피와 동일한 값입니다.

 

HD Wallet(입금받을 때마다 입금 주소가 달라지는 지갑) 은 니모닉으로부터 수천 만개의 비밀키를 추출해 냅니다.

니모닉은 아래와 같이 24개 영단어로 이루어져있습니다.

(12개를 사용하는 경우도 있습니다. 12개만으로도 충분히 안전하기 때문입니다.)


patient nest cabbage access frozen unlock act benefit path buffalo bridge modify north engine border park eager survey expire vibrant test behind buddy trial

위 단어 조합은 순서가 바뀌면 안됩니다. 각 단어들은 0부터 2047 까지 2048 가지 숫자 중 하나를 의미하며 해당 규칙은 BIP39 제안으로서 아래와 같이 정의되어 있습니다.
https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt

2의 11승이 2048 이므로 하나의 단어는 11비트의 정보를 가지고 있습니다. 24개 단어는 총 264 비트의 정보를 담고 있으며, 이중 앞 256비트는 비밀키가 되고 나머지 8비트는 체크섬으로서 기능합니다.

아래 사이트를 통해 쉽게 니모닉을 생성해 볼 수 있습니다.
https://iancoleman.io/bip39/

728x90
반응형
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함