Fundamentals ·

엔트로피란? 암호화폐 보안의 핵심 랜덤성


모든 암호화폐 지갑은 하나의 랜덤 숫자에서 시작됩니다. 여러분이 선택하는 비밀번호도, 여러분이 설계하는 패턴도 아닌, 물리적 세계에서 추출된 순수한 랜덤성입니다. 이 랜덤성을 엔트로피라고 하며, 여러분의 암호 자산이 안전한지 취약한지를 결정하는 가장 중요한 단일 요소입니다.

지갑 뒤의 엔트로피가 강하다면, 공격자가 여러분의 키를 찾기 위해 관측 가능한 우주의 원자 수보다 더 많은 조합을 탐색해야 합니다. 엔트로피가 약하다면, 자금은 몇 초 만에 도난당할 수 있습니다. 중간 지대는 없습니다.

엔트로피의 정의

암호학에서 엔트로피는 데이터의 예측 불가능성을 측정합니다. 비트 단위로 정량화됩니다. 1비트의 엔트로피는 단일 이진 선택을 나타냅니다: 앞면 또는 뒷면, 0 또는 1. 2비트의 엔트로피는 네 가지 가능한 결과를 제공합니다. 3비트는 여덟 가지를 제공합니다. 추가 비트마다 가능성의 수가 두 배로 늘어납니다.

공식은 간단합니다: n비트의 엔트로피는 2^n개의 가능한 값을 생성합니다.

이 기하급수적 성장이 엔트로피를 강력하게 만듭니다. 작은 숫자에서는 가능성이 관리 가능해 보입니다. 암호화폐에서 사용되는 비트 수에서는 이해할 수 없을 정도로 커집니다.

암호화폐 맥락에서 엔트로피는 비유나 추상적 개념이 아닙니다. 시드 구문, 개인키, 그리고 궁극적으로 주소를 생성하기 위해 결정론적 알고리즘에 공급되는 구체적이고 측정 가능한 랜덤성의 양입니다. 초기 엔트로피 이후의 모든 것은 수학적으로 파생됩니다. 엔트로피 자체만이 진정으로 랜덤해야 하는 유일한 부분입니다.

128비트 vs 256비트

시드 구문 생성 방법을 정의하는 BIP39 표준은 두 가지 주요 엔트로피 길이를 지원합니다:

128비트 (12단어 시드 구문)

  • 2^128개의 가능한 시드 구문 생성
  • 340,282,366,920,938,463,463,374,607,431,768,211,456 조합
  • 약 3.4 x 10^38

256비트 (24단어 시드 구문)

  • 2^256개의 가능한 시드 구문 생성
  • 약 1.16 x 10^77 조합
  • 관측 가능한 우주의 원자 수 추정치보다 많음

두 수준 모두 현재 기술에 대해 안전하다고 간주됩니다. 128비트의 엔트로피는 대부분의 소비자 지갑의 표준이며, 어떤 알려진 계산 방법으로도 실용적인 시간 내에 2^128개의 가능성을 탐색할 수 없습니다. 256비트 옵션은 최대 보호를 원하거나 미래의 컴퓨팅 발전이 우려되는 사용자를 위한 추가 보안 마진을 제공합니다. 자세한 비교는 시드 구문 무차별 대입은 얼마나 빠를까?를 참고하세요.

엔트로피 비트와 단어 수 사이의 관계는 간단한 규칙을 따릅니다: 11비트의 엔트로피마다 BIP39 단어 목록의 단어 하나에 매핑됩니다(2,048단어, 2^11 = 2,048). 12단어 구문은 128비트의 엔트로피와 4비트의 체크섬을 인코딩합니다. 24단어 구문은 256비트의 엔트로피와 8비트의 체크섬을 인코딩합니다. 이 과정의 전체 분석은 BIP39 설명을 참고하세요.

랜덤성의 소스: 하드웨어 RNG와 Web Crypto API

핵심 질문은: 엔트로피는 어디에서 오는가? 모든 난수 생성기가 동일하게 만들어지는 것은 아닙니다.

의사 랜덤 vs 암호학적으로 안전

표준 프로그래밍 랜덤 함수(JavaScript의 Math.random() 같은)는 의사 랜덤입니다. 수학 공식을 사용하여 랜덤하게 보이지만 완전히 결정론적인 숫자를 생성합니다. 동일한 시작 시드가 주어지면 매번 동일한 시퀀스를 생성합니다. 이것은 암호화폐 키 생성에 치명적으로 부적합합니다.

암호학적으로 안전한 난수 생성기(CSPRNG)는 하드웨어 소스의 진정한 물리적 랜덤성을 통합하여 이 문제를 해결합니다.

하드웨어 난수 생성기

