전체 글 목록

비트코인 BIP39란? 엔트로피·체크섬으로 복구 문구가 만들어지는 원리

비트코인 지갑을 새로 만들면 12개 또는 24개의 복구 문구가 표시되는 경우가 많습니다.

처음 보면 지갑이 2,048개의 단어 중에서 몇 개를 무작위로 골라 보여주는 것처럼 생각하기 쉽습니다.

저도 지갑을 공부하면서 복구 문구가 어떻게 만들어지는지 궁금해서 BIP39 명세를 직접 찾아본 적이 있습니다. 처음에는 단순한 무작위 추첨이라고 생각했는데, 실제로는 암호학적으로 설계된 구조라는 것을 알게 되었습니다.

하지만 BIP39 방식의 복구 문구는 단어를 하나씩 따로 추첨하는 방식으로 만들어지지 않습니다.

지갑은 먼저 엔트로피라고 부르는 무작위 이진 정보를 생성합니다. 그 뒤 엔트로피에서 체크섬을 계산해 붙이고, 전체 정보를 11비트씩 나눈 다음 각 값을 BIP39 단어 목록의 위치와 연결합니다.

전체 흐름을 간단히 표시하면 다음과 같습니다.

엔트로피 생성
→ SHA-256으로 체크섬 계산
→ 엔트로피 뒤에 체크섬 추가
→ 전체 정보를 11비트씩 분할
→ 각 11비트를 0부터 2,047까지의 숫자로 변환
→ BIP39 단어 목록의 해당 위치와 연결
→ 12개 또는 24개의 복구 문구 완성

엔트로피와 체크섬이 BIP39 복구 문구로 변환되는 흐름

이전 비트코인 지갑 시리즈 3편 ‘비트코인 복구 문구를 만들 때 조심할 점’에서는 복구 문구가 어떤 지갑과 기기에서 만들어지는지, 가짜 앱과 온라인 생성기를 왜 조심해야 하는지 살펴봤습니다.

이번 4편에서는 지갑 앱이 사용하는 무작위 정보가 실제로 어떻게 단어로 바뀌는지 알아보겠습니다.

주사위를 이용해 직접 엔트로피를 만드는 구체적인 절차는 다음 5편에서 다룰 예정입니다. 이번 글에서는 그 과정을 이해하기 위해 필요한 BIP39의 기본 구조에 집중하겠습니다.

이 글에서는 이해를 돕기 위해 이진수와 계산 구조를 설명하지만 실제 복구 문구나 개인키는 예시로 사용하지 않습니다.
직접 니모닉을 만들 때는 단어만 임의로 조합하지 말고 전체 생성 원리와 검증 과정을 충분히 이해해야 합니다.

BIP39란 무엇일까

BIP는 비트코인 관련 제안을 기록하는 문서다

BIP는 Bitcoin Improvement Proposal의 약자입니다. 한국어로는 보통 비트코인 개선 제안이라고 부릅니다.

BIP는 비트코인과 관련된 기술적 아이디어나 규칙, 응용 프로그램 간의 호환 방식 등을 문서로 정리하는 체계입니다.

다만 BIP가 있다고 해서 그 내용이 자동으로 비트코인 전체의 합의 규칙이 되는 것은 아닙니다. 어떤 BIP는 블록이나 트랜잭션의 유효성처럼 네트워크 합의에 영향을 주지만, 어떤 BIP는 지갑이나 응용 프로그램이 서로 호환되기 위한 규칙을 설명합니다.

BIP 문서 자체가 비트코인 공동체 전체의 합의를 의미하는 것은 아니며, 각 소프트웨어가 제안을 채택하거나 사용해야 하는 것도 아닙니다.

BIP39는 지갑 응용 단계에서 사용하는 규칙이다

BIP39의 정식 제목은 ‘Mnemonic code for generating deterministic keys’입니다.

쉽게 풀면 결정론적 지갑에 사용할 키를 만들기 위해, 컴퓨터가 생성한 무작위 정보를 사람이 기록하기 쉬운 니모닉 문장으로 바꾸는 규칙이라고 볼 수 있습니다.

BIP39 문서에는 적용 계층이 ‘Applications’로 표시되어 있습니다. 이는 BIP39가 블록이나 트랜잭션의 유효성을 판단하는 비트코인 네트워크 합의 규칙이 아니라 지갑 응용 프로그램에서 사용하는 명세라는 뜻입니다.

