480 / 7362^N

Brute Force Search Space

무차별 대입 탐색 공간

지갑의 비밀을 알아맞히려면 얼마나 걸릴까요? 비밀번호나 키의 길이만으로는 답할 수 없습니다. 실제로 가능한 후보가 무엇인지, 각 후보를 확인하는 데 얼마나 많은 작업이 필요한지가 중요합니다.

Brute Force Search Space는 비밀을 추측할 때 하나씩 시험할 수 있는 후보의 집합입니다. 자신의 암호화된 백업 비밀번호를 잊었다고 생각해 보세요. 떠올린 답은 각각 후보가 되고, 그 답으로 백업이 제대로 열렸는지 판단해야 합니다. 확률이 같은 후보가 많고 확인 비용이 클수록 대체로 탐색이 어려워집니다. 다만 실제 지갑에서는 무엇을 찾으려는 것인지부터 분명히 해야 합니다.

백업 비밀번호, 비트코인 지출을 승인하는 개인 키, 그 키를 만든 생성기의 입력은 서로 다른 대상입니다. 가능한 후보도, 확인 방법도 다릅니다. 결함 있는 생성기가 아주 작은 입력 집합에서만 골랐다면, 결과 키의 길이가 암시하는 것보다 탐색이 쉬울 수 있습니다. 공격자는 수학적으로 가능한 모든 키 대신 그 제한된 입력들을 시험할 수 있습니다. 따라서 후보 수를 세기 전에 비밀이 어떻게 만들어졌는지 알아야 합니다. [1] [3]

확률이 같은 후보가 16개이고 정답은 정확히 하나라고 가정해 봅시다. 중복 없이 차례로 확인하면 일찍 맞힐 때도, 끝까지 가야 할 때도 있습니다. 평균적으로 확인하는 후보는 8.5개입니다. 후보 수가 N일 때는 E = (N+1)/2 로 표현합니다. 초당 2회로 일정하게 시험한다면 평균 시간은 4.25초입니다. 소수는 평균값에 관한 것이지, 실제 한 번의 탐색에서 일부 시도만 한다는 뜻이 아닙니다. 이해를 위한 모형이며, 비트코인 지갑 복구 시간을 측정한 결과가 아닙니다. [1]

좋아하는 단어, 이름, 기억하기 쉬운 규칙은 무작위 조합보다 자주 쓰입니다. 그래서 공격자는 가능성이 큰 답부터 시험할 수 있습니다. 특정 결과를 더 자주 만드는 고장 난 생성기도 비슷한 문제를 일으킵니다. 이때는 앞선 예의 평균값이 적용되지 않습니다. 최소 엔트로피는 가장 유리한 첫 추측의 성공 확률을 나타내지만, 그것만으로 전체 작업량이나 성공이 보장되는 시간을 알 수는 없습니다. 각 후보의 확률을 빼고 수만 세는 것은 불완전한 설명입니다. [1] [2]

후보 확인이 언제나 즉시 끝나지는 않습니다. PBKDF2는 비밀번호와 다른 입력으로 키를 유도하는 함수이며, 계산을 반복해 시도마다 필요한 작업을 늘립니다. 또 다른 입력은 salt입니다. 보통 각 유도 과정을 구별하는 공개 데이터입니다. salt가 다르면 미리 계산해 둔 같은 결과표를 그대로 재사용하기 어렵습니다. Salt는 또 하나의 비밀 비밀번호가 아니며 강한 입력을 대신하지도 않습니다. 속도를 추정하려면 구체적인 함수, 설정, 사용 하드웨어를 알아야 합니다. [3]

BIP39는 복구 단어와 선택적인 passphrase, 즉 추가 비밀번호를 seed로 바꿉니다. Seed는 키 유도의 출발점인 비밀 값입니다. PBKDF2의 내부 계산 함수로 HMAC-SHA512를 쓰고 2048회 반복해 512비트 seed를 만듭니다. 여기서 salt 매개변수는 문자열 “mnemonic” 뒤에 passphrase를 붙인 것입니다. 추가 비밀을 제공하는 것은 passphrase 자체입니다. 어떤 passphrase도 유효한 seed를 만들므로 복구 단어의 체크섬은 원하는 passphrase를 입력했는지 확인해 주지 않습니다. 자신의 지갑을 복구할 때는 올바른 키 유도 설정에서 이미 알고 있는 주소가 나오는지 등으로 구별할 수 있습니다. 결과가 길다고 약한 비밀번호가 강해지지는 않습니다. [4]

순서대로 추측하는 것과 다른 수학적 방법도 있습니다. 타원곡선 암호(ECC)에서는 개인 키로 공개 키를 계산할 수 있지만, 반대로 개인 값을 찾는 일은 이산로그 문제라는 어려운 과제입니다. SEC 2는 비트코인이 사용하는 secp256k1 곡선의 매개변수를 설명합니다. 따라서 가능한 모든 256비트 문자열의 수만 세면 다른 공격 경로를 놓치게 됩니다. NIST SP 800-57은 키 길이와 보안 강도를 구별합니다. 보안 강도는 주어진 가정 아래 보호를 깨는 데 필요한 노력의 추정치입니다. 수학적인 방법이 존재한다고 실제로 쉽게 실행할 수 있다는 뜻은 아닙니다. [5] [6]

여러 프로세서가 독립적인 시도를 나눌 수 있지만, 효과는 메모리와 계산 구성에도 달려 있습니다. 채굴 hashrate는 채굴 계산의 속도이지 PBKDF2나 ECC 연산의 속도가 아닙니다. 웹사이트 로그인과 백업 사본도 구별해야 합니다. 서비스는 로그인 실패 후 접근을 제한할 수 있습니다. 반면 암호화된 파일 사본을 가진 사람은 자신의 장치에서 오프라인으로 후보를 확인할 수 있습니다. 웹사이트의 로그인 제한만으로는 이런 시도를 막을 수 없습니다. [3] [6]

seed 전체를 얻은 사람은 거대한 후보 공간을 탐색할 필요가 없습니다. 악성 소프트웨어나 키를 다루는 프로그램의 결함으로도 같은 일이 생길 수 있습니다. 따라서 보안은 예측하기 어려운 비밀을 고르는 데서 끝나지 않습니다. 보관과 사용 방법도 중요합니다. 해독에 걸리는 시간에 관한 주장을 보면 어떤 공격을 가정하는지, 공격자가 이미 무엇을 아는지, 속도를 어떻게 측정했는지 확인하세요. 큰 숫자만으로 장치의 안전을 보장할 수 없고, 이 모형도 잃어버린 지갑의 복구를 약속하지 않습니다. [6]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Cryptographic Entropy, Entropy Bit, Private Key, Seed Phrase. 다음 항목에서도 이 글을 참조합니다 Entropy Bit, Random Number Generator.

DOC · 001RFC 4086 — Secret distributions and guessing명세 DOC · 002NIST SP 800-90B — Min-entropy and guessing cost명세 DOC · 003RFC 8018 — Salt, derivation cost and offline search명세 DOC · 004BIP39 — Passphrase derivation and valid seeds명세 DOC · 005SEC 2 v2 — secp256k1 parameters명세 DOC · 006NIST SP 800-57 Part 1 Rev. 5 — Security strength and key protection명세
개정일: 1차 출처 우선 · 투자 조언이 아닙니다