최신 CPU에는 물리적 현상에서 엔트로피를 수확하는 전용 하드웨어 난수 생성기가 포함되어 있습니다:

  • Intel RDRAND/RDSEED: 실리콘 회로의 열 잡음 사용
  • ARM TrustZone TRNG: 하드웨어 수준 랜덤 비트 생성 활용
  • OS 수준 엔트로피 풀: Linux의 /dev/urandom, Windows의 CryptGenRandom, macOS의 SecRandomCopyBytes는 모두 인터럽트 타이밍, 디스크 시크 변동, 네트워크 패킷 도착 시간 같은 하드웨어 이벤트에 의해 공급되는 엔트로피 풀을 유지합니다

이러한 물리적 소스는 시스템의 소프트웨어 상태에 대한 완전한 지식을 가진 공격자도 예측할 수 없는 랜덤성을 생성합니다.

Web Crypto API

브라우저 기반 도구의 경우, Web Crypto APIcrypto.getRandomValues()를 통해 운영 체제의 암호학적 난수 생성기에 대한 접근을 제공합니다. 이 함수는 W3C에 의해 지정되었으며 모든 최신 브라우저에 구현되어 있습니다. 네이티브 애플리케이션이 사용하는 것과 동일한 OS 수준 엔트로피 풀에서 가져옵니다.

SafeSeed는 모든 키 생성에 Web Crypto API를 사용합니다. Bitcoin 시드 구문 생성기 또는 Ethereum 시드 구문 생성기를 사용하면, crypto.getRandomValues()를 통해 엔트로피가 소싱되며, 기기의 하드웨어에서 직접 암호학적으로 안전한 랜덤 바이트를 제공합니다. 서버에서 생성되는 것은 없습니다. 모든 것이 브라우저에서 실행됩니다.

Web Crypto API는 Math.random()과 같지 않습니다. 암호학적 작업을 위해 특별히 설계된 근본적으로 다른 시스템입니다. 이 구분은 매우 중요합니다: Math.random()은 대부분의 구현에서 약 52비트의 내부 상태를 가지므로, 몇 가지 출력을 관찰한 공격자가 모든 미래 출력을 예측할 수 있습니다. crypto.getRandomValues()에는 그러한 약점이 없습니다.

엔트로피에서 시드 구문으로

원시 엔트로피에서 시드 구문으로의 여정은 BIP39 사양에 의해 정의된 정확한 결정론적 경로를 따릅니다:

1단계: 랜덤 바이트 생성

CSPRNG가 16바이트(128비트) 또는 32바이트(256비트)의 랜덤 데이터를 생성합니다.

2단계: 체크섬 계산

엔트로피의 SHA-256 해시가 계산됩니다. 이 해시의 처음 4비트(128비트 엔트로피의 경우) 또는 8비트(256비트 엔트로피의 경우)가 체크섬으로 엔트로피에 추가됩니다.

3단계: 11비트 그룹으로 분할

결합된 엔트로피 + 체크섬 비트가 각각 11비트 그룹으로 나뉩니다. 12단어 구문의 경우: 128 + 4 = 132비트가 12개의 11비트 그룹으로 나뉩니다.

4단계: 단어에 매핑

각 11비트 값(0-2047)이 2,048단어의 BIP39 단어 목록의 인덱스로 사용됩니다. 결과가 니모닉 구문입니다.

5단계: 시드 파생

니모닉 구문이 2,048회의 반복으로 PBKDF2-HMAC-SHA512를 통과하여 512비트 시드를 생성합니다. 이 시드는 이후 BIP44 파생 경로에 따라 HD 지갑 트리를 파생하는 데 사용됩니다.

1단계 이후의 모든 단계는 결정론적입니다. 동일한 128비트의 엔트로피는 항상 동일한 12개 단어, 동일한 시드, 동일한 주소를 생성합니다. 전체 시스템의 보안은 초기 랜덤 바이트의 예측 불가능성에 달려 있습니다.

약한 엔트로피가 자금 도난으로 이어질 때

약한 엔트로피의 결과는 이론적이지 않습니다. 여러 실제 사건이 랜덤성이 실패할 때 어떤 일이 일어나는지 보여주었습니다.

Android SecureRandom 취약점 (2013)

2013년 8월, Android의 SecureRandom 구현에서 결함이 발견되었습니다. Android의 Java 암호학 라이브러리가 난수 생성기를 제대로 시딩하지 못하여 일부 Bitcoin 지갑이 불충분한 엔트로피로 개인키를 생성했습니다. 공격자들은 이를 악용하여 영향받은 지갑에서 비트코인을 훔쳤습니다. 이 취약점은 여러 지갑 애플리케이션에 영향을 미쳤고 Android 생태계 전반에 긴급 패치로 이어졌습니다.

블록체인 밴딧 (예측 가능한 키)

보안 연구원 Adrian Bednarek는 공격자들이 약한 개인키에서 파생된 주소를 체계적으로 Ethereum 블록체인에서 스캔한 사례를 문서화했습니다. 0x0000...0001(숫자 1) 같은 키나 간단한 구문에서 파생된 키가 엔트로피를 이해하지 못한 사람들에 의해 사용되었습니다. 자동화된 봇이 이러한 주소를 모니터링하고 입금된 자금을 몇 초 내에 도난했습니다. 예측 가능한 키를 가진 주소에서 수천 이더가 빠져나갔습니다.