따라서 비트코인 네트워크는 사용자가 BIP39 복구 문구를 사용하는지 알지 못합니다.

네트워크가 확인하는 것은 유효한 거래와 서명이지, 사용자가 개인키를 어떤 복구 문구 형식으로 백업했는지가 아닙니다.

모든 지갑이 BIP39를 사용하는 것은 아니다

BIP39는 많은 소프트웨어 지갑과 하드웨어 지갑에서 사용되지만 모든 지갑이 이 방식을 사용하는 것은 아닙니다.

일부 지갑은 다른 단어 체계나 자체 백업 방식을 사용할 수 있습니다. 복구 문구가 아니라 별도의 지갑 파일이나 디스크립터, 확장 키 등의 정보를 백업하도록 설계된 지갑도 있습니다.

따라서 12개나 24개의 단어가 표시된다고 해서 무조건 BIP39라고 단정하기보다, 사용 중인 지갑의 공식 문서에서 복구 방식을 확인하는 것이 좋습니다.

다른 지갑으로 복구하려는 경우에도 두 지갑이 모두 BIP39를 지원하는지뿐 아니라 패스프레이즈와 파생 경로, 주소 형식까지 함께 확인해야 합니다.

BIP39 복구 문구가 만들어지는 전체 흐름

BIP39 문서는 크게 두 부분을 설명합니다.

첫 번째는 무작위 이진 정보에서 니모닉 문장을 만드는 과정입니다.

두 번째는 완성된 니모닉 문장과 선택적인 패스프레이즈를 이용해 지갑의 바이너리 시드를 만드는 과정입니다.

이번 글의 중심은 첫 번째 과정인 엔트로피에서 복구 문구가 만들어지는 원리입니다.

엔트로피란 무엇일까

BIP39에서 엔트로피는 복구 문구를 만들기 위해 처음 생성하는 무작위 이진 정보입니다.

이 글에서는 복잡한 수학적 의미보다 ‘지갑의 출발점이 되는 예측하기 어려운 무작위 값’이라고 이해하면 충분합니다.

컴퓨터에서 정보는 0과 1로 표현됩니다. 따라서 BIP39의 엔트로피도 다음과 같은 이진 정보라고 생각할 수 있습니다.

0과 1로 이루어진 무작위 정보
→ 체크섬 추가
→ 단어로 변환

BIP39에서 허용하는 엔트로피 길이는 128비트부터 256비트까지이며, 32비트 단위로 증가합니다.

  • 128비트
  • 160비트
  • 192비트
  • 224비트
  • 256비트

여기서 비트는 0 또는 1 하나를 나타내는 가장 작은 정보 단위입니다.

128비트 엔트로피는 0과 1이 128개 이어진 정보이고, 256비트 엔트로피는 0과 1이 256개 이어진 정보입니다.

엔트로피가 길어질수록 가능한 조합의 수는 커지지만, 이를 표현하기 위해 필요한 복구 문구의 수도 늘어납니다. BIP39 명세는 엔트로피 길이를 128비트에서 256비트 사이의 32비트 배수로 정하고 있습니다.

엔트로피는 사람이 떠올린 문장과 다르다

BIP39는 사람이 기억하기 좋은 문장을 먼저 만들고 이를 지갑의 시드로 바꾸기 위한 규칙이 아닙니다.

먼저 컴퓨터나 전용 기기가 충분한 무작위 정보를 생성하고, 그 결과를 사람이 기록할 수 있도록 단어로 표현하는 구조입니다.

따라서 다음과 같은 방식은 BIP39의 정상적인 생성 과정과 다릅니다.

  • 의미가 통하는 단어를 직접 고르는 방법
  • 기억하기 좋은 단어만 골라 나열하는 방법
  • 생일이나 이름을 기준으로 단어를 선택하는 방법
  • 기존 문장이나 노래 문구를 단어 목록에 맞춰 바꾸는 방법
  • 앞 단어와 연관된 다음 단어를 선택하는 방법

사람이 의미를 생각하며 만든 조합에는 일정한 패턴이 생기기 쉽습니다.

BIP39 문서도 사람이 만든 문장을 지갑의 시드로 처리하는 방법이 아니라, 컴퓨터가 만든 무작위 정보를 사람이 읽을 수 있는 형태로 옮기기 위한 방식이라고 설명합니다.

