내 Coldcard도 엔트로피 버그의 영향을 받았을까?
5년 동안 Coldcard의 빌드 설정에 있던 단 하나의 전처리기 가드가 비트코인 시드 생성을 기기의 하드웨어 RNG가 아니라 소프트웨어 의사난수 생성기로 조용히 우회시켰습니다. 그리고 2026년 7월 30일, 누군가가 결국 그것을 이용했습니다.
펌웨어 4.0.1부터 4.1.9까지가 설치된 Coldcard Mk2 또는 Mk3에서 시드를 생성했다면, 그 시드는 고위험 상태입니다. Coinkite는 해당 기기들이 의도했던 128비트가 아니라 대략 40비트 수준의 유효 엔트로피만 만들어냈다고 추정합니다 . 이는 약 1조 1천억 개의 조합으로, 소비자용 GPU에서도 몇 시간 안에 무차별 대입이 가능한 규모입니다. 제대로 시딩된 지갑의 경우 약 3.4×1038개 조합에 이릅니다 . Mk4, Mk5, Q 사용자는 일부 보호를 받았습니다. 보안 엘리먼트 재시딩 덕분에 유효 엔트로피가 약 72비트까지 올라갔지만, 이는 훨씬 낫다는 뜻이지 완전히 제외된다는 뜻은 아닙니다 .
이 결함은 2021년 3월 Coinkite가 libngu 암호화 라이브러리로 이전하면서 코드베이스에 들어갔고, 첫 대규모 탈취가 일어나기 전까지 발견되지 않았습니다 . Galaxy Research는 주요 세 차례의 공격과 14건의 소규모 사건에서 최소 1,719 BTC, 약 1억 1,100만 달러가 도난당했음을 높은 신뢰도로 확인했으며, 총 피해는 2,055 BTC, 약 1억 3,000만 달러에 이를 가능성이 있습니다(video: PolarByte) .
실제로 망가진 것: 진짜 난수를 조용히 꺼버린 매크로
문제는 깨진 암호 알고리즘이 아니라 빌드 설정 오류였습니다. Coinkite가 2021년 3월 Coldcard의 암호화 코드를 libngu 라이브러리로 이전하면서 , 시드 생성은 ngu.random.bytes()를 호출하기 시작했습니다. 링크 시점에 이 호출은 보드에 납땜된 STM32 하드웨어 진성 난수 생성기가 아니라, 2018년 5월 업스트림에 추가된 MicroPython의 Yasmarang 소프트웨어 의사난수 생성기로 연결되었습니다 . 영향을 받은 펌웨어에서 만들어진 모든 시드는 이 대체 경로를 그대로 물려받았고, 지갑의 사용자 인터페이스 어디에도 그 사실은 표시되지 않았습니다.
원인은 전처리기 가드 하나였습니다. Coinkite는 소프트웨어 폴백을 비활성화하기 위해 의도적으로 MICROPY_HW_ENABLE_RNG를 0으로 설정했고, 소프트웨어 경로가 끌려 들어오면 컴파일을 중단시키려는 #error 지시문도 추가했습니다. 하지만 가드는 #ifndef를 사용했습니다. 이는 매크로가 정의되어 있는지만 검사할 뿐, 그 값이 무엇인지는 검사하지 않습니다. 매크로가 0으로 정의되어 있었기 때문에 조건은 “이미 정의됨”으로 평가됐고, #error는 한 번도 실행되지 않았으며, 폴백 PRNG는 출하된 모든 바이너리에 조용히 컴파일되어 들어갔습니다 .
두 가지 조건이 이 오타를 5년짜리 노출로 키웠습니다. 첫째, 두 구현이 동일한 함수 시그니처를 공유했기 때문에 소프트웨어 경로와 하드웨어 경로는 호출 지점에서 서로 대체 가능했습니다. 컴파일러 경고도, 타입 불일치도, 런타임 오류도 없었습니다. 둘째, 올바른 보드별 TRNG 코드는 바이너리 안에 실제로 존재했습니다. 펌웨어를 감사하던 검토자는 소스를 열어 하드웨어 엔트로피 루틴이 존재한다는 것을 확인하고, 기기가 그것을 사용한다고 합리적으로 결론 내릴 수 있었습니다. 아무도 검증하지 않은 것은 지갑의 실제 시드 생성 경로에서 끝까지 심볼이 어떻게 해석되고 호출 가능한지였습니다 . 코드 리뷰는 “올바른 함수가 존재하는가?”에는 답했지만, 정작 필요했던 질문은 “시드 경로가 실제로 그 함수에 도달하는가?”였습니다.
이 도난이 대규모로 가능했던 이유는 실질적인 결과에 있습니다. Block의 엔지니어링 리뷰에 따르면 공격자가 세 가지 변수, 즉 기기 UID, 부팅 시 타이머 상태, 이전 RNG 호출 이력을 좁힐 수 있다면 후보 출력 스트림을 완전히 오프라인에서 재현할 수 있습니다 . 기기에 물리적으로 접근할 필요도 없습니다. 복구 단어를 피싱할 필요도 없습니다. 공급망을 가로챌 필요도 없습니다. 공격자는 자기 하드웨어에서 후보 시드를 생성하고, 주소를 파생한 뒤, 공개 블록체인에서 잔액을 확인하면 됩니다. 금고 안에 한 번도 건드리지 않고 보관된 지갑도 매일 연결해 쓰는 지갑과 똑같이 노출됩니다.
"난수는 애초에 난수가 아니었습니다. 공격자가 추측할 수 있는 숫자들의 결정론적 함수였죠. 그래서 40비트는 범용 GPU에서 몇 시간 수준으로 무너집니다" (video: Techsters Haven, 난수는 난수가 아니다: 40비트 지갑 탈취 사건).
엔트로피 손실은 심각했지만 제품군 전체에서 동일하지는 않았습니다. 의도했던 128비트 대신, 결함이 있는 경로는 기기 시리얼 ID와 부팅 시점의 클록 상태를 바탕으로 시딩했고, 그 결과 펌웨어 4.0.1부터 4.1.9까지를 실행하는 Mk2와 Mk3 기기에서는 약 40비트의 유효 엔트로피가 나왔습니다. Mk4, Mk5, Q에서는 보안 엘리먼트 재시딩이 결함을 일부 가려 약 72비트 수준이었습니다 . 40비트는 약 1조 1천억 개 조합입니다. 일반 GPU 하드웨어로도 몇 시간 안에 검색할 수 있는 규모입니다. 반면 올바르게 생성된 128비트 시드는 약 3.4×10³⁸개 조합에 해당합니다 . “조 단위”와 “십간 단위” 사이의 이 차이가 공격자가 밀어붙일 수 있는 지갑과 그렇지 않은 지갑을 가르는 전부입니다.
지금 안전한 Coldcard 모델과 펌웨어 버전
Coldcard가 패치된 상태로 간주되는 경우는 다섯 가지 특정 빌드 중 하나를 실행할 때뿐입니다. Mk2/Mk3는 4.2.0 이상, Mk4/Mk5 표준은 5.6.0 이상, Q 표준은 1.5.0Q 이상, Mk4/Mk5 Edge는 6.6.0X, Q Edge는 6.6.0QX입니다 . 각 트랙에서 이보다 낮은 버전은 여전히 소프트웨어 PRNG 폴백을 포함합니다. 2026년 8월 기준 Coinkite가 현재 권장하는 표준 빌드는 Mk4/Mk5용 5.6.1, Q용 1.5.1Q입니다 .
| 모델 | 릴리스 트랙 | 처음 수정된 버전 | 현재 빌드(2026년 8월) | 미패치 시 추정 엔트로피 |
|---|---|---|---|---|
| Coldcard Mk2 | 표준 | 4.2.0 | 4.2.0+ | ~40비트(4.0.1–4.1.9) |
| Coldcard Mk3 | 표준 | 4.2.0 | 4.2.0+ | ~40비트(4.0.1–4.1.9) |
| Coldcard Mk4 | 표준 | 5.6.0 | 5.6.1 | ~72비트 |
| Coldcard Mk5 | 표준 | 5.6.0 | 5.6.1 | ~72비트 |
| Coldcard Q | 표준 | 1.5.0Q | 1.5.1Q | ~72비트 |
| Coldcard Mk4/Mk5 | Edge | 6.6.0X | 6.6.0X | ~72비트 |
| Coldcard Q | Edge | 6.6.0QX | 6.6.0QX | ~72비트 |
버전 번호에서 헷갈리기 쉬운 지점은 분명히 짚고 넘어갈 필요가 있습니다. 표준과 Edge는 하나의 오름차순 버전 체계가 아니라 서로 다른 릴리스 트랙입니다 . 6.x로 표시된 Edge 빌드는 숫자로만 보면 표준 5.6.1보다 높지만, 그 숫자만으로 다른 기기의 표준 펌웨어가 패치됐는지는 알 수 없습니다. 또한 앞에 “6”이 붙어 있어도 6.6.0X보다 낮은 오래된 Edge 빌드는 패치되지 않은 상태입니다. 먼저 트랙을 보고, 그다음 번호를 확인하세요.
구매일이나 출고 배치로 추정하지 말고 기기 자체에서 설치된 빌드를 확인해야 합니다. Advanced > Upgrade > Show Version으로 이동한 뒤 결과를 위 표와 대조하세요 . Coinkite는 취약한 재고의 출고도 중단하고 남은 재고를 폐기했으므로 새로 구매한 기기는 패치된 상태로 배송될 가능성이 큽니다. 하지만 2021년 이후 서랍, 대여금고, 리셀러 선반에 놓여 있던 기기라면 스스로 업데이트됐을 가능성은 거의 없습니다 .
여기서는 플래싱 전 검증이 선택적인 관리 절차가 아닙니다. 이런 유형의 사건은 모방 펌웨어와 피싱 페이지를 끌어들이며, 서명되지 않은 이미지를 받아들이는 하드웨어 지갑은 엔트로피 버그 자체보다 더 나쁜 실패입니다. Coinkite는 다운로드한 모든 빌드에 대해 SHA-256 해시와 GPG 서명을 모두 확인하라고 안내합니다 :
- macOS — Coinkite의 공개 키를 GPG Keychain으로 가져온 뒤, 다운로드한 펌웨어에 대해 서명 파일을 검증합니다.
- Linux —
gpg --verify signatures.txt를 실행하고 SHA-256 다이제스트가 게시된 값과 일치하는지 확인합니다. - Windows — 파일을 기기로 옮기기 전에 Kleopatra로 분리 서명을 확인합니다.
표의 모든 행에는 한 가지 경계가 더 적용됩니다. 수정된 빌드를 설치하면 업데이트 이후 생성되는 시드가 보호됩니다. 이미 기기에 존재하는 시드에는 아무 조치도 하지 않으며, 이는 아래에서 다루는 별도의 결정입니다.
판단 기준: 새 시드로 이전해야 할까?
예외에 해당한다고 입증할 수 없다면 이전해야 합니다. Coinkite의 실무 기준은 단호합니다. 영향을 받은 펌웨어에서 생성된 시드, 즉 Mk2/Mk3의 4.0.1부터 4.1.9까지, 또는 Mk4, Mk5, Q의 수정 전 빌드에서 생성된 시드는 지갑을 얼마나 오래 건드리지 않았든 유출된 것으로 취급해야 합니다 . 사용하지 않고 있었다고 보호되는 것은 아닙니다. 약한 엔트로피는 개인키 자체에 들어가 있으며, 공격자는 기기 UID, 타이머 상태, 이전 RNG 호출 이력을 바탕으로 후보 키를 오프라인에서 재구성합니다. 기기를 만질 필요도 없고, 소유자가 복구 단어를 공개할 필요도 없습니다 .
시드를 이전 대상에서 제외할 수 있는 조건은 두 가지뿐이며, 둘 다 추정이 아니라 정직하게 확인되어야 합니다.
- 예외 1 — 주사위 굴림 엔트로피. 공정하고 독립적이며 기록되지 않은 주사위 굴림을 최소 50회 사용해 만든 시드(12단어)는 RNG 결함만으로는 위험하다고 보지 않습니다. 24단어 표준인 99회 이상 굴림은 약 256비트를 더한 것으로 간주됩니다 . 모든 조건이 중요합니다. 굴림 결과를 적어 두었거나, 사진으로 남겼거나, 앱으로 생성했거나, 최소 횟수보다 적게 굴렸다면 해당되지 않습니다.
- 예외 2 — 강력한 BIP-39 패스프레이즈. 고유하고 엔트로피가 높은 패스프레이즈는 문제가 된 생성 경로 밖에 있으며 독립적인 장벽을 만듭니다. 하지만 짧거나 흔하거나 패턴이 있거나 재사용한 패스프레이즈는 기본 키 공간이 이미 무너진 뒤에는 여전히 추측 가능합니다. Coinkite는 패스프레이즈 사용자에게도 이전을 권고합니다 .
언제 해야 하느냐는 질문의 답은 분명합니다. 2026년 8월 7일 기준 도난당한 코인의 약 90%가 아직 이동하지 않았습니다. 이는 해당 작전이 현금화 단계가 아니라 여전히 축적 단계에 있다는 뜻입니다 . 또한 스윕은 한 차례로 끝나지 않았습니다. Galaxy Research는 8월 4일 709개 주소에 걸친 449 BTC 규모의 의심스러운 네 번째 물결을 포착했습니다(영상: PolarByte). 초기 물결에서 살아남은 지갑이 어떤 이유로 제외된 것이 아닙니다. 아직 순서가 오지 않았을 뿐입니다.
| 현재 상황 | RNG 결함으로 인한 위험 | 조치 |
|---|---|---|
| 영향을 받은 펌웨어에서 시드를 생성했고, 기기 엔트로피만 사용함 | 높음 — 약 40비트(Mk2/Mk3) 또는 약 72비트(Mk4/Mk5/Q) | 즉시 새 시드로 이전 |
| 기록하지 않은 주사위 굴림 50회 이상으로 시드 생성(12단어) | RNG 결함만으로는 위험하지 않음 | 펌웨어 업데이트. 이전은 선택 사항 |
| 기록하지 않은 주사위 굴림 99회 이상으로 시드 생성(24단어) | 위험하지 않음 — 약 256비트 기여 | 펌웨어 업데이트. 이전은 선택 사항 |
| 영향을 받은 시드에 강력하고 고유한 패스프레이즈 사용 | 줄어들었지만 제거되지는 않음 | 이전. 패스프레이즈는 벌어 둔 시간으로 간주 |
| 영향을 받은 시드에 짧거나 재사용했거나 패턴이 있는 패스프레이즈 사용 | 높음 — 패스프레이즈를 추측할 수 있음 | 즉시 이전 |
| 패치된 빌드(5.6.1 / 1.5.1Q / 6.6.0X / 6.6.0QX)에서 시드 생성 | 영향 없음 | 일반적인 백업 관리 외 추가 조치 없음 |
결정하기 전에 한 가지 기준을 더 적용해야 합니다. 불확실성은 노출로 봐야 합니다. 시드를 만든 날 어떤 펌웨어 버전이 실행 중이었는지, 또는 그 주사위 굴림이 정말 기록되지 않았는지 기억나지 않는다면 정직한 분류는 "영향 받음"입니다. 이전에 드는 비용은 온체인 수수료 한 번과 신중하게 작업할 오후 한나절입니다. 반대쪽 선택지는 이미 공격자의 사전 계산 후보 집합 안에 들어갔을 수 있는 키를 계속 보유하는 것입니다.
자금을 안전하게 이전하는 6단계 절차
Coinkite가 공개한 이전 절차는 정해진 순서를 따른다. 펌웨어를 업데이트하고, 패치된 기기에서 완전히 새로운 시드를 생성한 뒤, 백업을 검증하고, 수신 주소를 확인하고, 소액 테스트 거래를 보낸 다음, 남은 자금을 옮기고, 마지막으로 기존 백업을 폐기하는 방식이다 . 어떤 한 단계보다 순서가 더 중요하다. 펌웨어 업데이트 전에 시드를 만들면 결함이 그대로 재현되고, 백업 검증 전에 자금을 옮기면 복구가 한 번만 실패해도 방금 구해낸 잔액이 영구적으로 묶일 수 있다.
첫 번째 단계는 펌웨어 플래시이며, 실수해도 비용 없이 되돌릴 수 있는 유일한 단계다. 기기에 쓰기 전에 다운로드한 파일의 SHA-256 해시와 GPG 서명을 확인하라. macOS에서는 GPG Keychain, Linux에서는 gpg --verify signatures.txt, Windows에서는 Kleopatra를 사용하면 된다 . 다음 단계로 넘어가기 전에 Advanced > Upgrade > Show Version에서 결과를 확인하라 .
두 번째 단계에서 구조적 수정이 눈에 보이기 시작한다. 패치된 펌웨어에서는 마스터 시드를 생성할 때마다 STM32 진성 난수 생성기와 두 보안 요소 SE1, SE2라는 세 개의 독립 하드웨어 소스에서 새 엔트로피를 가져온다 . 어느 한 소스도 결과를 단독으로 결정하지 않기 때문에, Mk2/Mk3에서 유효 엔트로피가 약 40비트 수준으로 떨어졌던 실패 방식과 같은 단일 붕괴 지점은 없다.
사용자 엔트로피 계층은 이제 필수이며 건너뛸 수 없다. 패치된 흐름에서는 세 가지 입력 중 하나가 필요하고, 이 입력은 기기가 생성한 값과 함께 해시되어 어느 한쪽만으로 시드가 결정되지 않게 한다 :
- 주사위 굴리기 — 12단어 시드는 최소 50회, 24단어 시드는 99회.
- 동전 던지기 — 128회.
- 키 마구 누르기 — 최소 65회의 시간차 입력. 입력 사이의 시간 간격이 무작위성을 제공한다.
기기 하드웨어를 전혀 신뢰하고 싶지 않은 독자에게는 네 번째 선택지도 있다. Dice Rolls Only 절차는 기기 생성 엔트로피를 시드에서 완전히 제외하므로, 생성된 키는 물리적 주사위에만 의존한다 . 이 경로는 시간이 더 든다. 99번을 신중하게 굴리는 일은 실제로 지루한 20분짜리 작업이다. 또한 주사위가 공정한지, 굴림이 기록되지 않았는지에 모든 위험이 옮겨간다. 지난 한 달을 거치며 제조사에 대한 신뢰가 남지 않은 사람에게는 이 선택이 맞고, 세 소스 설계를 받아들이는 사람에게는 불필요하다.
세 번째부터 다섯 번째 단계는 검증 구간이며, 이를 건너뛰는 것이 기술적으로는 올바른 이전을 하고도 돈을 잃는 가장 흔한 방식이다. 새 시드 단어를 적은 뒤, 기기 자체의 백업 검증 흐름을 사용해 기록한 단어가 기기에 저장된 내용과 일치하는지 확인하라. 지갑 소프트웨어에 표시된 주소와 Coldcard 화면의 수신 주소를 대조해 검증하라. 잔액을 옮기기 전에 소액 테스트 거래를 보내고 도착을 확인하라 . 테스트가 확인된 뒤에야 여섯 번째 단계에서 남은 자금을 옮겨야 하며, 이어 모든 기존 백업을 물리적으로 폐기해야 한다. 기존 시드는 언제까지든 스윕될 수 있고, 2026년 8월 7일 기준 이 사건에서 도난당한 코인의 90%가 여전히 공격자 주소에서 이동하지 않은 채 남아 있었다는 점은 공격자가 끝난 것이 아니라 기다리고 있다는 뜻이다 (video: PolarByte).
전체 과정에서 적용되는 단 하나의 엄격한 규칙이 있다. 지갑이 취약한지 확인해준다고 주장하는 어떤 웹사이트에도 시드 문구를 입력하지 말라 . 정상적인 취약점 확인에는 복구 단어가 필요하지 않다. 그것을 요구하는 모든 사이트는 첫 번째 도난 위에 겹쳐진 두 번째 절도이며, 이런 유형의 사건에는 그런 사이트가 어김없이 따라붙는다.
공격자는 지갑을 어떻게 털었나: 악용 타임라인
이번 탈취는 실시간 침입이 아니라, 조직적으로 진행된 오프라인 무차별 대입 캠페인이었다. 첫 번째 대규모 스윕은 2026년 7월 30일 01:10 UTC에 시작됐고, 41분 동안 1,196개 주소에서 1,082.65 BTC(약 7,020만 달러)가 빠져나갔다 . 공격자는 하드웨어에 직접 접근하지 않고도 기기 UID, 타이머 상태, 이전 RNG 호출 이력으로 후보 시드를 재현할 수 있었기 때문에 피해자가 알아차리고 대응할 신호는 없었다. 첫 증거는 출금 트랜잭션이었다 (The Hacker News, 2026-08).
공개는 공격보다 늦었다. Coinkite는 7월 30일 첫 권고문을 냈고, 이미 첫 번째 물량이 처리된 지 약 30시간 뒤인 8월 1일 오후 2시 35분 EDT에 범위를 확대했다 . 아직도 얼마나 급하게 이전해야 할지 판단 중인 사람에게 이 시간 차이는 중요하다. 스윕은 공개 경고보다 앞서 진행됐기 때문에, “뉴스를 확인했는데 아직 아무 일도 없었다”는 말은 애초에 안전 신호가 아니었다 (video: PolarByte).
이후 포렌식 분석에서는 스윕이 정해진 구조를 가진 여러 차례의 물결로 이어졌다는 점이 드러났다. Galaxy Research는 세 차례의 주요 물결과 14건의 소규모 사고에서 총 1,596 BTC를 확인했고, 8월 4일 709개 주소에서 449 BTC가 빠져나간 것으로 의심되는 네 번째 물결도 지목했다 . Galaxy는 이후 높은 확신으로 확인한 규모를 최소 1,719 BTC(약 1억 1,100만 달러)로 올렸고, 총 손실은 2,055 BTC(약 1억 3,000만 달러)에 이를 수 있다고 봤다 . 8월 7일 기준 도난 코인의 약 90%는 아직 이동하지 않은 상태였고, Galaxy는 공격자 주소를 미국 연방 수사기관, 거래소, 조사 업체들과 공유했다 (video: PolarByte). Elliptic, TRM Labs, Galaxy, Block도 모두 병행 조사를 진행 중이다 (Techsters Haven, 2026-08).
개별 사례를 보면 물리적 보안이 얼마나 큰 도움이 되지 못했는지도 드러난다. 캐나다 보유자 Jonathan Goodman은 은행 안전금고에 보관하던 자신의 Coldcard가 지갑을 불러온 지 7분 안에 털렸고, 피해액은 160만 달러로 알려졌다고 Bloomberg에 말했다 (video: PolarByte).
"공격자는 기기가 필요하지 않았다. 기기가 만들어낸 수학이 필요했다." — 후보 출력 스트림을 완전히 오프라인에서 재구성할 수 있었다고 본 Block 엔지니어링 리뷰의 요약 (source: The Hacker News, 2026-08).
이 패턴을 해석할 때는 더 넓은 맥락도 중요하다. 이번 스윕은 비트코인 인프라 전반이 압박을 받던 시기에 발생했다. BTCPay Server는 8월 7일 가맹점에 치명적인 인증 취약점을 경고하며 업데이트와 서버 중단을 권고했고, Foundation의 BTCPay 호스팅 Lightning 노드는 밤사이 털렸으며, Boltz는 AI 지원 공격 증가를 이유로 인프라를 오프라인으로 전환했다 (video: The Defiant). 아직 이전을 고민하는 Coldcard 보유자라면 운영상 판단은 단순하다. 주소 집합은 이미 오프라인에서 열거 가능하며, 아직 움직이지 않은 90%는 면역이 아니라 재고다.
내 상황에는 어떤 이전 경로가 맞을까
적절한 이전 경로는 세 가지 변수에 달려 있습니다. 잔액 규모, 시드가 독립적인 주사위 굴림으로 생성됐는지 여부, 그리고 펌웨어 버전과 GPG 서명을 직접 검증할 수 있는지 여부입니다. Coinkite의 안내는 영향을 받은 모든 기기에 대해 패치된 펌웨어에서 새 시드를 만드는 것을 기본 결과로 봅니다. 예외는 두 가지로 아주 좁습니다. 공정하고 기록되지 않은 주사위 굴림을 50회 이상 했거나, 강력하고 고유한 BIP-39 패스프레이즈를 쓴 경우입니다 . 아래 내용은 이전할지 말지를 정하는 것이 아니라, 얼마나 빨리 움직일지 판단하는 기준입니다.
- 큰 잔액을 보관 중인 콜드 스토리지 보유자: 먼저 이전하고, 최적화는 나중에 하세요. 노출된 키 공간은 이미 오프라인에서 열거할 수 있는 상태이며, 첫 번째 스윕은 2026년 7월 30일 41분 만에 1,196개 주소에서 1,082.65 BTC를 빼냈습니다 . 더 조용한 한 주를 기다리기보다 새 백업, 새 수신 주소, 테스트 트랜잭션이라는 번거로움을 감수하는 편이 낫습니다.
- 소액 잔액이거나 주사위로 만든 시드라고 믿는 경우: 그 예외에 기대기 전에 먼저 검증하세요. 이 예외는 공정하고 독립적이며 기록되지 않은 굴림에만 적용됩니다. 12단어 시드에는 최소 50회, 99회 이상이면 대략 256비트에 기여합니다 . 굴린 횟수, 주사위가 공정했는지, 그 순서가 어디엔가 기록됐는지 기억나지 않는다면 예외는 적용되지 않으며, 이전하는 쪽이 더 안전한 판단입니다.
- 보안 요소 완화에 기대고 있는 Mk4, Mk5 또는 Q 사용자: 그래도 이전하세요. Coinkite는 해당 모델의 유효 엔트로피를 약 72비트로 추정하며, Mk2/Mk3의 약 40비트보다는 높다고 설명합니다 . 더 낫다는 것이 의도한 수준과 같다는 뜻은 아닙니다. 설계 목표는 128비트였고, 72비트는 사용자의 커스터디 가정이 기반으로 삼았던 표준보다 훨씬 작은 검색 공간입니다.
- 펌웨어 버전이나 서명을 확인할 수 없는 사람: 해당 기기를 최악의 경우로 간주하세요. Standard와 Edge는 별도 릴리스 트랙이므로 6.x Edge 번호가 수정된 Standard 빌드를 뜻하지는 않으며, 버전 확인은 Advanced > Upgrade > Show Version 아래에 있습니다 . SHA-256과 GPG 검증이 지금 당장 부담스럽다면 , 노출됐다고 보고 이전하세요.
BIP-39 패스프레이즈는 이 범주들을 대체하기보다 그 사이에 놓입니다. 독립적인 장벽이긴 하지만, Coinkite는 짧거나 흔하거나 패턴이 있거나 재사용된 패스프레이즈는 추측될 수 있다고 지적하며 여전히 이전을 권고합니다 . 위험이 사라진 것이 아니라 시간을 번 것으로 보세요. 그리고 어떤 경로를 택하든, 검증 과정에서 자신이 영향을 받았는지 확인해 준다는 웹사이트에 시드 문구를 입력하는 일은 절대 없어야 합니다 .
앞으로 하드웨어 월렛 보안은 어떻게 봐야 할까
Coldcard 엔트로피 실패는 암호학 실패라기보다 빌드 시스템 감사 실패로 보는 것이 맞습니다. 기반 프리미티브인 libsecp256k1, STM32 TRNG, 보안 요소들은 모두 정상적이었고 배포된 바이너리 안에도 존재했습니다. 실패한 것은 시드 경로가 실제로 그것들을 호출하는지 검증하는 과정이었습니다 . 리뷰어들은 올바른 보드별 코드가 존재한다는 점은 확인했지만, 월렛 시드 경로에서 시작해 엔드투엔드 심볼 해석과 호출 도달 가능성을 추적하지는 않았습니다. 그 결과 MICROPY_HW_ENABLE_RNG가 0이 아닌지 확인한 것이 아니라 정의됐는지만 검사한 전처리기 가드 때문에, 소프트웨어 PRNG가 약 5년 동안 배포됐습니다 . 이 범주에서 얻을 교훈은 분명합니다. 에어갭이라고 해서 감사가 필요 없다는 뜻은 아니며, 링크 타임과 컴파일 타임 점검에도 암호학 자체와 같은 수준의 엄격함이 필요합니다.
업계의 대응은 겉치레가 아니라 구조적인 방향으로 이뤄졌습니다. Coinkite는 취약한 재고의 출하를 중단하고 남아 있던 영향 재고를 폐기했습니다 . 또한 핫픽스는 MicroPython의 폴백 PRNG 객체를 빌드에서 완전히 제외하고, 잘못된 심볼이 다시 조용히 해석되지 않도록 빌드 타임 RNG 심볼 검사를 추가했습니다 . 포렌식 측면에서는 Elliptic, TRM Labs, Galaxy Research, Block이 각각 독립적으로 조사하고 있으며, Galaxy는 공격자 주소를 미국 연방 법 집행기관, 거래소, 조사 업체들과 공유했습니다. 2026년 8월 7일 기준 도난 코인의 약 90%는 아직 이동하지 않은 상태였습니다 (video: PolarByte) .
여기서도 맥락은 중요합니다. 이 절도는 전반적으로 비트코인 인프라가 어려운 구간을 지나던 시기에 발생했습니다. BTCPay Server는 2026년 8월 7일 상인들에게 치명적인 인증 결함을 경고하고 업데이트와 서버 종료를 권고했습니다. Foundation의 BTCPay 호스팅 Lightning 노드는 밤사이 탈취됐고, Boltz는 증가하는 AI 지원 공격을 이유로 인프라를 오프라인으로 전환했습니다 (video: The Defiant) . 더 빠르고 저렴한 오프라인 분석은 모든 잠재적 구현 결함의 가치를 높이며, 이는 “발견”과 “악용” 사이의 시간을 단축합니다.
구체적인 결론은 이렇습니다. 펌웨어 출처 검증을 사후 작업이 아니라 위협 모델의 일부로 다루세요. 매번 플래시하기 전에 SHA-256 해시와 GPG 서명을 확인하고 , 벤더가 기기 난수를 식에서 제거하는 워크플로를 제공한다면 사용하세요. 예를 들어 Coldcard의 “Dice Rolls Only” 시드 생성, 또는 주사위 50회 이상, 동전 던지기 128회, 시간 간격을 둔 키 입력 65회 이상의 필수 사용자 엔트로피 단계가 여기에 해당합니다 . 직접 생성한 엔트로피는 어떤 빌드 타임 매크로도 조용히 비활성화할 수 없는 입력입니다.
자주 묻는 질문
내 Coldcard가 취약한 펌웨어를 실행 중인지 어떻게 확인하나요?
기기에서 Advanced > Upgrade > Show Version으로 이동한 뒤, 표시된 번호를 본인의 정확한 모델과 트랙에 해당하는 수정 릴리스와 비교하세요. 패치된 빌드는 Mk2/Mk3의 경우 4.2.0 이상, Mk4/Mk5 표준의 경우 5.6.0 이상(2026년 8월 기준 현재 권장 빌드는 5.6.1), Q의 경우 1.5.0Q 이상(현재 1.5.1Q)입니다 . Edge 펌웨어는 자체 번호 체계를 가진 별도 트랙입니다. Mk4/Mk5 Edge는 6.6.0X, Q Edge는 6.6.0QX이므로, 더 높아 보이는 6.x Edge 번호라고 해서 수정된 표준 빌드를 실행 중이라는 뜻은 아닙니다 . 무엇이든 플래시하기 전에, macOS에서는 GPG Keychain, Linux에서는 gpg --verify signatures.txt, Windows에서는 Kleopatra를 사용해 다운로드한 파일의 SHA-256 해시와 GPG 서명을 확인하세요 .
주사위 굴림으로 시드를 만들었다면 자금을 옮겨야 하나요?
Coinkite에 따르면, 영향을 받는 펌웨어에서 만들었더라도 12단어 시드에 대해 공정하고 독립적이며 기록되지 않은 주사위 굴림을 최소 50회 사용했거나, 24단어 시드에 대해 약 256비트 엔트로피에 해당하는 99회 이상의 굴림을 사용했다면, 난수 생성기 결함만으로는 위험한 것으로 보지 않습니다 . 여기서는 횟수보다 조건이 더 중요합니다. 굴림은 실제로 무작위여야 하고, 물리적으로 독립적이어야 하며, 기록하거나 사진으로 남긴 적이 없어야 합니다. 조작된 주사위나 익숙하지 않은 주사위를 사용했거나, 기록된 순서를 재사용했거나, 최소 횟수를 충족했는지 기억나지 않는다면 해당 시드는 검증되지 않은 것으로 보고 이전하세요. Coldcard의 수정 후 문서는 이제 사용자 엔트로피 단계를 필수로 만들었고, 기기 난수를 시드 생성에서 완전히 배제하는 "Dice Rolls Only" 워크플로도 제공합니다 .
펌웨어 업데이트만으로 이미 손상된 시드를 고칠 수 있나요?
아니요. 펌웨어는 앞으로 생성될 시드의 생성 과정을 고칠 뿐, 결함이 있는 경로에서 이미 만들어진 시드에 엔트로피를 나중에 추가할 수는 없습니다. 핫픽스는 빌드에서 MicroPython의 폴백 소프트웨어 PRNG를 제외하고, 잘못된 함수가 조용히 해석되는 일이 없도록 빌드 시점 RNG 심볼 검사를 추가했습니다. 또한 이제 마스터 시드 생성은 매번 세 개의 독립적인 하드웨어 소스, 즉 STM32 진성 난수 생성기와 두 보안 요소 SE1 및 SE2에서 새 엔트로피를 가져옵니다 . 이 중 어떤 것도 이미 유통 중인 키에는 영향을 주지 않습니다. Coinkite의 이전 절차는 명확합니다. 펌웨어를 업데이트하고, 패치된 기기에서 완전히 새로운 시드를 생성한 뒤, 백업과 수신 주소를 확인하고, 테스트 거래를 보내고, 남은 자금을 옮긴 다음, 기존 백업을 폐기해야 합니다 .
BIP-39 패스프레이즈가 영향을 받은 시드를 보호해 주나요?
강력하고 고유한 BIP-39 패스프레이즈는 공격자가 기본 시드를 재구성한 뒤에도 추가로 넘어야 하는 독립적인 장벽을 만들기 때문에 공격 비용을 실질적으로 높입니다. 하지만 보호 수준은 결국 패스프레이즈 자체의 품질에 달려 있습니다. 짧거나 흔하거나 패턴이 있거나 재사용된 패스프레이즈는 여전히 추측될 수 있으며, 공격자가 이미 시드 공간을 다룰 수 있는 후보 집합으로 좁혔다면 그 작업에 사전 공격이나 자격 증명 재사용 공격을 결합할 수 있습니다. Coinkite는 패스프레이즈 사용 여부와 관계없이 새 시드로 이전할 것을 권장합니다 . 패스프레이즈는 시간을 벌어주는 장치로 보고, 패치된 펌웨어에서 시드를 다시 생성하는 일을 대체하는 수단으로 보지 마세요.
Coldcard 엔트로피 악용으로 도난당한 비트코인은 얼마나 되나요?
Galaxy Research는 높은 신뢰도로 최소 1,719 BTC, 약 1억 1,100만 달러 규모를 확인했으며, 식별된 모든 공격 차수를 합친 총 손실은 2,055 BTC, 약 1억 3,000만 달러에 이를 수 있다고 추정합니다 (video: PolarByte). 첫 번째 스윕은 2026년 7월 30일 01:10 UTC에 시작되어 41분 만에 1,196개 주소에서 1,082.65 BTC, 약 7,020만 달러를 빼냈습니다 . 의심되는 네 번째 차수에서는 8월 4일 709개 주소에서 449 BTC가 이동한 것으로 표시되었습니다. 8월 7일 기준 도난 코인의 약 90%는 아직 이동하지 않았고, Galaxy는 공격자 주소를 미국 연방 법집행기관, 거래소, 조사 업체들과 공유했습니다. Elliptic, TRM Labs, Galaxy, Block도 모두 조사 중입니다 . 귀속 작업이 계속되는 동안 수치는 잠정적입니다.