MilkSad: bx 시드 취약점 (CVE-2023-39910)

연구 . 취약점

MilkSad: bx 시드 취약점 (CVE-2023-39910)

libbitcoin-explorer의 bx seed 명령어로 생성된 지갑은 실제 무작위성이 아닌 시계에서 엔트로피를 가져왔기 때문에, 예측이 가능하며 정당한 소유자가 복구할 수 있습니다.

2026년 7월 업데이트 · KeychainX — 2017년부터 지갑 복구 서비스 제공

CVE-2023-39910으로 등록된 MilkSad는 암호화폐 역사상 가장 명백한 약한 난수 생성 오류 중 하나입니다. 이 문제는 libbitcoin-explorer의 bx seed 명령어로 시드가 생성된 지갑에 영향을 미칩니다. 이 이름은 “milk sad…”로 시작하는, 가능한 시드 중 가장 취약한 시드의 니모닉에서 유래했습니다. 이 페이지에서는 해당 결함에 대해 설명하고, 영향을 받은 지갑 소유자가 복구할 수 있는 방법을 안내합니다.

MilkSad 결함이란 무엇인가

지갑을 생성하려면 진정한 무작위성이 필요합니다. 반면 bx 시드 도구는 시스템 시간을 초 단위 (32비트 값)로 사용하여 메르센 트위스터 (MT19937) 의사난수 생성기에 시드를 부여했습니다. 이로 인해 전체 키 공간이 극도로 축소됩니다. 천문학적으로 많은 시드 조합이 가능한 대신, 약 40억 개 정도밖에 남지 않으며, 실제로는 생성 시점이 대개 특정 시간 범위 내에서 알려져 있기 때문에 그 수는 훨씬 더 적습니다. 지갑이 언제 생성되었는지 대략적으로 아는 사람이라면 누구나 해당 지갑에서 생성된 정확한 시드를 재현할 수 있습니다.

누가 영향을 받나요?

bx seed에서 시드 엔트로피를 가져온 모든 지갑은, 해당 도구에 결함이 존재했던 기간(대략 2011년~2023년) 동안 영향을 받았습니다. 여기에는 libbitcoin-explorer를 직접 사용한 사용자는 물론, 무엇보다도 내부적으로 bx seed를 호출하여 니모닉을 생성하는 튜토리얼이나 스크립트를 따랐던 모든 사용자가 포함됩니다. 만약 여러분의 BIP39 문구가 이러한 방식으로 생성되었다면, 그 문구는 애초에 보안성을 갖지 못했습니다. 해당 문구는 열거 가능한 소수의 조합 중 하나에 불과했기 때문입니다.

타임 시드가 치명적인 이유

메르센 트위스터(Mersenne Twister)는 결정론적입니다. 즉, 동일한 시드(seed)는 항상 동일한 스트림을 생성합니다. 따라서 시드 값이 유일한 비밀이며, 이 경우 그 값은 단순히 타임스탬프에 불과했습니다. 지갑을 재현하는 과정은 다음과 같습니다. 타당한 생성 시간대 내의 후보 초(seconds)를 모두 순회하며, 각 초에 대해 동일한 MT19937 알고리즘을 실행해 동일한 엔트로피를 생성하고, 그 결과로 도출된 니모닉과 주소를 산출한 뒤, 알려진 주소와 대조하는 것입니다. 하루는 86,400초에 불과하고 1년은 약 3,100만 초이므로, 일반 하드웨어에서도 검색은 빠르게 완료됩니다. 이는 다른 도구에서 발생한 랜드스톰(Randstorm)의 결함 — 예측 가능한 난수 — 과 동일한 유형의 문제입니다.

소유주에게 회복 과정이 어떻게 진행되는지

MilkSad를 위험하게 만드는 바로 그 예측 가능성 덕분에, 피해를 입은 지갑도 정당한 소유자가 되찾을 수 있습니다. 만약 문제가 있는 도구를 사용하여 지갑을 생성한 후 나중에 니모닉을 분실한 경우, 저희가 이를 재생성해 드릴 수 있습니다. 대략적인 생성 날짜와 지갑의 알려진 주소 하나만 있으면, MT19937 파생 방식을 통해 타임스탬프 범위를 샅샅이 검색하여 주소가 일치할 때까지 확인한 뒤, 정확한 시드를 재구성합니다. 이 작업은 귀하가 소유하고 있으며 소유권을 입증할 수 있는 지갑에 대해서만 수행됩니다. 이는 자금을 소유자에게 반환하기 위한 것이지, 도난을 조장하기 위한 것이 아닙니다.

해당 사항이 있다고 생각되시면

만약 본인의 지갑이 bx 시드나 이를 기반으로 한 도구를 사용하여 생성되었고, 아직 자금이 남아 있다면 해당 지갑이 해킹당한 것으로 간주하십시오. 가능한 한 빨리 제대로 무작위화된 시드로 생성한 새 지갑으로 자금을 옮기십시오. 다른 누구라도 기존 지갑을 다시 생성할 수 있기 때문입니다. 이미 지갑에 접근할 수 없는 상태라면, 바로 이 결함 덕분에 복구가 가능합니다. 공격자가 사용할 방법과 똑같은 방법으로 코인을 되찾을 수 있기 때문입니다.

