불충분한 엔트로피, 암호화폐에서 수백억 원이 사라지는 이유

엔트로피 기준이 강제되지 않으면, 다음 수십억 달러 손실은 이미 진행 중일 수 있어요.

Author logo
Patrick Dike-Ndulue
업데이트됨
Post image

2026년 7월 31일, 한 공격자가 약 25분 만에 500여 개의 비트코인 지갑을 비웠어요. 총 594 BTC, 약 3,800만 달러에 달하는 금액이 이동됐고, 피해자들은 모두 이런 사태를 막으려고 하드웨어 지갑을 구매했던 사람들이었죠.
 

Coinkite disclosed that COLDCARD firmware had been generating keys using a software pseudorandom number generator rather than the hardware generator built into the device. Two functions in the codebase shared the same name and signature, so the linker selected the wrong one, and the build produced no warning.
 

이 사건은 긴 목록의 최신 사례예요. 지난 10년간, 최대 규모의 암호화폐 손실은 복잡한 해킹이 아니라 충분히 무작위적이지 않은 난수 생성에서 비롯된 경우가 더 많았어요.

개인 키의 진짜 기반은?

암호화폐 지갑은 앱, 브라우저 확장, 하드웨어 등 어떤 형태든 한 가지 핵심에 의존해요. 바로 아무도 예측하거나 재현할 수 없는 숫자를 제대로 생성하는 것이죠. 여기서 엔트로피란, 생성된 숫자의 예측 불가능성의 양을 의미해요.


엔트로피는 지갑이 개인 키를 만들 때 사용하는 원초적인 무작위성으로, 비트 단위로 측정돼요. 비트 수가 많을수록 공격자가 찾아야 할 키 공간이 커져요. 이 엔트로피는 지갑을 처음 설정할 때 들어오고, 그 이후 생성되는 모든 키, 주소, 서명은 고정된 수학적 규칙을 따르기 때문에 추가적인 무작위성은 더 이상 유입되지 않아요.

엔트로피 소스

원칙적으로, 지갑은 pseudorandom number generator (PRNG)에서 무작위값을 얻을 수 있어요. PRNG는 소량의 “진짜” 엔트로피를 필요한 만큼 확장해주는 알고리즘이지만, 시작 시드 자체가 예측 불가능해야만 안전해요. 

브라우저 탭에서 실행되는 소프트웨어나 막 부팅한 스마트폰에서는, 프로그램이 외부의 예측 불가능한 입력(즉, “노이즈”) 없이 거의 감각 차단 상태에서 시작되는 경우가 많아요. 이런 노이즈는 프로세서의 타이밍 변화, 마우스 움직임, 특수 하드웨어 등에서 올 수 있어요.

기기가 켜진 직후 몇 밀리초 동안은 이런 노이즈 풀이 비어 있거나 초기화가 덜 된 상태일 수 있어요. 암호화 라이브러리가 너무 일찍 난수 생성기를 호출하면, 무작위값이 기술적으로는 랜덤이지만 실제로는 공격자가 모두 시도해볼 수 있을 만큼 좁은 공간에서 뽑힐 수 있죠.


브라우저도 자체적인 한계가 있어요. JavaScript의 Math.random()은 보안을 위해 설계된 함수가 아니고, 더 안전한 crypto.getRandomValues()조차 운영체제의 엔트로피 풀에 의존해요. 이 풀 자체가 모바일 환경, 가상 머신, IoT 기기 등에서 약할 수 있기 때문에, 무작위성은 개인 키 생성 코드에 도달하기 전에 이미 취약해질 수 있어요.


트랜잭션 서명에서의 무작위성

비트코인이나 이더리움 트랜잭션에 서명할 때, 개인 키를 직접 사용하는 게 아니라 nonce(논스)라는 일회성 무작위 숫자를 생성해서, 개인 키와 함께 ECDSA(타원곡선 디지털 서명 알고리즘)에 입력해 서명을 만들어요.

하지만 여기서 중요한 점: 같은 논스를 같은 개인 키로 두 번 사용하면, 수학적으로 공격자가 개인 키를 알아낼 수 있어요.
ECDSA 서명은 (r, s)라는 숫자 쌍으로, 다음과 같은 요소를 포함하는 특정 방정식을 만족해야 해요:

  • 개인 키 (d)
  • 논스 (k)
  • 해시된 트랜잭션 메시지 (z)

k가 두 개의 서로 다른 메시지에서 같으면, 두 식이 나란히 정렬되어 누구나 두 서명을 보고 k를 계산할 수 있어요. k가 알려지면 d — 즉, 개인 키도 곱셈과 모듈러 역수 연산만으로 바로 도출돼요.


2013년, flaw in Android’SecureRandom function caused early Bitcoin wallets on the platform to produce predictable nonces. 당시 플랫폼의 초기 비트코인 지갑들은 예측 가능한 논스를 만들어, 사용자들이 문제를 인지하기도 전에 자금이 사라졌어요.


