전체 글 목록

비트코인 복구 문구를 주사위로 만드는 방법: 256비트 엔트로피와 24단어 니모닉

비트코인 지갑은 일반적으로 내부 난수 생성기를 이용해 복구 문구를 자동으로 만듭니다. 공식 경로에서 구입한 하드웨어 지갑이나 신뢰할 수 있는 지갑 프로그램을 정상적인 환경에서 사용한다면, 대부분은 지갑이 제공하는 생성 절차를 따르는 것으로 충분할 수 있습니다.

저는 BIP39 복구 문구가 만들어지는 과정을 직접 확인해보고 싶어 색이 다른 주사위 두 개로 256비트 엔트로피를 만들었습니다. 그리고 이안 콜먼(Ian Coleman)의 BIP39 도구를 인터넷이 끊어진 Mac에서 실행해, 그 엔트로피에 대응하는 24단어 니모닉을 생성했습니다.

이번 글은 제가 실제로 진행한 다음 두 과정을 중심으로 정리했습니다.

  1. 색이 다른 주사위 두 개로 256비트 엔트로피를 만듭니다.
  2. 이안 콜먼 BIP39 도구를 오프라인에서 실행해 24단어 니모닉으로 변환합니다.

주사위를 사용했다고 해서 복구 문구가 자동으로 더 안전해지는 것은 아닙니다. 지갑의 난수 생성기에 대한 의존은 줄일 수 있지만, 주사위 순서와 비트 변환, 기록, 도구 입력, 생성 환경을 사용자가 직접 관리해야 하므로 실수할 가능성은 오히려 늘어날 수 있습니다.

복구 문구를 생성할 때 확인해야 할 지갑과 컴퓨터 환경은 비트코인 지갑 시리즈 3편 비트코인 복구 문구를 만들 때 조심할 점에서 정리했습니다.
엔트로피와 체크섬이 BIP39 단어로 바뀌는 원리는 시리즈 4편 비트코인 BIP39란?에서 먼저 확인할 수 있습니다.

주사위로 24단어 니모닉을 만든 전체 흐름

주사위가 니모닉 단어를 하나씩 직접 정하는 것은 아닙니다.

제가 사용한 방법은 주사위 결과를 먼저 256개의 0과 1로 변환해 엔트로피를 만들고, 그 엔트로피를 BIP39 변환 도구에 입력하는 방식입니다.

전체 흐름은 다음과 같습니다.

bitcoin-dice-entropy-bip39-workflow

BIP39 규칙에서는 256비트 엔트로피에 SHA-256으로 계산한 8비트 체크섬을 덧붙입니다. 이렇게 완성된 264비트를 11비트씩 나누면 24개의 단어 인덱스가 만들어집니다.

따라서 제가 직접 만든 것은 24개의 단어가 아니라, 단어를 결정하는 바탕이 되는 256비트 엔트로피입니다.

1단계 — 주사위 두 개로 256비트 엔트로피 만들기

색이 다른 주사위 두 개의 순서를 고정한다

저는 한 번에 2비트씩 만들기 위해 색이 다른 6면체 주사위 두 개를 사용했습니다.

두 주사위의 색을 구분한 이유는 매 회차의 첫 번째 비트와 두 번째 비트를 같은 순서로 기록하기 위해서입니다.

예를 들어 다음처럼 처음부터 역할을 정할 수 있습니다.

  • A 주사위: 첫 번째 비트
  • B 주사위: 두 번째 비트

A 주사위가 홀수이고 B 주사위가 짝수라면 해당 회차는 01이 됩니다. 반대로 A 주사위가 짝수이고 B 주사위가 홀수라면 10입니다.

두 결과는 서로 다른 값이므로 중간에 색 순서를 바꾸면 처음 의도한 엔트로피와 다른 값이 만들어집니다. 저는 시작할 때 정한 주사위 순서를 128회 동안 그대로 유지했습니다.

홀수는 0, 짝수는 1로 변환한다

각 주사위의 숫자는 다음 규칙으로 1비트로 변환했습니다.

  • 1·3·5 → 0
  • 2·4·6 → 1