브레인 월렛 공격

브레인 월렛 -- 기억한 구문에서 개인키를 파생하는 방식 -- 은 인간이 선택하는 구문이 사람들이 생각하는 것보다 훨씬 적은 엔트로피를 가지기 때문에 반복적으로 침해되었습니다. 공격자들은 구문, 노래 가사, 책 인용문, 일반적인 비밀번호의 대규모 사전을 브레인 월렛이 사용하는 것과 동일한 파생 함수에 실행합니다. 인간이 기억할 수 있는 어떤 구문이든 이러한 공격의 탐색 공간 내에 있을 가능성이 높습니다.

이러한 사건들은 공통된 교훈을 공유합니다: 암호학적 알고리즘 자체(SHA-256, secp256k1, ECDSA)는 깨지지 않았습니다. 그것들에 공급되는 엔트로피가 불충분했습니다.

엔트로피 품질 테스트

난수 생성기가 양질의 엔트로피를 생성하고 있는지 어떻게 확인할 수 있을까요? 여러 통계적 테스트가 존재합니다:

NIST SP 800-22

미국 국립표준기술연구소(NIST)는 랜덤성에 대한 통계 테스트 모음을 발행합니다. 여기에는 빈도 테스트(0과 1이 대략 균형을 이루는가?), 연속 테스트(동일 비트의 시퀀스가 예상 길이인가?), 행렬 순위 테스트 등이 포함됩니다. 제대로 작동하는 CSPRNG는 이 모든 테스트를 통과해야 합니다.

Dieharder 테스트 스위트

NIST 스위트보다 생성기를 더 강하게 테스트하는 확장된 랜덤성 테스트 세트입니다. George Marsaglia의 원래 Diehard 테스트의 이름을 딴 이 스위트는 새로운 난수 생성기를 검증하는 데 일반적으로 사용됩니다.

실용적 검증

최종 사용자에게 가장 실용적인 검증은 crypto.getRandomValues() 또는 동등한 OS 수준 CSPRNG에 의존하는 잘 감사된 도구를 사용하고 있는지 확인하는 것입니다. 자신만의 "랜덤성"을 추가하여 엔트로피를 개선하려고 시도해서는 안 됩니다(예: 직접 단어를 선택). 인간의 선택은 느끼는 것보다 훨씬 덜 랜덤합니다.

SafeSeed의 도구는 오픈소스이므로, 엔트로피 소스가 crypto.getRandomValues()이고 약한 대안이 아닌지 누구든 확인할 수 있습니다. 코드는 서버 통신 없이 전적으로 브라우저에서 실행되므로, 중간자가 난수 생성에 영향을 미칠 기회가 없습니다. 클라이언트 측 생성이 중요한 이유에 대한 더 넓은 논의는 온라인 시드 생성기는 안전한가?를 참고하세요.

엔트로피와 보안 태세

엔트로피를 이해하면 암호 보안에 대한 사고 방식이 바뀝니다. 12단어 시드 구문은 단순히 편리한 백업 메커니즘이 아닙니다. 우주에 모든 가능성을 탐색할 충분한 에너지가 없을 만큼 큰 랜덤 숫자의 사람이 읽을 수 있는 인코딩입니다.

하지만 그 보호는 원래의 랜덤 숫자가 진정으로 랜덤한 경우에만 유지됩니다. 지갑을 생성할 도구를 선택할 때:

  1. 엔트로피 소스를 확인하세요: 도구가 crypto.getRandomValues(), /dev/urandom, 또는 동등한 하드웨어 기반 랜덤성을 사용해야 합니다.
  2. 커스텀 엔트로피를 피하세요: 직접 단어를 선택하거나, 편향된 방법으로 주사위를 굴리거나, "충분하다고 느끼는" 어떤 랜덤성 소스도 사용하지 마세요.
  3. 확립된 표준을 사용하세요: BIP39는 2013년 이후 실전에서 검증되었습니다. SafeSeed의 Solana 시드 구문 생성기처럼 BIP39를 정확히 따르는 도구는 10년간의 보안 검토를 계승합니다.
  4. 가능하면 오프라인에서 생성하세요: 강한 엔트로피가 있더라도, 에어갭 또는 오프라인 기기에서 키를 생성하면 네트워크 기반 공격 벡터를 제거합니다. 실용적인 가이드는 Bitcoin 시드 구문 오프라인 생성 방법을 참고하세요.

엔트로피는 보이지 않습니다. 볼 수도, 느낄 수도, 출력을 보고 확인할 수도 없습니다. 약한 엔트로피에서 생성된 시드 구문은 강한 엔트로피에서 생성된 것과 동일하게 보입니다. 보안을 보장하는 유일한 방법은 프로세스를 신뢰하는 것입니다: 하드웨어 기반 난수 생성기에서 가져오는 감사된 오픈소스 도구를 사용하고, 이 기반에서 절대 타협하지 마세요.