| r4 | ||
|---|---|---|
| r1 (새 문서) | 1 | [목차] |
| 2 | ||
| 3 | == 개요 == | |
| 4 | ||
| 5 | === 블록체인에서 소유권이란 === | |
| 6 | ||
| 7 | 블록체인에서 디지털 자산의 소유권은 서버나 기관이 아닌 '''개인키(Private Key)'''로 증명된다. 은행 계좌와 달리 내 계정임을 증명할 중앙 기관이 없으며, 개인키를 가진 사람이 곧 그 자산의 주인이라고 할 수 있다. | |
| 8 | ||
| 9 | 개인키 또는 니모닉이 탈취되지 않는 한 해당 지갑의 디지털 자산은 온전히 본인의 것이다. 반대로 탈취당하는 순간 그 자산에 대한 통제권을 영구적으로 잃으며, 비밀번호 초기화나 고객센터 문의로 되찾을 방법이 없다. 개인키를 직접 보유하지 않으면 그 자산은 진정한 의미에서 본인의 것이 아니라는 의미에서, 블록체인 업계에서는 "Not your keys, not your coins"라는 표현이 널리 쓰인다. | |
| 10 | ||
| 11 | === 니모닉이란 === | |
| 12 | ||
| 13 | '''니모닉(Mnemonic)'''은 사람이 읽기 쉬운 단어 조합으로 표현된 암호화폐 지갑의 백업 및 복구용 시드 문구다. '''BIP-39(Bitcoin Improvement Proposal 39)'''에서 처음 표준으로 제안되었으며, 현재 이더리움, 솔라나 등 대부분의 블록체인 지갑이 이 표준을 따른다. | |
| 14 | ||
| 15 | '''시드 문구(Seed Phrase)''', '''복구 문구(Recovery Phrase)'''라고도 불리며, 일반적으로 12개 또는 24개의 단어로 구성된다. | |
| 16 | ||
| 17 | === 개인키와 니모닉의 차이 === | |
| 18 | ||
| 19 | 블록체인 지갑의 실체는 256비트의 무작위 숫자, 즉 개인키다. 16진수로 표현하면 아래와 같다. | |
| 20 | ||
| 21 | {{{ | |
| 22 | 3a1076bf45ab87712ad64ccb3b10217737f7faacbf2872e88fdd9a537d8fe266 | |
| 23 | }}} | |
| 24 | ||
| 25 | 이 64자리 문자열을 사람이 직접 기억하거나 실수 없이 종이에 옮겨 적기는 현실적으로 매우 어렵다. 한 글자라도 틀리면 지갑에 접근할 수 없다. 니모닉은 동일한 정보를 사람이 읽을 수 있는 단어 목록으로 표현한 것이다. | |
| 26 | ||
| 27 | ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> || '''형태''' || | |
| 28 | || 개인키 원문 || {{{3a1076bf45ab87712ad64ccb3b10217737f7faacbf2872e88fdd9a537d8fe266}}} || | |
| 29 | || 니모닉 (12단어) || {{{witch collapse practice feed shame open despair creek road again ice least}}} || | |
| 30 | ||
| 31 | 두 표현은 수학적으로 동일한 정보를 담고 있다. 단, 니모닉과 개인키는 엄밀히 다른 개념이다. 개인키는 특정 계정 하나에 대한 접근 권한이고, 니모닉은 지갑에 속한 모든 계정의 개인키를 파생할 수 있는 상위 개념이다. 따라서 니모닉 하나로 지갑에 속한 모든 계정과 자산을 복구할 수 있으며, 기기를 바꾸거나 앱을 삭제해도 이 단어들만 있으면 어디서든 지갑을 되살릴 수 있다. | |
| 32 | ||
| 33 | === 용어 정리 === | |
| 34 | ||
| r4 | 35 | 니모닉, 시드 문구, 복구 문구는 모두 같은 것을 가리키는 다른 이름이다. [[MetaMask|'''MetaMask''']]는 "Secret Recovery Phrase", Ledger는 "Recovery Phrase"라는 표현을 쓰지만 모두 동일한 BIP-39 표준을 따른다. 니모닉을 요구하는 dApp이나 웹사이트는 피싱이다. 정상적인 서비스는 절대 니모닉을 요구하지 않는다. |
| r1 (새 문서) | 36 | |
| 37 | ||
| 38 | == BIP-39 표준 == | |
| 39 | ||
| 40 | === 배경 및 목적 === | |
| 41 | ||
| 42 | [[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] | |
| 43 | ||
| 44 | === Wordlist === | |
| 45 | ||
| 46 | BIP-39는 언어별로 2048개의 단어 목록(Wordlist)을 정의한다. 니모닉의 각 단어는 이 목록에서 선택되며, 각 단어는 11비트의 정보에 대응한다 (2¹¹ = 2048). 언어가 달라도 니모닉이 담고 있는 수학적 정보(엔트로피)는 동일하나, 대부분의 지갑은 영어 Wordlist를 기본으로 사용하므로 복구 호환성을 위해 영어 니모닉을 권장한다. | |
| 47 | ||
| 48 | * 영어 (English, 기본 표준 · 가장 널리 사용) | |
| 49 | * 한국어 (Korean) | |
| 50 | * 일본어 (Japanese) | |
| 51 | * 중국어 간체 (Chinese Simplified) | |
| 52 | * 중국어 번체 (Chinese Traditional) | |
| 53 | * 스페인어 (Spanish) | |
| 54 | * 프랑스어 (French) | |
| 55 | * 이탈리아어 (Italian) | |
| 56 | * 체코어 (Czech) | |
| 57 | * 포르투갈어 (Portuguese) | |
| 58 | ||
| 59 | === 니모닉 생성 과정 === | |
| 60 | ||
| 61 | ==== 엔트로피(Entropy) 생성 ==== | |
| 62 | ||
| 63 | 128~256비트 크기의 무작위 데이터('''엔트로피''')를 생성한다. 비트 크기가 클수록 가능한 조합의 수가 기하급수적으로 늘어나 보안이 강해진다. | |
| 64 | ||
| 65 | {{{ | |
| 66 | 엔트로피 예시 (128비트): | |
| 67 | 1010 1100 0011 1111 ... (총 128비트의 랜덤 데이터) | |
| 68 | }}} | |
| 69 | ||
| 70 | ==== 체크섬(Checksum) 추가 ==== | |
| 71 | ||
| 72 | 엔트로피의 SHA-256 해시값 중 첫 ENT / 32 비트를 '''체크섬'''으로 엔트로피 뒤에 붙인다. 128비트 엔트로피라면 체크섬은 4비트(128 / 32 = 4)다. | |
| 73 | ||
| 74 | 체크섬은 니모닉 입력 오류를 검증하는 역할을 한다. 단어 하나라도 잘못 입력하면 체크섬 검증에 실패한다. ({{{[128비트 엔트로피] + [4비트 체크섬] = 132비트}}}) | |
| 75 | ||
| 76 | ==== 비트 결합 및 11비트 분할 ==== | |
| 77 | ||
| 78 | 엔트로피와 체크섬을 이어붙인 뒤 전체 비트열을 11비트 단위로 나눈다. ({{{132비트 ÷ 11비트 = 12개 그룹 → 12단어 니모닉}}}) | |
| 79 | ||
| 80 | ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''엔트로피 (비트)''' || '''체크섬 (비트)''' || '''합계 (비트)''' || '''단어 수''' || | |
| 81 | || 128 || 4 || 132 || 12 || | |
| 82 | || 160 || 5 || 165 || 15 || | |
| 83 | || 192 || 6 || 198 || 18 || | |
| 84 | || 224 || 7 || 231 || 21 || | |
| 85 | || 256 || 8 || 264 || 24 || | |
| 86 | ||
| 87 | ==== Wordlist 매핑 ==== | |
| 88 | ||
| 89 | 각 11비트 값을 0~2047 사이의 인덱스로 해석하여 Wordlist에서 해당 인덱스의 단어를 가져온다. 이 단어들을 순서대로 나열한 것이 최종 니모닉이다. | |
| 90 | ||
| 91 | {{{ | |
| 92 | 00000000001 → 인덱스 1 → "abandon" | |
| 93 | 00000000010 → 인덱스 2 → "ability" | |
| 94 | 10000000000 → 인덱스 1024 → "nature" | |
| 95 | ... | |
| 96 | }}} | |
| 97 | ||
| 98 | == 니모닉과 HD Wallet == | |
| 99 | ||
| 100 | 니모닉 하나로 지갑의 모든 계정을 복구할 수 있는 것은 '''HD Wallet(Hierarchical Deterministic Wallet, 계층적 결정론적 지갑)''' 구조 덕분이다. HD Wallet은 하나의 시드(Seed)로부터 계층적으로 무한히 많은 키를 파생할 수 있는 지갑 방식으로, [[BIP-32|'''BIP-32''']]에서 처음 정의되었다. | |
| 101 | ||
| 102 | "결정론적(Deterministic)"은 동일한 시드와 경로를 입력하면 언제나 동일한 키가 출력된다는 의미다. 니모닉 → 시드 변환 역시 결정론적으로 이루어지기 때문에, 니모닉만 있으면 언제 어디서든 동일한 지갑을 완전히 재현할 수 있다. | |
| 103 | ||
| 104 | === 니모닉에서 지갑 주소까지 === | |
| 105 | ||
| 106 | {{{ | |
| 107 | 니모닉 | |
| 108 | ↓ PBKDF2-HMAC-SHA512 (2048회 반복) | |
| 109 | 시드 (512비트) | |
| 110 | ↓ HMAC-SHA512, BIP-32 | |
| 111 | 마스터 키 | |
| 112 | ↓ BIP-44 파생 경로 | |
| 113 | 계정별 개인키 → 공개키 → 지갑 주소 | |
| 114 | }}} | |
| 115 | ||
| 116 | 니모닉과 선택적 패스프레이즈를 입력으로 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] | |
| 117 | ||
| 118 | == 패스프레이즈 (Passphrase) == | |
| 119 | ||
| 120 | === 개념 === | |
| 121 | ||
| r2 | 122 | '''패스프레이즈'''는 니모닉에 추가하는 선택적 비밀번호다. BIP-39 표준에 정의되어 있으며, 니모닉 12~24개 단어 외에 사용자가 직접 지정하는 임의의 문자열로, '''"25번째 단어"'''라고도 불린다. |
| r1 (새 문서) | 123 | |
| 124 | PBKDF2 과정에서 패스프레이즈는 솔트(salt) 값의 일부로 사용된다. | |
| 125 | ||
| 126 | {{{ | |
| 127 | PBKDF2( | |
| 128 | password = 니모닉, | |
| 129 | salt = "mnemonic" + passphrase, ← 여기에 사용됨 | |
| 130 | ... | |
| 131 | ) | |
| 132 | }}} | |
| 133 | ||
| 134 | 패스프레이즈가 달라지면 PBKDF2의 출력값(시드)이 완전히 달라지고, 그 결과 전혀 다른 마스터 키와 지갑 주소가 생성된다. | |
| 135 | ||
| 136 | === 동일한 니모닉, 다른 지갑 === | |
| 137 | ||
| 138 | 같은 니모닉이라도 패스프레이즈에 따라 완전히 다른 지갑이 만들어진다. | |
| 139 | 세 지갑은 서로 완전히 독립적이며, 지갑 A의 자산은 지갑 B나 C에서 보이지 않는다. | |
| 140 | ||
| 141 | {{{ | |
| 142 | 니모닉: "witch collapse practice feed shame open ..." | |
| 143 | ||
| 144 | + 패스프레이즈 없음 → 지갑 A (주소: 0xAAA...) | |
| 145 | + 패스프레이즈 "abc" → 지갑 B (주소: 0xBBB...) | |
| 146 | + 패스프레이즈 "xyz" → 지갑 C (주소: 0xCCC...) | |
| 147 | }}} | |
| 148 | ||
| 149 | ||
| 150 | === 보안 효과 === | |
| 151 | ||
| 152 | BIP-39 원문은 패스프레이즈의 설계 의도를 "그럴듯한 부인 가능성(plausible deniability)"으로 설명한다. 모든 패스프레이즈가 유효한 지갑을 생성하지만, 올바른 패스프레이즈를 가진 지갑만이 실제 자산에 접근할 수 있다. 니모닉이 유출되더라도 패스프레이즈를 모르는 공격자는 실제 자산이 있는 지갑에 접근할 수 없다. | |
| 153 | ||
| 154 | == MetaMask 실습 == | |
| 155 | ||
| 156 | [[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/] | |
| 157 | ||
| 158 | == 니모닉 관리 방법 == | |
| 159 | ||
| 160 | 니모닉은 지갑의 모든 자산에 대한 접근 권한과 동일하다. 잘못 관리하면 분실 또는 탈취로 이어질 수 있다. | |
| 161 | ||
| 162 | === 금지 행위 === | |
| 163 | ||
| 164 | ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''금지 행위''' || '''이유''' || | |
| 165 | || 클라우드(Google Drive, iCloud, Dropbox 등)에 저장 || 계정 해킹 시 니모닉 즉시 노출 || | |
| 166 | || 메모 앱, 카카오톡, 이메일 등에 저장 || 앱 서버 해킹, 키로거(Keylogger) 및 멀웨어에 의한 노출 위험 || | |
| 167 | || 스크린샷 촬영 || 사진 앱이 클라우드에 자동 동기화됨 || | |
| 168 | || 온라인 니모닉 검증 사이트에 입력 || 입력 즉시 서버로 전송될 수 있음 || | |
| 169 | || 다른 사람에게 구두로 알림 || 사회공학적 공격(Social Engineering)에 취약 || | |
| 170 | || 니모닉을 요구하는 dApp에 입력 || 정상적인 서비스는 절대 니모닉을 요구하지 않음 || | |
| 171 | ||
| 172 | === 니모닉 관리 방법 비교 === | |
| 173 | ||
| 174 | ==== 종이 백업 ==== | |
| 175 | ||
| 176 | 니모닉을 종이에 직접 손으로 적어 보관하는 방법은 가장 단순하고 오프라인 보관이라 해킹 위험이 없지만, 화재·침수·분실에 취약하므로 두 곳 이상의 서로 다른 물리적 장소에 나누어 보관하고 방수 봉투나 지퍼백에 넣어 습기를 차단하는 것이 좋다. | |
| 177 | ||
| 178 | ==== 금속 백업 ==== | |
| 179 | ||
| 180 | 니모닉을 스테인리스 또는 티타늄 재질의 금속판에 새기거나 각인하는 방법이다. 화재(약 1500°C 이상에서 녹음)와 침수에 강하며 장기 보관에 유리하다. 종이 백업의 물리적 취약점을 보완한다. | |
| 181 | ||
| 182 | '''Cryptosteel''' 등의 제품이 대표적이다. | |
| 183 | ||
| 184 | ==== 하드웨어 지갑 ==== | |
| 185 | ||
| r3 | 186 | Ledger, Trezor 같은 전용 기기에 니모닉을 저장하는 방법이다. 개인키가 기기 외부로 노출되지 않으며, 트랜잭션 서명도 기기 내부에서 처리된다. 컴퓨터가 악성코드에 감염되어도 니모닉이 탈취되지 않는다. |
| r1 (새 문서) | 187 | |
| 188 | 기기 자체를 분실하거나 고장날 수 있으므로, 니모닉 백업(종이 또는 금속)은 반드시 별도로 보관해야 한다. 하드웨어 지갑을 분실해도 니모닉이 있으면 새 기기에서 복구할 수 있다. | |
| 189 | ||
| 190 | ==== 암호화된 디지털 보관 ==== | |
| 191 | ||
| 192 | 니모닉을 암호화한 뒤 디지털 매체에 저장하는 방법이다. 암호화된 USB/외장 하드에 저장하거나, 강력한 비밀번호로 암호화한 파일을 클라우드에 저장하는 방식이 대표적이다. | |
| 193 | ||
| 194 | 단, 디바이스 손상이나 분실 시 복구가 불가능할 수 있으므로 반드시 이중 백업이 필요하다. 클라우드 저장 시에는 계정 해킹에 대비해 강력한 비밀번호와 이중 인증(2FA)을 함께 사용해야 한다. | |
| 195 | ||
| 196 | ==== 나누어서 보관 ==== | |
| 197 | ||
| 198 | 니모닉을 여러 조각으로 분할하여 각각 다른 장소에 보관하는 방법이다. 일부 조각이 유출되더라도 전체 니모닉이 노출되지 않는다는 장점이 있다. | |
| 199 | ||
| 200 | 단, 설정이 복잡하고 일부 조각을 분실하면 복구가 불가능해질 수 있어 신중하게 적용해야 한다. | |
| 201 | ||
| 202 | === 방법별 비교 요약 === | |
| 203 | ||
| 204 | ||<tablealign=center><tablewidth=100%><tablebordercolor=#000><tablebgcolor=#fff><rowbgcolor=#eee> '''방법''' || '''해킹 위험''' || '''물리적 위험''' || '''편의성''' || | |
| 205 | || 종이 백업 || 없음 || 높음 (화재, 침수) || 높음 || | |
| 206 | || 금속 백업 || 없음 || 낮음 || 중간 || | |
| 207 | || 암호화된 디지털 보관 || 중간 (계정 해킹) || 낮음 || 중간 || | |
| 208 | || 나누어서 보관 || 낮음 || 중간 (조각 분실) || 낮음 || | |
| 209 | || 하드웨어 지갑 || 매우 낮음 || 중간 (기기 분실) || 중간 || | |
| 210 | ||
| 211 | === 패스프레이즈 관리 === | |
| 212 | ||
| 213 | 패스프레이즈는 어디에도 저장되지 않으며 지갑 앱도 기억하지 않는다. 패스프레이즈를 잊어버리면 니모닉이 있어도 해당 지갑을 복구할 수 없다. | |
| 214 | ||
| 215 | * 패스프레이즈는 니모닉과 반드시 별도의 장소에 보관한다. 같은 장소에 함께 보관하면 보안 효과가 사라진다. | |
| 216 | * 패스프레이즈 없이 접근 가능한 지갑(빈 패스프레이즈)에는 소액만 보관하고, 패스프레이즈로 보호된 지갑에 주요 자산을 보관하는 방식으로 활용할 수 있다. | |
| 217 | ||
| 218 | == 외부 링크 == | |
| 219 | ||
| 220 | * [[https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki|BIP-39 — Mnemonic code for generating deterministic keys]] | |
| 221 | * [[https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki|BIP-32 — Hierarchical Deterministic Wallets]] | |
| 222 | * [[https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki|BIP-44 — Multi-Account Hierarchy for Deterministic Wallets]] | |
| 223 | * [[https://support.metamask.io/configure/wallet/how-to-restore-your-metamask-wallet-from-secret-recovery-phrase/|MetaMask 공식 가이드 — Secret Recovery Phrase로 지갑 복구]] | |
| 224 | ||
| 225 | [[분류:블록체인]] | |
| 226 | [[분류:암호화]] |