6면체 주사위에는 홀수 면과 짝수 면이 각각 세 개씩 있습니다. 주사위의 각 면이 비슷한 확률로 나온다고 가정하면 홀수와 짝수도 각각 절반 정도의 확률을 가지므로, 한 주사위의 결과를 1비트로 바꿀 수 있습니다.

주사위 두 개를 함께 굴리면 한 회차에서 다음 네 가지 조합 가운데 하나가 만들어집니다.

  • 홀수·홀수 → 00
  • 홀수·짝수 → 01
  • 짝수·홀수 → 10
  • 짝수·짝수 → 11

같은 결과가 여러 번 연속으로 나와도 바꾸거나 다시 굴리지 않았습니다. 사람이 보기에 한쪽으로 치우친 것처럼 느껴지는 것과 실제 무작위성은 다를 수 있기 때문입니다.

주사위가 바닥을 벗어나거나 물체에 기대어 숫자를 판정하기 어려운 경우처럼 유효한 결과로 보기 힘든 상황에만 다시 굴리는 편이 좋습니다. 어떤 경우에 재굴림할 것인지도 시작 전에 정해두면 중간에 임의로 판단하는 일을 줄일 수 있습니다.

두 주사위를 128회 굴린 이유

24단어 BIP39 니모닉을 만들려면 256비트 엔트로피가 필요합니다.

제가 사용한 방식에서는 주사위 두 개를 한 번 함께 굴릴 때 2비트가 만들어집니다.

2비트 × 128회 = 256비트

따라서 두 주사위를 함께 굴리는 과정을 총 128회 반복했습니다.

여기서 128회는 주사위 각각의 결과를 따로 세면 총 256개의 주사위 결과에 해당합니다. 128비트만 만든 것이 아니라, 매 회차의 두 결과를 각각 1비트로 변환해 256비트를 만든 것입니다.

회차와 비트를 함께 기록한다

128회를 진행하는 동안에는 현재 몇 번째 회차인지 놓치지 않는 것이 중요했습니다.

기록지는 다음 항목을 구분할 수 있게 구성할 수 있습니다.

  • 회차 번호
  • A 주사위 결과
  • B 주사위 결과
  • 변환된 첫 번째 비트
  • 변환된 두 번째 비트

주사위 숫자와 변환된 비트를 함께 기록하면 나중에 홀짝 변환이 맞는지 다시 확인하기 쉽습니다.

모든 굴림이 끝난 뒤에는 다음 내용을 확인했습니다.

  1. 회차가 1번부터 128번까지 빠짐없이 기록되었는지 확인합니다.
  2. 같은 회차가 중복해서 기록되지 않았는지 확인합니다.
  3. 두 주사위의 색 순서가 끝까지 유지되었는지 확인합니다.
  4. 홀수와 짝수가 정한 규칙대로 변환되었는지 확인합니다.
  5. 최종 결과가 정확히 256개의 0과 1로 구성되었는지 확인합니다.

주사위를 모두 굴렸더라도 비트 하나를 빠뜨리거나 순서를 바꾸면 완전히 다른 니모닉이 만들어집니다. 따라서 굴림 횟수뿐 아니라 기록 순서와 전체 비트 수를 함께 확인해야 합니다.

2단계 — 이안 콜먼 BIP39로 24단어 니모닉 만들기

이안 콜먼 BIP39 도구를 미리 준비한다

저는 완성된 256비트 엔트로피를 24단어 니모닉으로 변환할 때 이안 콜먼의 BIP39 도구를 사용했습니다.

이 도구의 공식 GitHub 저장소에서는 단독으로 실행할 수 있는 bip39-standalone.html 파일을 릴리스 페이지에서 내려받아 브라우저로 실행하는 방법을 안내하고 있습니다.

제가 사용한 로컬 파일의 이름은 다음과 같았습니다.

BIP39 - Mnemonic Code.html

실제 엔트로피를 온라인 웹페이지에 입력한 것은 아닙니다. 인터넷 연결을 끊기 전에 필요한 HTML 파일을 준비하고, 출처와 정상 작동 여부를 먼저 확인했습니다.

