연구 . 원저
사전 판매 단계의 PRNG 및 IV 취약점
‘약한 무작위성’ 연구의 일부입니다. ‘암호화폐 지갑의 약한 무작위성’ 개요를 참조하세요.
2014년 프리세일 지갑 생성기는 본래 사용해서는 안 될 부분에서 브라우저의 Math.random 함수를 사용했습니다. 본 연구에서는 이러한 예측 가능성 덕분에, 그렇지 않았다면 잠겨 있었을 프리세일 지갑을 복구할 수 있는 방법이 있는지 살펴봅니다.
이 내용은 KeychainX의 독자적인 연구 결과이며, 완성된 익스플로잇이 아닌 공개 조사 형태로 발표합니다. 2014년 이더리움 프리세일 지갑 생성기는 암호화 매개변수를 생성하는 과정에서 브라우저의 난수 생성 기능( Math.random() )을 사용했습니다. 난수가 예측 가능한 경우, 지갑 복구가 가능할 수 있습니다. 다음은 저희가 발견한 내용입니다.
배경: 프리세일 지갑이 어떻게 만들어졌는지
사전 판매 지갑은 PBKDF2와 AES를 사용하여 비밀번호로 개인 키를 암호화하는 JSON 키스토어입니다. 암호화에는 초기화 벡터(IV)와 기타 지갑별 값이 필요하며, 이러한 값들은 지갑 생성 시 브라우저에서 생성되었습니다. 제대로 무작위화된 IV 자체는 비밀이 아닙니다. 하지만 생성기가 무작위성을 수집한 방식에 흥미로운 취약점이 존재하는데, 그 일부가 암호학적 소스가 아닌 Math.random() 에 의존했기 때문입니다.
Math.random이 왜 취약한가!
Math.random() 은 제한된, 대개 시간에서 파생된 상태를 시드로 사용하는 의사 난수 생성기이며, 본래 암호학 용도로 설계된 것이 아닙니다. 예측 불가능해야 할 값이 오히려 제한된 요소를 시드로 사용하는 Math.random() 을 통해 생성된다면, 가능한 값의 범위는 열거할 수 있을 정도로 작아집니다. 이는 Randstorm과 MilkSad의 원리와 동일합니다. 알고리즘 자체는 문제없지만, 시드가 예측 가능하다는 점입니다.
파이어폭스의 “undefinedundefined” 접힘 현상
우리가 발견한 핵심 사항은 특정 브라우저에서 나타나는 특이한 현상과 관련이 있습니다. 생성기는 마우스 이동 좌표를 엔트로피 소스로 혼합했으나, 파이어폭스에서는 특정 조건 하에서 해당 좌표가 “undefinedundefined”라는 리터럴 문자열로 반환되어 실질적인 엔트로피를 제공하지 못했습니다. 이런 상황이 발생하면, 알려지지 않은 무작위성은 나머지 소스인 밀리초 단위 타임스탬프로 집중됩니다. 그리고 그 타임스탬프에는 상한이 존재합니다. 왜냐하면 프리세일 지갑은 자금 입금 거래가 비트코인 체인에 반영된 시점 전후의 일정 시간 창 내에 생성되었기 때문입니다.
회복에 있어 이것이 의미하는 바는 무엇인가
이는 영향을 받은 지갑에 대한 검색 범위가 극적으로 축소된다는 것을 의미합니다. 만약 엔트로피가 실제로 온체인 자금 입금 시간으로 제한된 밀리초 단위의 타임스탬프로 축소된다면, 후보 공간은 열거 가능해지며, 타당한 시간 창을 대상으로 한 빔 검색(beam search)을 통해 생성기 상태를 재구성하는 구조화된 검색을 통해 암호 해독에 필요한 값을 재현할 수 있게 됩니다. 우리는 이 방법론을 개략적으로 설명했습니다. 이 방법은 파이어폭스에서 생성된 지갑의 특정 하위 집합에 대해서는 유망하지만, 모든 프리세일 지갑에 적용되는 만능 열쇠는 아닙니다. 대부분의 프리세일 지갑 복구는 여전히 우리가 별도로 문서화한 비밀번호 인코딩 문제로 귀결됩니다.
분실된 암호화폐에 있어 이것이 왜 중요한가
2014년 프리세일 지갑들은 암호화폐 업계 전체에서 가장 가치가 높은 휴면 자산 중 하나이며, 소유자가 더 이상 암호를 해독할 수 없어 상당 부분이 잠겨 있는 상태입니다. 지갑당 걸린 금액이 워낙 크기 때문에, 그 중 일부에 대해서라도 검색 범위를 좁혀줄 수 있는 신뢰할 만한 방법이라면 무엇이든 추구할 가치가 있습니다. 이것이 바로 적용 범위가 좁음에도 불구하고 우리가 PRNG 접근법을 진지하게 고려하는 이유입니다. 엔트로피 붕괴가 발생한 특정 지갑의 경우, 무제한 검색과 제한된 검색의 차이는 ‘회복 불가능’과 ‘회복 가능’의 차이를 의미하기 때문입니다. 회복 가능한 지갑의 범위를 비록 소폭이라도 넓혀주는 연구는 이 분야에서 막대한 가치를 지닙니다.
방법론에 대한 보다 심층적인 설명
구체적으로, 이 접근 방식은 ‘범위 제한 재구성(bounded reconstruction)’입니다. 첫째, 지갑의 온체인 내역을 통해 생성 시간을 포함하는 자금 조달 기간을 설정합니다. 둘째, 해당 기간 내의 각 후보 밀리초에 대해, 축소된 엔트로피를 전제로 했을 때 도출되었을 생성기 상태를 재구성하고, 이를 통해 생성되었을 암호화 매개변수를 도출합니다. 셋째, 암호화된 키스토어를 대상으로 해당 매개변수를 테스트하여, 도출 결과가 내부적으로 일관성이 있는지 여부에 따라 후보를 선정하거나 제외합니다. 빔 검색(beam search)을 통해 모든 가능성을 무작정 탐색하는 대신, 가장 유력한 후보 상태만을 선별하여 유지합니다. 이는 일괄 공격(batch attack)이 아닌, 지갑별로 세심하게 수행되는 작업으로, 특정 조건이 충족된 경우에만 적용된다는 점에서 적절한 방법입니다.
솔직한 근황
우리는 이를 현재 진행 중인 연구로 소개합니다. 특정 브라우저, 특정 엔트로피 붕괴, 그리고 명확히 제한된 자금 지원 기간 등 여러 조건이 모두 충족되어야 하며, 각 후보 지갑은 개별적으로 평가되어야 합니다. 우리가 이 내용을 공개하는 이유는, 현존하는 가장 가치 있는 휴면 지갑들에 대해 진정으로 새로운 시각을 제시하면서도 아직 충분히 연구되지 않은 측면이기 때문이며, 또한 유망하지만 아직 완성되지 않은 방법에 대해 투명하게 공개하는 것이 과장된 주장을 하거나 침묵을 지키는 것보다 지갑 소유자들에게 더 유용하기 때문입니다.
이 내용이 어떤 지갑에 적용될 수 있는지
적용 범위를 정확히 말하자면, 가장 유력한 후보는 마우스 좌표 엔트로피 소스가 오작동했던 기간 동안 파이어폭스에서 생성된 프리세일 지갑이며, 자금 입금 거래를 통해 생성 시점을 좁게 특정할 수 있는 경우입니다. 다른 브라우저에서 생성되었거나, 엔트로피 소스가 의도대로 작동했던 지갑들은 이러한 붕괴 현상을 보이지 않으므로 이 방법을 통해 해결할 수 없습니다. 이것이 바로 우리가 일괄적인 해결책을 약속하기보다는 각 지갑을 개별적으로 평가하는 이유입니다. 동일한 프리세일 JSON은 인코딩 방식이나 이 PRNG 방식을 통해 복구될 수도 있고, 둘 다 통해 복구되지 않을 수도 있으며, 특정 지갑과 그 온체인 맥락을 면밀히 검토해야만 어떤 방식이 적용되는지 알 수 있습니다.
당사의 문서
이 분석은 KeychainX가 휴면 상태의 프리세일 지갑을 조사하는 과정에서(당사의 ‘휴면 프리세일 ETH 연구’ 참조) 그리고 Randstorm 및 MilkSad와 공동으로 진행한 광범위한 ‘약한 무작위성’ 연구의 일환으로 자체적으로 개발한 것입니다. 본 분석 결과를 기록하기 위해 여기에 게시하며, 동일한 생성기를 연구하는 연구자분들의 협력을 환영합니다.
자주 묻는 질문
이 방법이 어떤 프리세일 지갑이든 열 수 있는 방법인가요?
아닙니다. 이는 특정 유형의 지갑, 즉 파이어폭스에서 생성되어 엔트로피가 손실된 지갑에 한해 유망한 연구 방향일 뿐, 보편적인 방법은 아닙니다. 대부분의 프리세일 복구 사례는 오히려 비밀번호 인코딩 문제에서 기인합니다.
‘undefinedundefined’ 소견이란 무엇입니까?
파이어폭스에서 생성기의 마우스 좌표 엔트로피 소스는 리터럴 문자열 ‘undefinedundefined’를 반환할 수 있으며, 이 경우 무작위성이 전혀 발생하지 않아 미지의 엔트로피가 제한된 밀리초 단위의 타임스탬프로 수렴하게 됩니다.
자금 조달 시기가 왜 중요한가요?
비트코인 자금 조달 거래가 발생한 시점과 거의 동시에 프리세일 지갑이 생성되었기 때문에, 온체인 시점을 기준으로 엔트로피가 수렴할 수 있는 타임스탬프 범위가 제한되며, 이로 인해 해당 범위를 모두 열거할 수 있게 됩니다.
이 연구는 이미 완료된 건가요?
아닙니다. 저희는 이를 명확한 방법론(특정 시간 창을 대상으로 한 빔 검색)을 갖춘 개방형 조사로 제시하며, 이는 일부 지갑에 적용되고 사례별로 개별적으로 평가됩니다.
제 프리세일 지갑을 검토해 주실 수 있나요?
네. 귀하의 특정 지갑에 비밀번호 인코딩 방식이 적용되는지, 이 PRNG 방식이 적용되는지(혹은 둘 다 해당되지 않는지)를 평가합니다.
사전 판매용 지갑이 잘 풀리지 않으시나요?
귀하의 특정 지갑에 인코딩 문제가 있는지, 아니면 이 PRNG 관련 문제가 적용되는지 평가해 드립니다. 현재 사용 중인 지갑 정보를 알려주시면 24시간 이내에 객관적인 평가 결과를 제공해 드리겠습니다.