일반적인 코드 오류와 달리, 무작위성 품질이 낮은지는 소스 코드를 읽는 것만으로는 알 수 없어요. 함수 호출이 겉보기엔 멀쩡해 보여도, 실제로 생성되는 비트를 측정하고 통계적으로 예측 불가능성을 검증하지 않으면, 치명적인 약점이 몇 달, 몇 년 동안 숨어 있다가 인내심 많은 공격자에게 노출될 수 있어요.

 

엔트로피가 끈질긴 취약점으로 남는 이유는 다음과 같이 정리할 수 있어요:

  • 시작 시 엔트로피 부족: 막 켜진 기기는 환경 노이즈가 충분히 쌓이지 않아 PRNG 시드가 약할 수 있어요.

  • 브라우저 한계: JavaScript의 Math.random()은 안전하지 않고, crypto.getRandomValues()도 호스트 환경의 엔트로피 풀에 의존해요.

  • 안전하지 않은 도구: 커스텀 주소 생성기, 오프라인 스크립트, 관리가 부실한 라이브러리는 속도나 재현성을 위해 무작위성을 희생하는 경우가 많아요.

  • 사용자 입력: '브레인월렛'이나 사용자가 직접 고른 문구는 사전 대입 공격에 쉽게 뚫려요.

암호학자들은 오래전부터 하드웨어 난수 생성기(HRNG, true RNG)를 선호해 왔어요. HRNG는 전자 지터, 열 노이즈, 방사성 붕괴 등 물리적 현상을 무작위 비트로 변환하고, 스스로 고장이나 편향을 지속적으로 테스트할 수 있어요.

하드웨어가 해결하는 방법

보안이 중요한 시스템에서는 해답이 명확해요. 인증된 HRNG가 내장된 칩 내부에서 키를 생성하고, 그 키가 절대 복제되지 않도록 하는 것이죠.

A secure element is a purpose-built, tamper-resistant microcontroller. It is a fortified chip designed to store secrets and perform cryptographic operations without revealing the underlying keys. They are the same class of component used in passports to prevent cloning, SIM cards to authenticate devices to mobile networks, and contactless payment cards to authorize transactions.


보안 칩(secure element)에는 물리적 노이즈(열 변화, 오실레이터 지터 등)에서 무작위성을 얻는 하드웨어 난수 생성기를 탑재할 수 있어요. 수학적 알고리즘만으로는 얻을 수 없는 예측 불가능성을 제공하죠. 


이런 HRNG는 '한 번만' 쓰는 장치가 아니에요. such as NIST SP 800-90B와 같은 표준에 따라, 모든 출력 스트림을 지속적으로 검사해 통계적 편향, 고정 비트, 기타 결함이 없는지 건강 검진을 해요. 이상이 감지되면 칩은 즉시 키 생성을 중단할 수 있어요. 좋은 하드웨어 지갑에서는 보안 칩의 HRNG가 칩 내부에서 직접 키 생성 프로세스에 무작위값을 공급해요. 


모든 '하드웨어'가 같은 건 아니에요

하드웨어 지갑이라는 용어에는 다양한 설계가 포함돼 있고, 무작위성 보호와 키 격리 수준도 천차만별이에요.


저가형은 범용 마이크로컨트롤러 기반으로, 물리적 공격이나 사이드채널 공격에 특화되지 않은 칩을 사용해요. 이들 중 상당수는 기본적인 난수 생성기만 탑재돼 있죠. 


하지만 이 경우도 내부 상태에서 시드를 뽑는 PRNG일 뿐, 표준에 맞는 HRNG가 아닐 수 있어요. 이런 설계에서는 펌웨어에서 키가 생성되고, 결과 개인 키가 RAM이나 플래시 메모리에 임시 저장될 수 있어요. 즉, 펌웨어 결함, 사이드채널 공격, 물리적 변조 등이 발생하면 키가 노출될 수 있다는 뜻이에요.
 

반면, 보안 칩 기반 지갑은 엔트로피 소스와 키 생성 로직 모두를 변조 방지 환경에 넣어요. 이 모델은 엄격한 접근 제어도 적용해, 암호 연산(서명, 파생 등)을 칩 내부에서만 처리하고, 최종 서명이나 공개 키만 외부로 내보내며 비밀 키는 절대 나오지 않아요.

이미 존재하는 표준

무작위성 문제는 미해결 과학이 아니에요. 암호학자들은 이미 좋은 엔트로피가 어떤 모습이어야 하는지 표준화했어요. 미국 National Institute of Standards and Technology (NIST)는 SP 800-90 시리즈를 통해 문제를 명확히 나눠 설명하고 있어요.