실제 변환 작업을 시작할 때는 Mac의 Wi-Fi를 끄고 유선 인터넷 연결도 분리했습니다. 그다음 미리 저장한 HTML 파일을 브라우저에서 열었습니다.

브라우저 주소 표시줄에는 다음처럼 file://로 시작하는 로컬 주소가 나타났습니다.

file:///Users/.../BIP39%20-%20Mnemonic%20Code.html

주소가 https://가 아닌 file://로 시작한다는 것은 인터넷상의 웹페이지에 접속한 것이 아니라 컴퓨터에 저장된 파일을 직접 열었다는 의미입니다.

다만 file:// 주소만 확인하면 모든 위험이 사라지는 것은 아닙니다. HTML 파일이 변조되었거나 컴퓨터와 브라우저에 악성코드가 있다면 인터넷 연결 여부와 별개의 문제가 생길 수 있습니다.

엔트로피 입력 화면을 연다

ian-coleman-bip39

로컬 HTML 파일을 열면 처음에는 니모닉을 직접 입력하거나 새로 생성하는 기본 화면이 나타납니다.

저는 도구가 무작위 니모닉을 새로 만들도록 하는 GENERATE 기능을 사용하지 않았습니다. 이미 주사위로 만든 256비트 엔트로피가 있었기 때문입니다.

화면에서 Show entropy details를 선택하면 직접 엔트로피를 입력할 수 있는 영역이 열립니다.

그다음 엔트로피 형식으로 Binary [0-1]를 선택했습니다.

이 구분은 중요합니다. 제가 입력한 것은 주사위에서 나온 1부터 6까지의 숫자가 아니라, 홀수와 짝수 규칙을 적용해 미리 완성한 256개의 0과 1입니다.

이안 콜먼 도구는 바이너리 외에도 6면체 주사위 숫자, 16진수, 10진수와 카드 등의 입력 형식을 지원합니다. 그러나 입력 형식에 따라 도구가 엔트로피를 해석하는 방법이 달라질 수 있으므로, 서로 다른 생성 방법의 규칙을 섞지 않는 것이 중요합니다.

256비트 바이너리 엔트로피를 입력한다

Entropy 입력란에는 종이에 기록한 256개의 0과 1을 처음부터 끝까지 순서대로 입력했습니다.

이때 사용자가 입력하는 값은 주사위로 만든 256비트 엔트로피까지입니다.

BIP39에 필요한 8비트 체크섬을 직접 계산해 뒤에 붙인 264비트를 입력하는 것이 아닙니다. 체크섬은 이안 콜먼 도구가 입력된 256비트 엔트로피를 바탕으로 자동 계산합니다.

입력 중에는 한 줄을 건너뛰거나 같은 비트를 두 번 입력하지 않도록 주의해야 합니다. 256비트를 모두 입력한 뒤에는 화면에 표시되는 다음 항목을 확인할 수 있습니다.

  • Entropy TypeBinary
  • Event Count256
  • Total Bits256
  • Raw Binary: 종이에 기록한 원본 엔트로피와 같은 값
  • Mnemonic Length: 256비트 엔트로피에 대응하는 24단어

저는 특히 Raw Binary가 종이에 기록한 256비트 엔트로피와 같은지 확인했습니다.

화면에 Some characters have been discarded라는 경고가 나타난다면 0과 1 이외의 문자가 입력되어 일부가 제외되었을 수 있습니다. 이런 경우에는 만들어진 결과를 그대로 사용하기보다 어떤 문자가 제외되었는지 확인하고, 원본 기록과 Raw Binary를 다시 비교하는 편이 좋습니다.

Mnemonic Length는 원본 엔트로피를 그대로 사용하는 설정에서 256비트가 24단어로 처리되는지 확인하면 됩니다. 입력 길이를 임의로 늘리거나 줄여 24단어에 맞추는 방식은 이번 과정과 다릅니다.

도구가 체크섬과 24단어를 생성한다

256비트 엔트로피가 정상적으로 입력되면 이안 콜먼 도구가 SHA-256을 이용해 8비트 체크섬을 계산합니다.

그다음 256비트 엔트로피와 8비트 체크섬을 연결한 264비트를 11비트씩 나눕니다. 각 11비트 값은 0부터 2,047까지의 숫자가 되고, BIP39 단어 목록에서 해당 위치의 단어와 연결됩니다.