체크섬을 추가하는 이유

지갑이 엔트로피를 만들면 그 정보를 바로 단어로 바꾸지 않습니다.

먼저 엔트로피에 SHA-256 해시 함수를 적용하고, 결과의 앞부분에서 짧은 비트를 가져와 체크섬으로 사용합니다.

체크섬의 길이는 다음 공식으로 정해집니다.

체크섬 길이 = 엔트로피 길이 ÷ 32

예를 들어 128비트 엔트로피에서는 다음과 같이 4비트 체크섬을 사용합니다.

128 ÷ 32 = 4비트

256비트 엔트로피에서는 8비트 체크섬을 사용합니다.

256 ÷ 32 = 8비트

이 체크섬을 원래 엔트로피의 뒤에 붙입니다.

128비트 엔트로피 + 4비트 체크섬 = 132비트
256비트 엔트로피 + 8비트 체크섬 = 264비트

여기서 주의할 점은 체크섬이 새로운 무작위 정보를 추가하는 것은 아니라는 것입니다.

체크섬은 기존 엔트로피에서 계산된 값입니다. 따라서 128비트 엔트로피에 4비트 체크섬을 붙였다고 해서 보안에 사용되는 무작위 정보가 132비트로 늘어나는 것은 아닙니다.

엔트로피는 여전히 128비트이고, 뒤의 4비트는 기록이나 입력 오류를 일부 확인하기 위한 검증 정보입니다.

엔트로피와 체크섬을 11비트씩 나눈다

엔트로피와 체크섬을 연결하면 다음 단계에서는 전체 정보를 11비트씩 나눕니다.

12단어 복구 문구를 예로 들면 다음과 같습니다.

128비트 엔트로피 + 4비트 체크섬 = 132비트

132비트를 11비트씩 나누면 12개의 묶음이 만들어집니다.

132 ÷ 11 = 12

24단어 복구 문구는 다음과 같습니다.

256비트 엔트로피 + 8비트 체크섬 = 264비트

264비트를 11비트씩 나누면 24개의 묶음이 만들어집니다.

264 ÷ 11 = 24

각 11비트 묶음은 BIP39 단어 하나와 연결됩니다.

2,048개 단어 목록과 11비트의 관계

11비트로 표현할 수 있는 경우의 수는 2의 11제곱입니다.

2¹¹ = 2,048

즉 11개의 자리에 각각 0이나 1이 들어가면 총 2,048개의 서로 다른 값을 만들 수 있습니다.

이 값의 범위는 0부터 2,047까지입니다.

BIP39 단어 목록에도 2,048개의 단어가 있으며, 각 단어에는 0부터 2,047까지의 위치가 대응됩니다.

예를 들면 다음과 같은 구조입니다.

11비트 값
→ 0부터 2,047까지의 숫자
→ BIP39 단어 목록의 해당 위치
→ 하나의 단어

복구 문구의 단어는 무작위 정보와 별개로 하나씩 추첨되는 것이 아닙니다.

먼저 엔트로피와 체크섬을 11비트씩 나누고, 각 11비트 값이 가리키는 위치의 단어를 가져오는 방식입니다. BIP39 명세도 엔트로피와 체크섬을 연결한 뒤 11비트 단위로 나누고, 각 값을 2,048개 단어 목록의 인덱스로 사용하도록 정하고 있습니다.

단어는 엔트로피를 사람이 기록할 수 있게 표현한 것이다

이 구조를 이해하면 복구 문구의 각 단어가 단순한 암호 단어가 아니라는 점을 알 수 있습니다.

각 단어는 엔트로피와 체크섬의 일부인 11비트 정보를 사람이 읽고 기록할 수 있도록 바꾼 표현입니다.

따라서 다음 두 표현은 같은 정보를 서로 다른 방식으로 나타낸 것에 가깝습니다.

컴퓨터가 처리하는 형태: 0과 1로 이루어진 이진 정보
사람이 기록하는 형태: 정해진 목록에서 선택된 단어들

사람이 긴 이진수나 16진수를 종이에 정확히 기록하는 것은 어렵습니다.

BIP39는 이 정보를 비교적 읽기 쉽고 구분하기 쉬운 단어 묶음으로 바꾸어 기록 오류를 줄이려는 목적을 가지고 있습니다.

