PDAO위키
최근 변경
최근 토론
임의 문서
도구
최근 변경
Mnemonic
(r4 RAW)
[목차] == 개요 == === 블록체인에서 소유권이란 === 블록체인에서 디지털 자산의 소유권은 서버나 기관이 아닌 '''개인키(Private Key)'''로 증명된다. 은행 계좌와 달리 내 계정임을 증명할 중앙 기관이 없으며, 개인키를 가진 사람이 곧 그 자산의 주인이라고 할 수 있다. 개인키 또는 니모닉이 탈취되지 않는 한 해당 지갑의 디지털 자산은 온전히 본인의 것이다. 반대로 탈취당하는 순간 그 자산에 대한 통제권을 영구적으로 잃으며, 비밀번호 초기화나 고객센터 문의로 되찾을 방법이 없다. 개인키를 직접 보유하지 않으면 그 자산은 진정한 의미에서 본인의 것이 아니라는 의미에서, 블록체인 업계에서는 "Not your keys, not your coins"라는 표현이 널리 쓰인다. === 니모닉이란 === '''니모닉(Mnemonic)'''은 사람이 읽기 쉬운 단어 조합으로 표현된 암호화폐 지갑의 백업 및 복구용 시드 문구다. '''BIP-39(Bitcoin Improvement Proposal 39)'''에서 처음 표준으로 제안되었으며, 현재 이더리움, 솔라나 등 대부분의 블록체인 지갑이 이 표준을 따른다. '''시드 문구(Seed Phrase)''', '''복구 문구(Recovery Phrase)'''라고도 불리며, 일반적으로 12개 또는 24개의 단어로 구성된다. === 개인키와 니모닉의 차이 === 블록체인 지갑의 실체는 256비트의 무작위 숫자, 즉 개인키다. 16진수로 표현하면 아래와 같다. {{{ 3a1076bf45ab87712ad64ccb3b10217737f7faacbf2872e88fdd9a537d8fe266 }}} 이 64자리 문자열을 사람이 직접 기억하거나 실수 없이 종이에 옮겨 적기는 현실적으로 매우 어렵다. 한 글자라도 틀리면 지갑에 접근할 수 없다. 니모닉은 동일한 정보를 사람이 읽을 수 있는 단어 목록으로 표현한 것이다. ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> || '''형태''' || || 개인키 원문 || {{{3a1076bf45ab87712ad64ccb3b10217737f7faacbf2872e88fdd9a537d8fe266}}} || || 니모닉 (12단어) || {{{witch collapse practice feed shame open despair creek road again ice least}}} || 두 표현은 수학적으로 동일한 정보를 담고 있다. 단, 니모닉과 개인키는 엄밀히 다른 개념이다. 개인키는 특정 계정 하나에 대한 접근 권한이고, 니모닉은 지갑에 속한 모든 계정의 개인키를 파생할 수 있는 상위 개념이다. 따라서 니모닉 하나로 지갑에 속한 모든 계정과 자산을 복구할 수 있으며, 기기를 바꾸거나 앱을 삭제해도 이 단어들만 있으면 어디서든 지갑을 되살릴 수 있다. === 용어 정리 === 니모닉, 시드 문구, 복구 문구는 모두 같은 것을 가리키는 다른 이름이다. [[MetaMask|'''MetaMask''']]는 "Secret Recovery Phrase", Ledger는 "Recovery Phrase"라는 표현을 쓰지만 모두 동일한 BIP-39 표준을 따른다. 니모닉을 요구하는 dApp이나 웹사이트는 피싱이다. 정상적인 서비스는 절대 니모닉을 요구하지 않는다. == BIP-39 표준 == === 배경 및 목적 === [[BIP-39|'''BIP-39''']]는 2013년 Trezor 팀이 제안한 비트코인 개선 제안(Bitcoin Improvement Proposal)으로, 지갑의 시드(Seed)를 사람이 읽고 기록하기 쉬운 단어 목록으로 표현하는 표준이다. BIP-39 이전에는 지갑마다 백업 방식이 제각각이었으나, 이후 대부분의 지갑이 동일한 방식으로 니모닉을 생성하고 복구할 수 있게 되었다.[* BIP-39, "Mnemonic code for generating deterministic keys", 2013. https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki] === Wordlist === BIP-39는 언어별로 2048개의 단어 목록(Wordlist)을 정의한다. 니모닉의 각 단어는 이 목록에서 선택되며, 각 단어는 11비트의 정보에 대응한다 (2¹¹ = 2048). 언어가 달라도 니모닉이 담고 있는 수학적 정보(엔트로피)는 동일하나, 대부분의 지갑은 영어 Wordlist를 기본으로 사용하므로 복구 호환성을 위해 영어 니모닉을 권장한다. * 영어 (English, 기본 표준 · 가장 널리 사용) * 한국어 (Korean) * 일본어 (Japanese) * 중국어 간체 (Chinese Simplified) * 중국어 번체 (Chinese Traditional) * 스페인어 (Spanish) * 프랑스어 (French) * 이탈리아어 (Italian) * 체코어 (Czech) * 포르투갈어 (Portuguese) === 니모닉 생성 과정 === ==== 엔트로피(Entropy) 생성 ==== 128~256비트 크기의 무작위 데이터('''엔트로피''')를 생성한다. 비트 크기가 클수록 가능한 조합의 수가 기하급수적으로 늘어나 보안이 강해진다. {{{ 엔트로피 예시 (128비트): 1010 1100 0011 1111 ... (총 128비트의 랜덤 데이터) }}} ==== 체크섬(Checksum) 추가 ==== 엔트로피의 SHA-256 해시값 중 첫 ENT / 32 비트를 '''체크섬'''으로 엔트로피 뒤에 붙인다. 128비트 엔트로피라면 체크섬은 4비트(128 / 32 = 4)다. 체크섬은 니모닉 입력 오류를 검증하는 역할을 한다. 단어 하나라도 잘못 입력하면 체크섬 검증에 실패한다. ({{{[128비트 엔트로피] + [4비트 체크섬] = 132비트}}}) ==== 비트 결합 및 11비트 분할 ==== 엔트로피와 체크섬을 이어붙인 뒤 전체 비트열을 11비트 단위로 나눈다. ({{{132비트 ÷ 11비트 = 12개 그룹 → 12단어 니모닉}}}) ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''엔트로피 (비트)''' || '''체크섬 (비트)''' || '''합계 (비트)''' || '''단어 수''' || || 128 || 4 || 132 || 12 || || 160 || 5 || 165 || 15 || || 192 || 6 || 198 || 18 || || 224 || 7 || 231 || 21 || || 256 || 8 || 264 || 24 || ==== Wordlist 매핑 ==== 각 11비트 값을 0~2047 사이의 인덱스로 해석하여 Wordlist에서 해당 인덱스의 단어를 가져온다. 이 단어들을 순서대로 나열한 것이 최종 니모닉이다. {{{ 00000000001 → 인덱스 1 → "abandon" 00000000010 → 인덱스 2 → "ability" 10000000000 → 인덱스 1024 → "nature" ... }}} == 니모닉과 HD Wallet == 니모닉 하나로 지갑의 모든 계정을 복구할 수 있는 것은 '''HD Wallet(Hierarchical Deterministic Wallet, 계층적 결정론적 지갑)''' 구조 덕분이다. HD Wallet은 하나의 시드(Seed)로부터 계층적으로 무한히 많은 키를 파생할 수 있는 지갑 방식으로, [[BIP-32|'''BIP-32''']]에서 처음 정의되었다. "결정론적(Deterministic)"은 동일한 시드와 경로를 입력하면 언제나 동일한 키가 출력된다는 의미다. 니모닉 → 시드 변환 역시 결정론적으로 이루어지기 때문에, 니모닉만 있으면 언제 어디서든 동일한 지갑을 완전히 재현할 수 있다. === 니모닉에서 지갑 주소까지 === {{{ 니모닉 ↓ PBKDF2-HMAC-SHA512 (2048회 반복) 시드 (512비트) ↓ HMAC-SHA512, BIP-32 마스터 키 ↓ BIP-44 파생 경로 계정별 개인키 → 공개키 → 지갑 주소 }}} 니모닉과 선택적 패스프레이즈를 입력으로 PBKDF2-HMAC-SHA512 함수를 2048회 반복 적용하여 512비트 시드를 생성한다. 2048회 반복은 무차별 대입(Brute‑Force) 공격에 대한 연산 비용을 높이기 위한 설계다. 이후 시드로부터 BIP-32에 따라 마스터 키가 만들어지고, [[BIP-44]] 파생 경로를 따라 계정별 개인키와 주소가 파생된다.[* BIP-32, "Hierarchical Deterministic Wallets", 2012. https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki][* BIP-44, "Multi-Account Hierarchy for Deterministic Wallets", 2014. https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki] == 패스프레이즈 (Passphrase) == === 개념 === '''패스프레이즈'''는 니모닉에 추가하는 선택적 비밀번호다. BIP-39 표준에 정의되어 있으며, 니모닉 12~24개 단어 외에 사용자가 직접 지정하는 임의의 문자열로, '''"25번째 단어"'''라고도 불린다. PBKDF2 과정에서 패스프레이즈는 솔트(salt) 값의 일부로 사용된다. {{{ PBKDF2( password = 니모닉, salt = "mnemonic" + passphrase, ← 여기에 사용됨 ... ) }}} 패스프레이즈가 달라지면 PBKDF2의 출력값(시드)이 완전히 달라지고, 그 결과 전혀 다른 마스터 키와 지갑 주소가 생성된다. === 동일한 니모닉, 다른 지갑 === 같은 니모닉이라도 패스프레이즈에 따라 완전히 다른 지갑이 만들어진다. 세 지갑은 서로 완전히 독립적이며, 지갑 A의 자산은 지갑 B나 C에서 보이지 않는다. {{{ 니모닉: "witch collapse practice feed shame open ..." + 패스프레이즈 없음 → 지갑 A (주소: 0xAAA...) + 패스프레이즈 "abc" → 지갑 B (주소: 0xBBB...) + 패스프레이즈 "xyz" → 지갑 C (주소: 0xCCC...) }}} === 보안 효과 === BIP-39 원문은 패스프레이즈의 설계 의도를 "그럴듯한 부인 가능성(plausible deniability)"으로 설명한다. 모든 패스프레이즈가 유효한 지갑을 생성하지만, 올바른 패스프레이즈를 가진 지갑만이 실제 자산에 접근할 수 있다. 니모닉이 유출되더라도 패스프레이즈를 모르는 공격자는 실제 자산이 있는 지갑에 접근할 수 없다. == MetaMask 실습 == [[MetaMask]]에서 니모닉으로 지갑을 복구하면, 초기화 전과 동일한 계정 주소와 개인키가 재생성된다. 이는 [[#s-3|섹션 3]]에서 설명한 니모닉의 결정론적 특성을 직접 확인할 수 있는 방법이다. 니모닉과 BIP-44 파생 경로가 동일하다면 기기나 앱이 달라도 언제나 동일한 키가 만들어진다.[* MetaMask, "How to restore your wallet using your Secret Recovery Phrase". https://support.metamask.io/configure/wallet/how-to-restore-your-metamask-wallet-from-secret-recovery-phrase/] == 니모닉 관리 방법 == 니모닉은 지갑의 모든 자산에 대한 접근 권한과 동일하다. 잘못 관리하면 분실 또는 탈취로 이어질 수 있다. === 금지 행위 === ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''금지 행위''' || '''이유''' || || 클라우드(Google Drive, iCloud, Dropbox 등)에 저장 || 계정 해킹 시 니모닉 즉시 노출 || || 메모 앱, 카카오톡, 이메일 등에 저장 || 앱 서버 해킹, 키로거(Keylogger) 및 멀웨어에 의한 노출 위험 || || 스크린샷 촬영 || 사진 앱이 클라우드에 자동 동기화됨 || || 온라인 니모닉 검증 사이트에 입력 || 입력 즉시 서버로 전송될 수 있음 || || 다른 사람에게 구두로 알림 || 사회공학적 공격(Social Engineering)에 취약 || || 니모닉을 요구하는 dApp에 입력 || 정상적인 서비스는 절대 니모닉을 요구하지 않음 || === 니모닉 관리 방법 비교 === ==== 종이 백업 ==== 니모닉을 종이에 직접 손으로 적어 보관하는 방법은 가장 단순하고 오프라인 보관이라 해킹 위험이 없지만, 화재·침수·분실에 취약하므로 두 곳 이상의 서로 다른 물리적 장소에 나누어 보관하고 방수 봉투나 지퍼백에 넣어 습기를 차단하는 것이 좋다. ==== 금속 백업 ==== 니모닉을 스테인리스 또는 티타늄 재질의 금속판에 새기거나 각인하는 방법이다. 화재(약 1500°C 이상에서 녹음)와 침수에 강하며 장기 보관에 유리하다. 종이 백업의 물리적 취약점을 보완한다. '''Cryptosteel''' 등의 제품이 대표적이다. ==== 하드웨어 지갑 ==== Ledger, Trezor 같은 전용 기기에 니모닉을 저장하는 방법이다. 개인키가 기기 외부로 노출되지 않으며, 트랜잭션 서명도 기기 내부에서 처리된다. 컴퓨터가 악성코드에 감염되어도 니모닉이 탈취되지 않는다. 기기 자체를 분실하거나 고장날 수 있으므로, 니모닉 백업(종이 또는 금속)은 반드시 별도로 보관해야 한다. 하드웨어 지갑을 분실해도 니모닉이 있으면 새 기기에서 복구할 수 있다. ==== 암호화된 디지털 보관 ==== 니모닉을 암호화한 뒤 디지털 매체에 저장하는 방법이다. 암호화된 USB/외장 하드에 저장하거나, 강력한 비밀번호로 암호화한 파일을 클라우드에 저장하는 방식이 대표적이다. 단, 디바이스 손상이나 분실 시 복구가 불가능할 수 있으므로 반드시 이중 백업이 필요하다. 클라우드 저장 시에는 계정 해킹에 대비해 강력한 비밀번호와 이중 인증(2FA)을 함께 사용해야 한다. ==== 나누어서 보관 ==== 니모닉을 여러 조각으로 분할하여 각각 다른 장소에 보관하는 방법이다. 일부 조각이 유출되더라도 전체 니모닉이 노출되지 않는다는 장점이 있다. 단, 설정이 복잡하고 일부 조각을 분실하면 복구가 불가능해질 수 있어 신중하게 적용해야 한다. === 방법별 비교 요약 === ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''방법''' || '''해킹 위험''' || '''물리적 위험''' || '''편의성''' || || 종이 백업 || 없음 || 높음 (화재, 침수) || 높음 || || 금속 백업 || 없음 || 낮음 || 중간 || || 암호화된 디지털 보관 || 중간 (계정 해킹) || 낮음 || 중간 || || 나누어서 보관 || 낮음 || 중간 (조각 분실) || 낮음 || || 하드웨어 지갑 || 매우 낮음 || 중간 (기기 분실) || 중간 || === 패스프레이즈 관리 === 패스프레이즈는 어디에도 저장되지 않으며 지갑 앱도 기억하지 않는다. 패스프레이즈를 잊어버리면 니모닉이 있어도 해당 지갑을 복구할 수 없다. * 패스프레이즈는 니모닉과 반드시 별도의 장소에 보관한다. 같은 장소에 함께 보관하면 보안 효과가 사라진다. * 패스프레이즈 없이 접근 가능한 지갑(빈 패스프레이즈)에는 소액만 보관하고, 패스프레이즈로 보호된 지갑에 주요 자산을 보관하는 방식으로 활용할 수 있다. == 외부 링크 == * [[https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki|BIP-39 — Mnemonic code for generating deterministic keys]] * [[https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki|BIP-32 — Hierarchical Deterministic Wallets]] * [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki|BIP-44 — Multi-Account Hierarchy for Deterministic Wallets]] * [[https://support.metamask.io/configure/wallet/how-to-restore-your-metamask-wallet-from-secret-recovery-phrase/|MetaMask 공식 가이드 — Secret Recovery Phrase로 지갑 복구]] [[분류:블록체인]] [[분류:암호화]]
Liberty
|
the tree