이 과정을 거쳐 BIP39 Mnemonic 입력란에 24개의 단어가 표시됩니다.

저는 화면에 나타난 24개 단어를 순서대로 종이에 기록했습니다. 단어의 철자뿐 아니라 1번부터 24번까지의 순서도 함께 구분했습니다.

256비트 엔트로피가 먼저 확정된 이번 방식에서는 체크섬과 24번째 단어도 그 엔트로피에 따라 결정됩니다. 마지막 단어가 마음에 들지 않는다는 이유로 임의로 다른 단어로 바꾸면 원래 엔트로피에 대응하는 BIP39 니모닉이 아니게 됩니다.

도구 화면에는 니모닉뿐 아니라 BIP39 시드, 확장키, 주소와 개인키 같은 민감한 정보도 함께 표시될 수 있습니다. 이번 작업의 목적은 256비트 엔트로피를 24단어 니모닉으로 변환하는 것이었으므로, 화면 아래에 만들어진 지갑 파생 정보는 별도로 사용하거나 기록하지 않았습니다.

생성 과정에서 꼭 확인할 부분

오프라인 실행이 완전한 에어갭을 의미하지는 않는다

Wi-Fi와 유선 인터넷을 분리했다고 해서 평소 사용하던 Mac이 완전한 에어갭 기기로 바뀌는 것은 아닙니다.

브라우저 확장 프로그램, 악성코드, 자동 완성, 임시 파일, 키 입력 기록과 화면 캡처 같은 위험은 별도로 생각해야 합니다. 로컬 HTML 파일의 출처와 컴퓨터 상태도 함께 확인해야 합니다.

제가 인터넷 연결을 끊고 로컬 파일을 실행한 것은 실제 엔트로피가 온라인 웹사이트로 전송될 가능성을 줄이기 위한 절차였습니다. 이것만으로 생성 환경 전체의 안전성이 자동으로 보장된다고 보기는 어렵습니다.

중간 기록도 복구 문구처럼 보호한다

주사위 결과와 256비트 바이너리 엔트로피는 단순한 계산 메모가 아닙니다.

이 정보를 알고 동일한 변환 규칙을 적용하면 같은 24단어 니모닉을 다시 만들 수 있습니다. 따라서 다음 정보는 모두 민감하게 다루는 편이 좋습니다.

  • 주사위 결과 전체
  • 순서가 표시된 256비트 엔트로피
  • 완성된 24단어 니모닉
  • 변환 과정의 사진과 스크린샷
  • 도구에 표시된 시드와 개인키 정보

저는 실제 엔트로피와 니모닉을 사진이나 스크린샷으로 남기거나 메모 앱과 클라우드 문서에 저장하지 않았습니다.

다른 주사위 생성 방식과 규칙을 섞지 않는다

모든 주사위 기반 니모닉 생성 방식이 같은 계산을 사용하는 것은 아닙니다.

예를 들어 COLDCARD의 주사위 방식은 사용자가 입력한 주사위 숫자를 ASCII 문자열로 만든 뒤 SHA-256으로 처리합니다. 이는 주사위 결과를 홀짝에 따라 각각 1비트로 바꿔 256비트 바이너리 엔트로피를 직접 만드는 이번 방식과 다릅니다.

BitBox02의 주사위 안내 역시 별도의 주사위 조합과 단어 조회표, 하드웨어 지갑의 마지막 단어 확인 기능을 사용합니다.

따라서 한 안내문의 굴림 횟수와 다른 도구의 입력 형식, 또 다른 지갑의 체크섬 처리 방법을 섞으면 안 됩니다. 사용하려는 방식을 먼저 정하고 엔트로피 생성부터 니모닉 변환까지 같은 규칙을 유지해야 합니다.

실제 사용 전에는 복구 가능성을 확인한다

24단어를 기록했다고 해서 모든 과정이 끝난 것은 아닙니다.

단어의 철자와 순서가 정확한지 확인하고, 실제 비트코인을 받기 전에는 빈 지갑 상태에서 해당 기록으로 같은 지갑을 복구할 수 있는지 확인하는 편이 좋습니다.