복구 문구가 만들어진 뒤에는 바이너리 시드로 변환된다

BIP39에서는 복구 문구를 만든 뒤, 해당 문구를 다시 바이너리 시드로 변환합니다.

이 과정에서는 니모닉 문장을 입력값으로 사용하고, ‘mnemonic’이라는 문자열에 선택적인 패스프레이즈를 연결한 값을 솔트로 사용합니다.

BIP39는 PBKDF2-HMAC-SHA512 함수를 2,048회 반복해 512비트, 즉 64바이트 길이의 시드를 만듭니다. 이 시드는 이후 BIP32 또는 비슷한 결정론적 지갑 구조에서 키를 파생하는 데 사용될 수 있습니다.

전체 구조를 단순하게 정리하면 다음과 같습니다.

엔트로피
→ 체크섬
→ 니모닉 복구 문구
→ 선택적인 패스프레이즈와 결합
→ 512비트 바이너리 시드
→ BIP32 키 트리
→ 개인키·공개키·주소 파생

따라서 복구 문구 자체가 비트코인 주소나 개인키 하나를 직접 나타내는 것은 아닙니다.

복구 문구로 시드를 만들고, 그 시드에서 여러 단계의 키와 주소가 파생됩니다.

복구 문구가 12개 또는 24개인 이유

엔트로피 길이에 따라 단어 수가 달라진다

BIP39 복구 문구의 단어 수는 임의로 정해지지 않습니다.

엔트로피 길이와 체크섬 길이, 11비트 단위 분할 구조에 따라 결정됩니다.

BIP39에서 사용하는 관계식은 다음과 같습니다.

체크섬 길이:

CS = ENT ÷ 32

복구 문구 단어 수:

MS = (ENT + CS) ÷ 11

여기서 각 문자는 다음을 의미합니다.

  • ENT: 엔트로피 길이
  • CS: 체크섬 길이
  • MS: 니모닉 단어 수

전체 관계를 표로 정리하면 다음과 같습니다.

엔트로피체크섬전체 길이복구 문구
128비트4비트132비트12단어
160비트5비트165비트15단어
192비트6비트198비트18단어
224비트7비트231비트21단어
256비트8비트264비트24단어

BIP39 명세는 12개뿐 아니라 15개, 18개, 21개, 24개의 단어 구조도 정의합니다.

15·18·21단어도 가능한 이유

실제 지갑에서는 12개나 24개의 복구 문구를 흔히 볼 수 있지만, BIP39는 15개·18개·21개의 단어 구조도 함께 정의합니다.

이는 엔트로피 길이가 128비트에서 256비트까지 32비트씩 증가하기 때문입니다. 엔트로피가 160비트이면 15단어, 192비트이면 18단어, 224비트이면 21단어가 만들어집니다.

따라서 BIP39에서 가능한 복구 문구 길이는 12개·15개·18개·21개·24개입니다. 다만 실제로 어떤 길이를 생성하거나 복구할 수 있는지는 지갑의 구현 방식에 따라 달라질 수 있습니다.

마지막 단어는 어떻게 정해질까

마지막 단어 전체가 체크섬은 아니다

BIP39를 설명할 때 마지막 단어가 체크섬이라고 간단히 표현하는 경우가 있습니다.

하지만 정확하게는 마지막 단어 전체가 체크섬으로 구성되는 것은 아닙니다.

각 단어는 11비트를 나타냅니다. 그런데 BIP39 체크섬은 복구 문구 길이에 따라 4비트에서 8비트입니다.

따라서 마지막 단어에 해당하는 11비트 안에는 엔트로피의 마지막 부분과 체크섬이 함께 들어갑니다.

12단어 복구 문구의 마지막 단어는 다음과 같이 구성됩니다.

엔트로피의 마지막 7비트 + 체크섬 4비트 = 마지막 단어의 11비트

24단어 복구 문구의 마지막 단어는 다음과 같습니다.

엔트로피의 마지막 3비트 + 체크섬 8비트 = 마지막 단어의 11비트

전체 단어 수에 따른 마지막 단어의 구성을 정리하면 다음과 같습니다.

복구 문구마지막 단어에 포함된 엔트로피체크섬
12단어7비트4비트
15단어6비트5비트
18단어5비트6비트
21단어4비트7비트
24단어3비트8비트

따라서 마지막 단어를 체크섬 단어라고 부르는 것은 구조를 지나치게 단순화한 표현입니다.

