2026년 7월 말 콜드카드(Coinkite) 하드웨어 지갑에서 시드 생성 난수 버그로 대규모 탈취 사건이 터졌다. 블록스트림 제이드는 이 취약점과 무관하다고 공식 확인됐다. 그래도 이번 사건에서 얻을 교훈은 남는다. 아래에서 사건 내용, 내 지갑이 안전한지 확인하는 법, 그리고 비용 0원으로 보안을 한 단계 더 올리는 BIP39 패스프레이즈 설정법을 정리한다.
무슨 일이 있었나
2026년 7월 말, 콜드카드에서 시드를 생성할 때 쓰는 난수 생성 로직에 버그가 있었다는 게 드러났다. 원인은 2021년 3월의 코드 변경이다. 이 변경으로 펌웨어가 하드웨어 난수원 대신 소프트웨어 PRNG(가상 난수 생성기)로 폴백하면서, 원래 128비트여야 할 엔트로피가 72비트로 떨어졌다. 5년 동안 아무도 몰랐다.
그 결과 4,500여 개 주소에서 약 8,900만 달러 상당의 비트코인이 탈취됐다. "콜드월렛이 해킹당했다"는 표현이 퍼졌지만, 정확히는 지갑이 외부에서 뚫린 게 아니라 처음 시드를 만드는 순간부터 예측 가능한 값이 나왔다는 게 핵심이다. 난수가 약하면 공격자가 가능한 시드 후보를 좁혀서 무차별 대입으로 찾아낼 수 있다.
그럼 내 지갑(제이드)은 안전한가
블록스트림은 자사의 Jade(Classic/Core/Plus) 제품이 이번 취약점과 무관하다고 공식 발표했다. 이유는 두 가지다.
- 여러 개의 독립적인 엔트로피 소스를 사용한다.
- RNG(난수 생성) 구현 자체가 콜드카드와 다르다.
즉 같은 코드 변경 히스토리를 공유하지 않기 때문에, 콜드카드에서 발견된 이 특정 버그가 제이드에는 적용되지 않는다. 다른 제조사 기기(트레저, 렛저, 비트박스 등)를 쓴다면 각 제조사의 공식 발표를 확인하는 게 먼저다. 시드 생성 로직은 기기마다 다르므로 "하나가 뚫렸으니 다 위험하다"는 판단은 성립하지 않는다.
그래도 남는 교훈
이번엔 무사했다고 다음에도 무사하다는 보장은 없다. 시드 생성 단계는 사용자가 직접 검증할 방법이 없는 단일 실패점이다. 펌웨어를 열어서 난수가 제대로 만들어지는지 확인할 수 있는 사용자는 거의 없다. 이 구조적 약점을 사용자 쪽에서 보완할 수 있는 방법이 BIP39 패스프레이즈다.
패스프레이즈로 무엇이 좋아지나
BIP39 표준의 24단어(또는 12단어) 시드에 "25번째 단어" 역할을 하는 추가 문구를 더하는 기능이다. 오해하기 쉬운 부분부터 정리한다.
"24단어 + 8단어 = 32단어라서 더 강하다"가 아니다. 24단어는 이미 256비트라 무차별 대입 관점에서는 이미 충분하고, 추가 엔트로피는 사실상 의미가 없다.
진짜 이득은 비밀이 물리적으로 두 장소에 나뉜다는 구조다. 시드를 적어둔 메탈 백업이 도난당하거나 노출돼도, 패스프레이즈를 모르면 잔액이 있는 지갑이 열리지 않는다(패스프레이즈 없이 로그인하면 잔액 0인 빈 지갑이 열린다). 대가는 도난 리스크를 분실 리스크와 교환하는 것이다. 시드와 패스프레이즈 둘 중 하나만 잃어도 복구가 불가능해진다.
설정 방법 (제이드 기준)
1. 문구를 물리 난수로 정한다
머리로 고르면 무의식적으로 관련 있는 단어를 뽑게 된다. 6면 주사위로 정한다.
- EFF Large Wordlist(7,776단어, eff.org에서 무료로 인쇄 가능)를 준비한다. 목록 자체는 공개 정보라 화면으로 봐도 안전하다. 굴린 결과만 비밀이다.
- 주사위를 5번 굴려 나온 숫자로 목록에서 단어 하나를 찾는다.
- 이를 5회 반복해 단어 5개를 뽑는다(약 64비트 강도).
- 굴린 결과는 컴퓨터나 휴대폰에 입력하지 않는다. 종이에만 적는다.
문구는 사진, 메모 앱, 비밀번호 관리자를 포함해 어디에도 디지털로 저장하지 않는다.
2. 기기에 설정한다
- 로그인 전 메인 메뉴에서 Options -> BIP39 Passphrase -> Always Ask로 바꾼다.
- 로그인 시 문구를 입력한다. 소문자, 단어 사이 공백 하나로 통일한다.
- 화면 우측 하단에 표시되는 fingerprint(지갑 식별 값) 8자리를 기록한다. 이 값은 매번 같아야 한다.
- 기기를 껐다 켜고 다시 로그인해서 fingerprint가 일치하는지 재확인한다. 여기서 오타를 잡아야 한다. 기기는 "틀린 패스프레이즈"라고 알려주지 않는다. 오타를 치면 잔액이 0인 완전히 다른 지갑이 조용히 열릴 뿐이다. fingerprint 대조가 유일한 검증 수단이다.
3. 자주 헷갈리는 부분
- Always Ask로 설정해두면 로그인마다 패스프레이즈 입력 화면이 뜬다. 이때 아무것도 입력하지 않고 확인만 눌러도 된다. "no phrase" 표시 후 확인하면 패스프레이즈 없는 원래 지갑으로 로그인된다. 설정을 껐다 켤 필요 없이 두 지갑을 오갈 수 있다.
- 어느 방식으로 들어가든 fingerprint 대조는 매번 한다.
주의할 점
- 메탈 백업(24단어)과 패스프레이즈 문구가 같은 장소에 있으면 이 구조의 효과는 0이다. 반드시 물리적으로 다른 곳에 보관한다.
- 시드가 노출된 순간부터는 패스프레이즈 강도가 유일한 방어선이 된다. 이름, 생일, 좋아하는 문구처럼 추측 가능한 단어는 쓰지 않는다.
- 상속이나 유고 상황을 대비해, "메탈 백업과 별도 장소의 문구를 함께 입력해야 열린다"는 복구 절차만 종이로 남겨둔다. 문구 자체나 보관 장소를 함께 적으면 분리 보관의 의미가 없어진다.
'투자' 카테고리의 다른 글
| 비트코인 하드웨어 지갑 PSBT QR 안 읽힐 때, UTXO 쪼개서 보내는 법 (0) | 2026.08.08 |
|---|
댓글