얼마나 큰 위험이 있었는가

40억 개의 시드로 구성된 키 공간의 결과로, 열거 공격을 수행하는 누구든지 영향을 받은 지갑을 대량으로 털어갈 수 있게 되었으며, 실제로 일부 지갑은 그렇게 당하기도 했습니다. 이 결함이 널리 사용되는 명령줄 도구에 존재했기 때문에, “안전한 시드 생성”을 위해 해당 도구를 호출한 모든 스크립트, 튜토리얼 및 하위 프로젝트로 취약성이 확산되었습니다. 이것이 바로 약한 난수 생성 버그가 지닌 은밀한 위험입니다. 버그가 스스로 드러나지 않고, 지갑은 정상적으로 보이며, 니모닉도 다른 12개의 단어와 다를 바 없어 보입니다. 누군가가 시드 공간을 열거하기 전까지는 이 취약점이 눈에 띄지 않습니다. 소유자 입장에서 실질적으로 유의해야 할 점은 잔액이 언제든 사라질 수 있다는 것이므로, 영향을 받은 지갑의 자금은 즉시 새로운 지갑으로 옮겨야 합니다.

MilkSad는 단발성 실수가 아닙니다. 이는 지갑의 난수 생성원이 시계, 브라우저의 특이점, 결함이 있는 플랫폼 생성기 등 예측 가능한 요소에서 비롯된 일련의 실패 사례 중 하나입니다. Randstorm은 초기 브라우저 지갑의 엔트로피를 무너뜨렸고, 2013년 안드로이드 SecureRandom 결함은 반복되는 서명 논스(nonce)를 통해 키를 유출시켰으며, 2014년 이더리움 프리세일 생성기는 프로세스의 일부를 브라우저의 Math.random에 의존했습니다. 이들 사례의 공통점은 암호학 자체는 건전했으나 시드가 그렇지 않았다는 점이며, 모든 경우에서 도난을 가능하게 한 바로 그 예측 가능성 덕분에 정당한 소유자가 자산을 복구할 수도 있다는 것입니다. 이는 우리 연구의 핵심 축을 이루는 부분입니다. 왜냐하면 “분실된” 초기 암호화폐의 상당 부분은 실제로는 재구성이 가능한, 무작위성이 취약한 암호화폐이기 때문입니다.

정보 공개 및 당사의 업무

MilkSad는 2023년 milksad.info 권고문을 작성한 보안 연구원들에 의해 공개되었으며, CVE-2023-39910이 할당되었습니다. 이 취약점을 발견한 공로는 그들에게 있습니다. KeychainX의 기여는 복구 측면에 있습니다. 당사는 취약한 난수 생성 복구와 관련된 광범위한 연구의 일환으로(밀접하게 관련된 브라우저 지갑 사례에 대해서는 당사의 Randstorm 연구 참조), 영향을 받은 지갑 소유자들을 위해 타임 시드 재구성을 구축하고 실행했습니다. 전체 기술적 공개 내용은 원본 권고문을 참조하시기 바랍니다.

자주 묻는 질문

MilkSad란 무엇인가요?

libbitcoin-explorer의 bx seed 명령어에 존재하는 약한 엔트로피 취약점(CVE-2023-39910)으로, 이 명령어는 32비트 시스템 시간을 사용하여 메르센 트위스터(Mersenne Twister)의 시드를 생성함으로써, 결과적으로 생성된 시드가 예측 가능하고 열거 가능해지게 만들었습니다.

제 지갑에도 영향을 미치나요?

시드가 bx seed를 사용하거나 이를 활용한 도구/튜토리얼을 통해 생성된 것이라면, 그렇습니다. 해당 시드 문구의 보안성은 애초에 존재하지 않았으므로, 자금을 제대로 무작위화된 시드가 있는 지갑으로 옮기십시오.

시드를 분실했을 경우, MilkSad 지갑을 복구할 수 있나요?

대부분의 경우, 소유자에게는 그렇습니다. 대략적인 생성 날짜와 알려진 주소가 있다면, 주소가 일치할 때까지 동일한 도출 과정을 통해 타임스탬프 범위를 샅샅이 훑어가며 시드를 재생성합니다.

밀크사드를 누가 발견했나요?

milksad.info 보안 권고문을 작성한 연구진은 2023년에 이 취약점(CVE-2023-39910)을 공개했다. KeychainX는 영향을 받은 사용자들의 복구 작업을 지원하고 있다.

회복 비용은 얼마인가요?

성과 기반: 지갑을 회수할 경우에만 회수 금액의 일정 비율을 수수료로 받으며, 선불 수수료는 없습니다.

조잡한 도구로 만든 지갑인가요?

만약 귀하의 시드가 BX 시드에서 유래했을 가능성이 있고 접근 권한을 상실하셨다면, 복구할 수 있을 가능성이 높습니다. 지갑 주소와 대략적인 날짜를 알려주시면, 24시간 이내에 정직하게 평가해 드리겠습니다.

KeychainX에 문의하기 →