MSTR Cat

블록체인/레벨 II · 작동 원리/2.1 암호학/수업 5

엔트로피와 무작위성

보이지 않는 토대: 키가 그것을 만든 노이즈만큼만 강한 이유

준비물주사위 세트(물리적 엔트로피를 확인하기 위한 선택 사항)공책

호기심

  1. 진정한 무작위성은 인간의 직관과 무엇이 다를까요?
  2. 리눅스 배포판의 소프트웨어 버그 하나가 어떻게 수천 개의 키를 브루트포스 공격에 노출시켰을까요?
  3. 12단어 문구는 왜 정확히 128비트의 엔트로피에 체크섬을 더한 값을 나타낼까요?

탐구

  1. 비트코인 개인 키는 1과 n-1 사이의 무작위 정수이며, 여기서 n은 secp256k1 곡선 생성점의 차수입니다. 이 공간에는 약 1.158 × 10^77개의 가능한 값이 있습니다. 이산 로그 공격에 대해 128비트 보안을 목표로 하려면 키를 이 범위에서 균일하게 선택해야 합니다. 선택 과정이 예측 가능하거나 편향되어 있으면 실효 엔트로피가 줄어들어, 공격자에게 필요한 작업량이 이론상 최대치의 극히 일부로 줄어듭니다.
  2. 엔트로피는 불확실성을 비트 단위로 측정합니다. 12단어 BIP39 니모닉은 128비트의 진정한 무작위성과 SHA-256에서 도출한 4비트 체크섬을 인코딩합니다. 24단어 문구는 256비트를 담습니다. 마지막 단어는 부분적으로 오류 검출기 역할을 합니다. 무작위로 고른 단어들은 체크섬을 통과하지 못하므로 유효한 문구가 되는 경우가 드뭅니다. 원천 엔트로피가 진짜라면, 이 구조는 눈에 띄지 않는 옮겨 적기 오류를 줄여 줍니다.
  3. 사람이 만든 무작위성은 약하기로 악명이 높습니다. 사람들은 익숙한 단어, 인용구, 패턴을 선호하기 때문에, 직접 고른 문구는 보기보다 엔트로피가 훨씬 적습니다. 공격자들은 이를 악용해 ‘브레인 월렛’이라 불리는, 기억하기 쉬운 문구에서 파생된 키에 사전 공격을 가합니다. Vasek, Bonneau 등(2016)은 공격자들이 가능성 높은 문구의 방대한 목록을 시험할 수 있었기 때문에 이런 지갑들이 일상적으로, 그것도 자금이 들어온 직후에 털리는 경우가 많았다는 사실을 기록했습니다.
  4. 소프트웨어 구현상의 결함은 키 생성을 거듭 위태롭게 했습니다. 데비안이 OpenSSL에 가한 수정(2006-2008년 사용, DSA-1571에서 공개)으로 인해 프로세스 ID가 거의 유일한 변동 요인이 되었고, 그 결과 키 유형과 크기별로 가능한 키가 약 32,768개뿐이었습니다. 2013년 8월에는 안드로이드 SecureRandom의 결함으로 일부 비트코인 지갑이 서명 논스를 재사용하여 개인 키가 노출되고 도난이 발생했습니다. 이 사건들은 엔트로피 원천이 암호학적으로 안전하고 시스템 상태와 독립적이어야 함을 보여 줍니다.
  5. 2023년 Unciphered가 공개한 ‘Randstorm’은 BitcoinJS 시대(약 2011-2015년)의 웹 지갑들이 취약한 난수 생성기를 사용해 사용자를 키 복구 공격에 노출시켰다는 사실을 밝혀냈습니다. 최신 하드웨어 지갑은 초기화 과정에서 여러 내부 원천으로부터 엔트로피를 수집하고, 그 결과로 만들어진 니모닉을 한 번에 한 단어씩 표시합니다. 일단 적어 두면 이 단어들이 자금에 대한 유일한 권한이 되며, 이를 잃으면 영구적으로 접근할 수 없게 됩니다.
  6. 좋은 엔트로피는 운영체제의 암호학적 난수 생성기(CSPRNG), 하드웨어 RNG, 또는 주사위 굴리기 같은 물리적 과정(편향 가능성에 유의)에서 얻습니다. CSPRNG는 시스템 이벤트와 하드웨어 센서에서 나오는 노이즈를 섞어 예측 불가능한 비트를 생성합니다. 출력이 1과 n−1 사이에 있으면 유효한 개인 키가 되고, 그렇지 않으면 생성기가 새로운 무작위 데이터로 다시 시도합니다. 이 반복 덕분에 곡선 차수 전체에 걸쳐 균일한 분포가 보장됩니다.

핵심 사실

  • 비트코인 개인키는 128비트의 보안 수준을 목표로 하며, 약 1.158 × 10^77개의 가능한 값 중에서 균일하게 선택해야 합니다.
  • 12단어 BIP39 문구는 128비트의 엔트로피와 4비트 체크섬을 인코딩하며, 24단어는 256비트를 인코딩합니다.
  • 데비안 OpenSSL 버그(2006-2008, DSA-1571)는 키 공간을 키 유형과 크기별로 약 32,768가지로 축소시켰습니다.
  • 2013년 8월에 공개된 안드로이드 SecureRandom 결함으로 일부 지갑이 서명 논스를 재사용하게 되어, 키가 노출되고 도난에 취약해졌습니다.
  • ‘Randstorm’(2023년 공개)은 약 2011-2015년의 BitcoinJS 시대 웹 지갑들에서 취약한 무작위성을 찾아냈습니다.
  • 기억하기 쉬운 문구에서 파생된 키(‘브레인 월렛’)는 공격자들에게 일상적으로 발견되어 털렸습니다.

연습 아홉, 여섯, 셋, 하나

9모으기디지털 또는 물리적 무작위성의 원천 9가지를 나열하세요. 각각의 메커니즘(예: 시스템 클록 지터, 열잡음)과 그와 관련해 알려진 과거 취약점을 적으세요.
6묶기9가지를 엔트로피 품질에 따라 6개 범주로 분류하세요: 암호학적으로 안전한 CSPRNG, 하드웨어 RNG, 물리적 과정, 사람이 만든 것, 결함 있는 소프트웨어 구현, 기타.
3추리기6개를 어떤 난수 원천이 비트코인 개인 키 생성에 적합한지 평가하는 3가지 기준으로 줄이세요.
1결정화곡선 차수 n 전체에 걸친 균일 분포가 키 보안에서 절대 양보할 수 없는 조건인 이유를 한 문장으로 쓰세요.

팩트 체크

날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.

인터랙티브 아카데미에서 열기 →

EN PT ES ZH JA RU DE FR MS