마지막 단어를 마음대로 고를 수 없는 이유

BIP39에서는 전체 엔트로피를 먼저 만든 뒤 그 엔트로피에서 체크섬을 계산합니다.

따라서 엔트로피가 모두 정해지면 마지막 단어도 하나로 정해집니다.

마지막 단어에는 엔트로피 일부와 체크섬이 함께 들어가므로, 단어 목록에서 아무 단어나 골라 마지막에 붙일 수 없습니다.

예를 들어 12단어 복구 문구에서 앞의 11개 단어는 다음 길이의 정보를 나타냅니다.

11단어 × 11비트 = 121비트

하지만 12단어 복구 문구에 필요한 엔트로피는 128비트입니다.

따라서 마지막 단어에는 아직 정해지지 않은 엔트로피 7비트와 체크섬 4비트가 들어갑니다.

앞의 11개 단어만 고정하고 나머지 7비트 엔트로피를 아직 정하지 않았다면, BIP39 체크섬 조건을 만족할 수 있는 마지막 단어는 2의 7제곱인 128가지가 존재할 수 있습니다.

24단어 복구 문구에서는 앞의 23개 단어가 다음 정보를 나타냅니다.

23단어 × 11비트 = 253비트

필요한 엔트로피는 256비트이므로 마지막 단어에는 엔트로피 3비트와 체크섬 8비트가 들어갑니다.

앞의 23개 단어만 고정한 상태라면 남은 엔트로피 3비트에 따라 체크섬 조건을 만족하는 마지막 단어는 2의 3제곱인 8가지가 존재할 수 있습니다.

복구 문구앞 단어를 고정했을 때 가능한 마지막 단어 수
12단어128개
15단어64개
18단어32개
21단어16개
24단어8개

다만 실제 지갑 생성 과정에서는 전체 엔트로피를 먼저 생성하므로 최종적으로 표시되는 마지막 단어는 하나로 정해집니다.

이 표가 사람이 앞 단어를 선택한 뒤 가능한 마지막 단어 하나를 골라 복구 문구를 만들어도 된다는 뜻은 아닙니다.

그렇게 하면 전체 엔트로피가 사람이 선택한 단어의 영향을 받게 되므로 충분한 무작위성을 확보하지 못할 수 있습니다.

체크섬이 확인해주는 것과 확인하지 못하는 것

기록 오류를 일부 발견할 수 있다

복구 문구를 지갑에 입력하면 지갑은 단어들을 다시 11비트 값으로 바꾸고, 엔트로피와 체크섬을 분리할 수 있습니다.

그다음 엔트로피에 SHA-256을 적용해 새 체크섬을 계산하고, 복구 문구에 포함된 체크섬과 비교합니다.

두 값이 일치하지 않으면 다음과 같은 문제가 있을 가능성을 생각할 수 있습니다.

  • 단어 하나를 잘못 입력한 경우
  • 단어 순서가 바뀐 경우
  • 단어를 빠뜨린 경우
  • 다른 길이의 복구 문구를 입력한 경우
  • BIP39 단어 목록에 없는 단어를 입력한 경우

체크섬은 이러한 오류를 일부 발견하는 데 도움이 될 수 있습니다.

체크섬은 오류를 고쳐주는 기능이 아니다

체크섬은 복구 문구가 잘못되었을 가능성을 알려줄 수 있지만, 원래 단어가 무엇이었는지 자동으로 찾아주는 기능은 아닙니다.

예를 들어 한 단어가 잘못 기록되어 체크섬 검사를 통과하지 못하더라도 지갑은 다음 내용을 정확히 알려주지 못할 수 있습니다.

  • 몇 번째 단어가 잘못되었는지
  • 원래 단어가 무엇이었는지
  • 두 단어의 순서가 바뀌었는지
  • 하나 이상의 단어가 잘못되었는지

또한 잘못된 단어나 순서가 우연히 다른 유효한 체크섬 조합을 만들 가능성도 있습니다.

따라서 체크섬이 있다고 해서 복구 문구를 대충 적어도 나중에 복원할 수 있다는 뜻은 아닙니다.

처음 표시되었을 때 각 단어와 순서를 정확히 기록하고, 지갑의 정상적인 확인 절차를 완료하는 것이 중요합니다.

체크섬은 생성 과정의 안전성을 보장하지 않는다