이때도 실제 니모닉을 인터넷 웹사이트나 일반 메모 앱에 입력하는 방식은 피해야 합니다. 복구 테스트는 사용하는 지갑이 공식적으로 제공하는 안전한 절차 안에서 진행해야 합니다.

직접 만들어보며 확인한 점

직접 진행해보니 주사위를 많이 굴리는 것보다 전체 규칙을 끝까지 일관되게 유지하는 일이 더 중요했습니다.

두 주사위의 순서를 고정해야 했고, 각 결과를 같은 홀짝 규칙으로 변환해야 했습니다. 회차를 빠뜨리지 않고 256비트를 정확하게 기록하는 과정도 필요했습니다.

이안 콜먼 BIP39 도구에서는 주사위 숫자를 입력하는 것이 아니라, 제가 만든 256비트 바이너리 엔트로피를 Binary [0-1] 형식으로 입력해야 했습니다. 체크섬을 직접 덧붙이지 않고 도구가 계산하도록 한다는 점도 중요한 부분이었습니다.

주사위 방식은 지갑 내부의 난수 생성기에만 의존하지 않고 엔트로피 생성 과정을 직접 확인할 수 있다는 의미가 있습니다. 하지만 그 대신 기록, 변환, 입력, 검증과 보관을 사용자가 직접 관리해야 합니다.

결국 중요한 것은 주사위를 사용했다는 사실 하나가 아니라, 엔트로피 생성부터 24단어 기록까지의 전체 과정을 실수와 노출 없이 관리하는 것이라고 느꼈습니다.

핵심 정리

이번에 제가 24단어 니모닉을 만든 과정은 다음과 같습니다.

  1. 색이 다른 6면체 주사위 두 개의 순서를 고정했습니다.
  2. 홀수는 0, 짝수는 1로 변환했습니다.
  3. 두 주사위를 함께 128회 굴려 256비트 엔트로피를 만들었습니다.
  4. 회차 누락과 중복, 주사위 순서와 전체 비트 수를 확인했습니다.
  5. 인터넷 연결을 분리한 Mac에서 이안 콜먼 BIP39 로컬 HTML을 실행했습니다.
  6. Show entropy details를 열고 입력 형식으로 Binary [0-1]를 선택했습니다.
  7. 256비트 엔트로피만 입력하고 체크섬은 도구가 계산하도록 했습니다.
  8. Binary 형식과 256비트 여부, 원본 기록과 Raw Binary의 일치 여부를 확인했습니다.
  9. 생성된 24단어 니모닉을 순서대로 종이에 기록했습니다.
  10. 주사위 기록과 엔트로피도 완성된 복구 문구처럼 보호했습니다.

주사위 방식은 누구에게나 필요한 기본 절차는 아닙니다. 공식 경로에서 준비한 지갑의 정상적인 생성 기능을 이용하는 편이 더 단순하고 실수를 줄이기 쉬울 수 있습니다.

반면 엔트로피 생성 과정과 BIP39 변환 원리를 충분히 이해하고, 안전한 생성·검증 환경을 준비할 수 있다면 주사위 방식은 지갑이 사용하는 무작위성을 직접 만들어보는 심화 방법이 될 수 있습니다.

다음 6편에서는 같은 복구 문구에 선택적인 패스프레이즈를 결합하면 왜 서로 다른 지갑이 만들어지는지, 패스프레이즈가 줄일 수 있는 위험과 새롭게 만드는 복구 실패 위험을 함께 살펴보겠습니다.

참고 자료

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

이 글은 비트코인 지갑과 BIP39 엔트로피 생성 원리를 이해하기 위한 개인 학습 기록이자 일반 정보 정리입니다. 주사위 방식은 기록과 변환 과정에서 실수가 생길 수 있는 심화 방법입니다. 실제 복구 문구, 주사위 결과, 엔트로피, 개인키, 패스프레이즈, 지갑 주소와 잔액은 공개하지 않는 것이 좋습니다.

“비트코인 복구 문구를 주사위로 만드는 방법: 256비트 엔트로피와 24단어 니모닉”에 대한 1개의 생각

댓글 남기기