SP 800-90B는 엔트로피 소스(예측 불가능한 비트를 만들어내는 물리적/소프트웨어적 프로세스)를 어떻게 평가해야 하는지 규정해요. 각 비트스트림의 진짜 엔트로피를 통계적으로 분석하고, 내장된 건강 검진으로 편향이나 결함을 지속적으로 모니터링해야 해요.


SP 800-90C 는 이런 엔트로피를 deterministic random bit generators(DRBG)와 결합해, 한쪽 소스가 약해져도 출력이 강하게 유지되도록 하는 방법을 설명해요.


표준을 지키는 장치는 한 번만 난수를 생성하고 끝나는 게 아니라, 항상 스스로를 점검해요. HRNG의 노이즈 패턴이 변하거나, 비트가 '고정'되거나, 출력이 통계 기준을 통과하지 못하면 시스템이 키 생성을 즉시 중단해 약한 키 발행을 막아요.

내 키가 위험한지 어떻게 알 수 있을까요?

대부분의 사용자는 엔트로피를 직접 측정할 수 없지만, 내 키가 언제 어디서 어떻게 생성됐는지는 점검할 수 있어요. “웹페이지에서” 혹은 “오래된 Android 앱에서” 키를 만들었다면, 특히 2010년대 중반 이전이라면, 해당 키는 약할 가능성이 높아요. 가장 안전한 방법은 인증된 무작위성을 사용하는 하드웨어 지갑에서 새 지갑을 만들고, 자산을 그쪽으로 옮기는 거예요.

엔트로피 공격 연대표 

약한 엔트로피는 공격자가 역추적할 필요조차 없게 만들어요. 공격자는 취약한 생성기가 만들 수 있는 키 후보를 모두 뽑아 각 주소를 블록체인에서 확인해 잔고가 있으면 바로 탈취할 수 있죠. 대표 사례는 다음과 같아요:

  • 2018—IOTA 시드 생성기 사기: 사용자가 웹사이트에서 지갑 시드를 만들도록 안내받았고, 운영자가 그 시드를 복사해 두었다가 나중에 자금을 빼돌렸어요. 약 400만 달러가 도난당했죠. 이 경우 무작위성은 0이었어요. 공격자는 이미 모든 숫자를 알고 있었으니까요.
     

  • 2019—Blockchain Bandit: 보안 연구진이 실제로 732개의 약한 이더리움 개인 키를 발견했어요. 알려지지 않은 공격자가 수년간 해당 주소를 지켜보다가 자금이 입금되면 약 45,000 ETH를 바로 빼갔어요.
     

  • 2022—Profanity vanity 주소 대참사: 오픈소스 Profanity 툴이 32비트 엔트로피(약 40억 개 경우의 수)로 커스텀 이더리움 주소를 만들었고, 최신 GPU로 몇 시간 만에 전수조사가 가능했어요. 런던의 마켓메이커 Wintermute는 이 방식으로 약 1억 6,000만 달러를 잃었어요.
     

  • 2023—Trust Wallet 브라우저 확장 취약점: Ledger 보안팀의 공개에 따르면, 브라우저 확장 프로그램이 약 32비트 엔트로피로 지갑 시드를 생성했어요. 문제는 빠르게 수정됐고 일부 사용자는 보상받았지만, 몇 달 동안 지갑을 생성한 모든 사용자가 위험에 노출됐었죠.
     

  • 2025—LuBian 의혹: Arkham의 주장은 아직 입증되지 않았지만, 127,426 BTC 손실이 예측 가능한 키 생성 때문이라면, 단 한 번의 실수가 수십억 달러 자산을 날릴 수 있다는 대표 사례가 될 거예요. 
     

  • 2026: COLDCARD: Coinkite disclosed that a software pseudorandom generator had replaced the intended hardware generator in shipped firmware. The fallback entered the upstream dependency in May 2018 and reached key generation in March 2021.

    Coinkite estimates about 40 bits of effective search space on Mk3 hardware, and about 72 bits on later models that mixed in secure element data. Both figures sit below the 128-bit target.

    A guard existed to prevent exactly this. It tested whether a configuration macro was defined, rather than whether its value was non-zero; the macro was set to zero, so the check passed and the error never fired.

COLDCARD에서 옮길까 고민 중이라면?

Tangem은 인증된 보안 칩 내부에서 하드웨어 난수 생성기를 사용해 키를 만들어요. 

시드 문구 때문에 더 이상 고민하고 싶지 않다면, 시드 없는 설정으로 12개 또는 24개 단어를 적거나 사진 찍거나 잃어버릴 걱정 없이, 과거 지갑 해킹의 주요 원인을 원천 차단할 수 있어요.

Cure53, Kudelski, Riscure의 독립 감사를 거쳤고, 바로 이런 순간을 위해 설계됐어요.

진짜 무작위성이 보장되는 곳으로 코인을 옮기세요. Tangem Wallet을 만나보세요.

Author logo
작가 Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.

Author logo
검토자: Patrick Dike-Ndulue

Senior editor covering crypto, onchain equities, and technology.