체크섬이 유효하다는 것은 엔트로피와 체크섬의 계산 관계가 BIP39 형식에 맞는다는 뜻입니다.

하지만 엔트로피가 충분히 무작위로 생성되었는지, 신뢰할 수 있는 지갑에서 만들어졌는지, 생성 과정에서 외부에 노출되지 않았는지까지 확인해주는 것은 아닙니다.

악성 지갑 앱도 공격자가 미리 알고 있는 엔트로피에 정상적인 체크섬을 붙여, 형식상 문제가 없는 12개 또는 24개의 복구 문구를 만들 수 있습니다.

따라서 다음 두 문장은 구분해야 합니다.

  • BIP39 형식에 맞는 복구 문구다.
  • 안전한 환경에서 생성된 복구 문구다.

BIP39는 복구 문구의 구성 형식을 정하지만, 엔트로피의 무작위성이나 지갑 앱과 기기의 안전성까지 보장하지는 않습니다. 지갑 앱과 생성 환경을 확인하는 방법은 시리즈 3편인 비트코인 복구 문구를 만들 때 조심할 점에서 자세히 정리했습니다.

같은 BIP39 복구 문구인데 지갑이 다르게 보이는 이유

패스프레이즈가 다르면 바이너리 시드가 달라진다

BIP39에서는 복구 문구와 함께 선택적인 패스프레이즈를 사용할 수 있습니다.

패스프레이즈를 사용하지 않으면 빈 문자열을 사용한 것으로 처리합니다.

같은 복구 문구라도 패스프레이즈가 달라지면 PBKDF2 계산 결과인 512비트 시드가 달라집니다.

즉 다음 조합은 서로 다른 지갑의 출발점이 됩니다.

같은 복구 문구 + 패스프레이즈 없음
같은 복구 문구 + 패스프레이즈 A
같은 복구 문구 + 패스프레이즈 B

BIP39에서는 어떤 패스프레이즈를 입력하더라도 계산 가능한 시드가 만들어집니다. 따라서 패스프레이즈를 잘못 입력했다고 해서 항상 오류 메시지가 나타나는 것은 아닙니다.

잘못된 패스프레이즈를 입력하면 기존 지갑이 아니라 잔액이 없는 다른 지갑이 나타난 것처럼 보일 수 있습니다.

패스프레이즈의 작동 원리와 기록, 복구 위험은 비트코인 지갑 시리즈 6편에서 별도로 자세히 다루겠습니다.

같은 시드라도 파생 경로가 다르면 주소가 달라진다

BIP39로 만든 바이너리 시드는 이후 BIP32와 같은 결정론적 지갑 구조에서 여러 개인키와 공개키, 주소를 파생하는 데 사용됩니다.

이때 지갑이 사용하는 파생 경로나 주소 형식이 다르면 같은 복구 문구와 패스프레이즈로 만든 시드를 사용하더라도 서로 다른 주소가 표시될 수 있습니다.

따라서 다른 지갑에서 복구했을 때 잔액이 바로 보이지 않는다면 복구 문구뿐 아니라 원래 지갑이 사용한 파생 경로와 주소 형식도 함께 확인해야 합니다. 파생 경로와 주소 형식의 자세한 구조는 시리즈 1편인 비트코인 지갑이란? 주소·개인키·전송 구조 정리에서 살펴볼 수 있습니다.

BIP39 지원만으로 완전한 복구 호환을 보장할 수 없다

두 지갑이 모두 BIP39를 지원한다면 복구 문구에서 같은 바이너리 시드를 만드는 부분은 서로 맞을 수 있습니다.

하지만 실제 지갑 복구에는 다음 정보도 영향을 줄 수 있습니다.

  • 사용한 패스프레이즈
  • 파생 경로
  • 주소 형식
  • 계정 번호
  • 다중 서명 구성
  • 지갑이 주소를 검색하는 방식
  • 사용한 단어 목록과 문자 정규화 방식

지갑의 시드 백업에는 파생 경로나 스크립트 정보가 포함되지 않는 경우가 있다는 점도 관련 BIP 문서에서 지적됩니다. 호환되지 않는 파생 방식을 사용하는 지갑에서는 같은 시드가 있어도 해당 계정을 자동으로 찾지 못할 수 있습니다.

