2021년 3월, 펌웨어 통합 과정에서 발생한 오류로 인해 콜드카드 장치가 시드 구문을 생성할 때 전용 하드웨어 엔트로피 칩을 사용하지 못하고, 대신 소프트웨어 기반 유사 난수 생성기(Pseudo-Random Number Generator, PRNG)에 의존하게 되었다 . 이 버그는 펌웨어 버전 4.0.1부터 4.1.9까지 영향을 미쳤으며, 이후 분석에서 Mk3 장치의 버전 5.0.3까지 그 범위가 확장되었다 .
영향을 받은 Mk3 장치에서 유효 엔트로피는 예상된 128비트에서 최저 40비트 수준으로 붕괴되어, 공격자는 물리적 접근, 피싱, 악성코드 없이도 오프라인에서 시드 구문을 무차별 대입(브루트 포스) 공격으로 알아낼 수 있게 되었다 . 코인카이트 자체 분석 결과, 일부 Mk3 시드는 약 40비트의 엔트로피만을 가지고 있었던 것으로 확인되었다 . 하드웨어 난수 생성기의 작동 여부를 확인하는 펌웨어 점검 기능 자체가 같은 업데이트로 인해 손상되면서, 이 버그는 5년 넘게 발견되지 않았다 .
블록(Block, 옛 Square) 연구진은 7월 31일 상세한 기술 분석 보고서를 발표하고 근본 원인을 콜드카드의 난수 생성 코드 통합 오류로 지목했다. 보고서는 "COLDCARD 펌웨어에는 RNG 통합 오류가 있어, 'ngu.random'이 STM32 하드웨어 RNG 대신 MicroPython의 결정론적 Yasmarang 대체 함수를 사용하게 한다"고 설명했다 . 이는 시드 구문이 진정한 하드웨어 무작위성 대신 마이크로컨트롤러의 일련번호나 시스템 카운터 같은 예측 가능한 값으로 생성되었음을 의미한다 .
손실 추정치는 3,800만 달러에서 1억 3,000만 달러까지 다양하다. 이렇게 큰 차이가 나는 것은 모순이 아니라, 공격이 진행됨에 따라 연구자들이 온체인 분석을 확장하며 포착한 시점이 각각 다르기 때문이다.
| 추정 손실 (BTC) | 약 미화 환산액 | 출처 / 시점 |
|---|---|---|
| 594 BTC | ~3,800만 달러 | 코인카이트 첫 공지, 휴면 지갑 500+개 |
| 1,082.65 BTC | ~7,020만 달러 | 갤럭시 리서치, 첫 41분 대규모 인출 |
| 1,367 BTC | 갤럭시 리서치, 8월 초 추적 | |
| 1,816 BTC | ~1억 1,600만 달러 | 포브스 / TRM 랩스, 5,200+개 주소 |
| 2,055 BTC | ~1억 3,000만 달러 | 갤럭시 리서치, 4차 인출, 7,300+개 주소 |
코인카이트의 대응은 신속했지만, 취약점이 시드 생성 자체에 있었기 때문에 펌웨어 패치만으로는 이미 생성된 시드를 복구할 수 없다는 근본적인 한계에 직면했다 .
더 넓은 보안 연구 커뮤니티도 신속하게 움직여 익스플로잇의 규모를 파악하고 근본 원인을 추적했다.
2021년 3월, 펌웨어 통합 과정에서 발생한 오류로 인해 콜드카드 장치가 시드 구문을 생성할 때 전용 하드웨어 엔트로피 칩을 사용하지 못하고, 대신 소프트웨어 기반 유사 난수 생성기(Pseudo-Random Number Generator, PRNG)에 의존하게 되었다 . 이 버그는 펌웨어 버전 4.0.1부터 4.1.9까지 영향을 미쳤으며, 이후 분석에서 Mk3 장치의 버전 5.0.3까지 그 범위가 확장되었다 .
영향을 받은 Mk3 장치에서 유효 엔트로피는 예상된 128비트에서 최저 40비트 수준으로 붕괴되어, 공격자는 물리적 접근, 피싱, 악성코드 없이도 오프라인에서 시드 구문을 무차별 대입(브루트 포스) 공격으로 알아낼 수 있게 되었다 . 코인카이트 자체 분석 결과, 일부 Mk3 시드는 약 40비트의 엔트로피만을 가지고 있었던 것으로 확인되었다 . 하드웨어 난수 생성기의 작동 여부를 확인하는 펌웨어 점검 기능 자체가 같은 업데이트로 인해 손상되면서, 이 버그는 5년 넘게 발견되지 않았다 .
블록(Block, 옛 Square) 연구진은 7월 31일 상세한 기술 분석 보고서를 발표하고 근본 원인을 콜드카드의 난수 생성 코드 통합 오류로 지목했다. 보고서는 "COLDCARD 펌웨어에는 RNG 통합 오류가 있어, 'ngu.random'이 STM32 하드웨어 RNG 대신 MicroPython의 결정론적 Yasmarang 대체 함수를 사용하게 한다"고 설명했다 . 이는 시드 구문이 진정한 하드웨어 무작위성 대신 마이크로컨트롤러의 일련번호나 시스템 카운터 같은 예측 가능한 값으로 생성되었음을 의미한다 .
손실 추정치는 3,800만 달러에서 1억 3,000만 달러까지 다양하다. 이렇게 큰 차이가 나는 것은 모순이 아니라, 공격이 진행됨에 따라 연구자들이 온체인 분석을 확장하며 포착한 시점이 각각 다르기 때문이다.
| 추정 손실 (BTC) | 약 미화 환산액 | 출처 / 시점 |
|---|---|---|
| 594 BTC | ~3,800만 달러 | 코인카이트 첫 공지, 휴면 지갑 500+개 |
| 1,082.65 BTC | ~7,020만 달러 | 갤럭시 리서치, 첫 41분 대규모 인출 |
| 1,367 BTC | 갤럭시 리서치, 8월 초 추적 | |
| 1,816 BTC | ~1억 1,600만 달러 | 포브스 / TRM 랩스, 5,200+개 주소 |
| 2,055 BTC | ~1억 3,000만 달러 | 갤럭시 리서치, 4차 인출, 7,300+개 주소 |
코인카이트의 대응은 신속했지만, 취약점이 시드 생성 자체에 있었기 때문에 펌웨어 패치만으로는 이미 생성된 시드를 복구할 수 없다는 근본적인 한계에 직면했다 .
더 넓은 보안 연구 커뮤니티도 신속하게 움직여 익스플로잇의 규모를 파악하고 근본 원인을 추적했다.