478 / 736H

Cryptographic Entropy

암호학적 엔트로피: 비밀을 추측하기 어렵게 만드는 것

길고 복잡한 문자열이라고 반드시 안전한 것은 아닙니다. 지갑에서는 비밀이 어떻게 만들어졌고 다른 사람이 무엇을 알 수 있는지가 더 중요합니다.

암호학에서 엔트로피는 공격자가 비밀 값을 추측할 때 남아 있는 불확실성을 뜻합니다. Bitcoin 지갑에서는 키의 바탕을 만드는 순간부터 중요합니다. 문자가 복잡해 보이는지가 아니라 실제로 가능한 결과가 몇 가지였고, 각각의 확률이 어땠으며, 공격자가 그 과정을 얼마나 아는지가 핵심입니다.

지갑을 만든 날짜와 시간으로 비밀을 만든다고 생각해 보세요. 인코딩한 결과는 길고 복잡한 문자열로 보일 수 있습니다. 하지만 공격자가 대략적인 시각과 방법을 알면 적은 수의 후보만 시험하면 될 수도 있습니다. 표기를 길게 한다고 반드시 공격이 어려워지지는 않습니다. 그래서 RFC 4086은 예측 불가능성과 겉으로만 무작위처럼 보이는 것을 구분합니다. 키 하나를 바라보는 것만으로 엔트로피를 판단할 수는 없습니다. 어떻게 만들어졌는지 알아야 합니다. [3]

비트는 값을 0 또는 1로 기록하는 기본 데이터 단위입니다. 하지만 비트 수만으로는 공격자에게 얼마나 많은 불확실성이 남는지 알 수 없습니다. 지갑이 BIP39에 따라 Seed Phrase를 만들 때는 먼저 무작위 입력이 필요합니다. 그다음 그 입력을 단어로 바꿉니다. 12개 단어에는 입력 128비트와 체크섬 4비트가, 24개 단어에는 입력 256비트와 체크섬 8비트가 들어갑니다. 체크섬은 일부 기록 오류를 찾는 데 도움이 되지만 기존 입력에서 계산하므로 엔트로피를 더하지 않습니다. 따라서 단어 수를 늘려도 잘못 생성된 무작위성을 고칠 수 없습니다. 단어 수만이 아니라 백업이 어떻게 만들어졌는지가 중요합니다. [4]

지갑은 새 바이트, 즉 8비트 묶음마다 새로운 물리적 측정을 할 필요가 없습니다. 비밀 초기 상태에서 추가 값을 만드는 알고리즘인 DRBG라는 암호학적 생성기를 사용할 수 있습니다. 설계와 사용이 올바르면 상태를 모르는 사람이 출력을 예측하기 어렵습니다. 그렇지만 알고리즘은 결정론적입니다. 완전히 같은 상태와 입력은 같은 후속 결과를 만듭니다. 바이트를 더 많이 만든다고 새로운 물리적 엔트로피가 자동으로 늘지는 않습니다. 초기 입력의 품질과 내부 상태 보호가 모두 중요합니다. [2]

해시 함수는 데이터에서 길이가 일정한 지문 같은 값을 계산하며, 그 값은 무작위처럼 보일 수 있습니다. 하지만 입력을 아는 사람은 같은 결과를 계산할 수 있습니다. 완전히 알려진 입력이 이렇게 해서 비밀이 되지는 않습니다. conditioning이라는 기술 용어는 편향을 줄이고 이미 존재하는 불확실성을 모으는 처리를 뜻합니다. 없던 비밀을 만들어 내는 것은 아닙니다. 여러 출처의 엔트로피도 자동으로 더할 수 없습니다. 서로 연관되어 같은 정보를 제공할 수 있기 때문입니다. [1] [3]

전자 잡음원은 고장 나거나 주변 조건이 달라지면 다르게 작동할 수 있습니다. 그래서 NIST SP 800-90B는 시작 시점과 작동 중에 후속 처리 전의 원시 잡음을 검사하도록 요구합니다. 검사는 고장의 징후를 찾는 과정이며 모든 출력의 안전성을 입증하지는 않습니다. 개발자는 잡음원과 그 한계, 가능한 의존 관계를 이해해야 합니다. 고장이 발견되면 데이터를 사용하는 앱에 알려야 합니다. 고장이 지속되면 잡음원은 출력을 중단해야 합니다. “난수 생성기”라는 이름의 칩이 있다는 것만으로는 충분하지 않습니다. [1]

공격자가 DRBG의 내부 상태를 얻으면 설계에 따라 후속 출력을 예측할 수 있습니다. 예측 불가능성을 회복하려면 공격자가 모르는 새로운 입력이 충분히 필요합니다. 이런 엔트로피 보충을 reseeding이라고 합니다. 계산을 계속하거나 알려진 시각을 더하는 것만으로는 이 보호가 보장되지 않습니다. 또한 생성기를 복구하는 것과 기존 자금을 보호하는 것을 구별해야 합니다. 생성기를 복구해도 이미 유출된 키가 무효가 되지는 않습니다. [2]

통계 테스트는 예를 들어 수상한 반복을 찾아낼 수 있습니다. 하지만 공격자가 비밀 입력이나 출력을 예측할 방법을 아는지 확실히 판단하지는 못합니다. NIST SP 800-22도 이 한계를 명시합니다. 테스트는 평가에 도움이 되는 일부이며 생성기 전체 분석을 대신하지 않습니다. 따라서 무작위처럼 보이는 숫자로 가득 찬 파일만으로는 지갑이 안전하다고 입증할 수 없습니다. [5]

초보자가 지갑의 엔트로피를 직접 계산할 필요는 없습니다. 그보다는 근거가 있는 생성 과정을 살펴보는 편이 낫습니다. 무작위성은 어디서 얻고, 어떻게 처리하며, 오류에 어떻게 대응하고, 비밀을 어떻게 보호할까요? NIST SP 800-90C는 바로 엔트로피 원천과 DRBG를 조합한 전체 생성기를 다룹니다. 다만 표준이나 유명한 칩을 언급한다고 특정 지갑 버전이 이를 올바르게 사용한다는 뜻은 아닙니다. 실제 구현에서 확인된 특성이 중요합니다. [1] [6]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Entropy Bit, CSPRNG, Dice Roll Entropy, Private Key. 다음 항목에서도 이 글을 참조합니다 BIP85, Dice Roll Entropy, Entropy Bit, Brute Force Search Space.

DOC · 001NIST SP 800-90B — Entropy source design and health tests명세 DOC · 002NIST SP 800-90A Rev. 1 — Deterministic generation and reseeding명세 DOC · 003RFC 4086 — Unpredictability and source limitations명세 DOC · 004BIP39 — Entropy, checksum and mnemonic encoding명세 DOC · 005NIST SP 800-22 Rev. 1a — Limits of statistical testing문서 DOC · 006NIST SP 800-90C — Complete random bit generator constructions명세
개정일: 1차 출처 우선 · 투자 조언이 아닙니다