따라서 복구 문구가 맞는데 잔액이 보이지 않는다고 해서 비트코인이 바로 사라졌다고 판단해서는 안 됩니다.

기존 지갑이 사용한 패스프레이즈, 파생 경로, 주소 형식과 복구하려는 지갑의 지원 범위를 함께 확인할 필요가 있습니다.

다만 이러한 확인 과정에서도 복구 문구를 외부 웹사이트나 고객지원 담당자에게 전달해서는 안 됩니다.

다음 글에서 주사위 생성 방식을 다루는 이유

BIP39 구조를 이해하면 주사위로 니모닉을 만든다는 말이 단순히 주사위를 굴려 단어를 고른다는 뜻이 아니라는 점을 알 수 있습니다.

주사위는 복구 문구의 출발점인 엔트로피를 직접 만드는 도구이고, 이후에는 그 엔트로피에 체크섬을 붙여 BIP39 단어로 변환해야 합니다.

다음 5편에서는 색이 다른 주사위 두 개로 엔트로피를 만드는 방법과 필요한 굴림 횟수, 이진수 변환 규칙, 체크섬과 마지막 단어의 계산, 오프라인 확인 과정에서 조심할 점을 단계적으로 살펴보겠습니다.

주사위를 사용했다는 사실만으로 복구 문구가 안전해지는 것은 아닙니다. 변환 규칙과 기록 순서를 정확히 유지하고, 생성 과정에서 엔트로피와 복구 문구가 외부에 노출되지 않도록 관리해야 합니다.

핵심 정리

이번 글의 핵심은 다음과 같습니다.

  • BIP39는 비트코인 네트워크의 합의 규칙이 아니라 지갑 응용 단계에서 사용하는 명세입니다.
  • 모든 지갑이 BIP39 방식의 복구 문구를 사용하는 것은 아닙니다.
  • BIP39 복구 문구는 단어를 하나씩 임의로 고르는 방식이 아니라 엔트로피에서 출발합니다.
  • 엔트로피에 SHA-256으로 계산한 체크섬을 붙이고, 전체 정보를 11비트씩 나눠 2,048개의 BIP39 단어와 연결합니다.
  • 128비트 엔트로피는 12단어, 256비트 엔트로피는 24단어 복구 문구로 표현됩니다.
  • 마지막 단어에는 엔트로피의 마지막 부분과 체크섬이 함께 들어가므로 마음대로 선택할 수 없습니다.
  • 체크섬은 기록 오류를 일부 발견하는 데 도움을 주지만, 엔트로피와 생성 환경의 안전성을 보장하지는 않습니다.
  • 같은 복구 문구라도 패스프레이즈가 다르면 서로 다른 바이너리 시드가 만들어집니다.
  • 같은 시드를 사용해도 파생 경로나 주소 형식이 다르면 다른 주소가 표시될 수 있습니다.
  • BIP39를 지원한다는 사실만으로 서로 다른 지갑 사이의 완전한 복구 호환성이 보장되는 것은 아닙니다.

BIP39 복구 문구는 사람이 기억하기 좋은 단어를 직접 골라 만든 문장이 아닙니다. 먼저 생성된 무작위 이진 정보에 체크섬을 붙이고, 이를 11비트씩 나누어 정해진 단어 목록으로 표현한 결과입니다.

이 구조를 이해하면 마지막 단어를 마음대로 고를 수 없는 이유와 체크섬이 확인할 수 있는 범위도 자연스럽게 연결됩니다. 다만 BIP39 형식이 맞는다는 사실과 안전한 환경에서 생성되었다는 사실은 구분해야 합니다.

다음 5편에서는 주사위 결과로 256비트 엔트로피를 만들고, 이를 24개의 BIP39 복구 문구로 변환하는 과정과 주의사항을 살펴보겠습니다.

이 글은 비트코인 지갑과 BIP39의 기술 구조를 이해하기 위한 개인 학습 기록이자 일반 정보 정리입니다. 특정 지갑 사용이나 투자 판단을 권유하는 내용이 아닙니다. 실제 복구 문구, 개인키, 패스프레이즈, 지갑 주소, 잔액과 거래 내역은 공개하지 않는 것이 좋습니다.

참고 자료

자료 확인일: 2026년 7월 21일

“비트코인 BIP39란? 엔트로피·체크섬으로 복구 문구가 만들어지는 원리”에 대한 1개의 생각

댓글 남기기