Hierarchical Deterministic Wallet

HD Wallet

HD Wallet์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ?

HD ์ง€๊ฐ‘(์—์ด์น˜๋”” ์ง€๊ฐ‘)์ด๋ž€ Hierarchical Deterministic Wallet์˜ ์•ฝ์ž๋กœ์„œ, ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ ์‹œ๋“œ(seed) ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์•”ํ˜ธํ™”ํ ์ง€๊ฐ‘์ด๋‹ค. ๊ณ„์ธต์  ๊ฒฐ์ • ์ง€๊ฐ‘์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

โ€œํ•ด์‹œ๋„ท ์œ„ํ‚คโ€

ํ•œ ๋งˆ๋””๋กœ ๋งˆ์Šคํ„ฐ seed ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ง€๊ฐ‘์ด๋‹ค.

๋งค๋ฒˆ ์ฝ”์ธ์˜ ํŠธ๋žœ์žญ์…˜์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ์ง€๊ฐ‘์˜ ์ฃผ์†Œ๊ฐ€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ์ง€๊ฐ‘์„ HD Wallet ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ณดํ†ต ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ง€๊ฐ‘ = 1๊ฐœ์˜ ์ฃผ์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

ํ•˜๋‚˜์˜ ์ง€๊ฐ‘์— ์—ฌ๋Ÿฌ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด๋ ‡๊ฒŒ ์ž„์˜๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ๊ทธ๋•Œ ๊ทธ๋•Œ ์ถ”๊ฐ€ ์ƒ์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๊ณ  ์ƒ์„ฑ๋œ ์ ์ด ์žˆ๋Š” ๋ชจ๋“  ์ฃผ์†Œ๋Š” ๊ณ„์†ํ•ด์„œ ์œ ํšจํ•˜๋ฉฐ, HD ์ง€๊ฐ‘ ๋‚ด์—์„œ ํ†ตํ•ฉ๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค.

์ง€๊ฐ‘์—์„œ ๋ณด์—ฌ์ง€๋Š” ์ž”์•ก์€ ์ด ๋ชจ๋“  ์ฃผ์†Œ์— ๋“ค์–ด์žˆ๋Š” ์ฝ”์ธ ์ˆ˜์˜ ์ดํ•ฉ์ด ๋˜๋ฉฐ, ์ˆ˜์‹  ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๋Š” ์ฃผ์†Œ๋Š” ๋‹จ์ง€ ์ตœ๊ทผ์— ์ƒ์„ฑํ•œ ์ฃผ์†Œ๋ฅผ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.

https://steemit.com/kr/@goldenman/hd-wallet

์œ„ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด์ž. 12 word random Mnemonic์—์„œ Master Private Key๊ฐ€ ๋‚˜์˜จ๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋กœ add Counter๋ผ๋Š” ์ž‘์—…์„ ๊ฑฐ์น˜๋Š”๋ฐ, ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์„œ ๋‚ด๊ฐ€ 10๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด 10๊ฐœ๊นŒ์ง€ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด generate key๋‹จ๊ณ„์—์„œ 10๊ฐœ์˜ private key๊ฐ€ ๋‚˜์˜ค๊ณ , ๋‹น์—ฐํžˆ ์ด๋ฅผ ํ†ตํ•ด 10 ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ๊ธฐ ๋‹ค๋ฅธ 10๋ช…์ด ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ ์ฃผ์†Œ์— ์ž…๊ธˆํ•˜๋”๋ผ๋„, 1๊ฐœ์˜ ์ง€๊ฐ‘์— ๋ˆ์ด ๋ชจ์ด๊ฒŒ ๋œ๋‹ค.

์œ„ํ—˜ํ•˜์ง€ ์•Š์„๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์˜คํžˆ๋ ค ๋” ์•ˆ์ „ํ•ด์ง„๋‹ค.

๋ธ”๋ก์ฒด์ธ์˜ ์ง€๊ฐ‘ ์ฃผ์†Œ๋Š” ์ด๋ฉ”์ผ๊ณผ ๊ฐ™๋‹ค. ๋‹จ ํ•˜๋‚˜์˜ ์ฃผ์†Œ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋‚ด๊ฐ€ ๋ณด๋‚ด๊ณ  ๋ฐ›๋Š” ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ๋‚ด์—ญ์„ ํ•œ ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

HD์ง€๊ฐ‘์—์„œ๋Š” ํ•˜๋‚˜์˜ ์ง€๊ฐ‘๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•Œ์•„์„œ ๋ถ„์‚ฐํ•˜์—ฌ ๋ณด๊ด€ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„ ์–ด๋А์ •๋„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋ฌผ๋ก  ํŒŒ์‡„๋œ ๋ฌธ์„œ๋„ ๋งž์ถ”์–ด๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋ถ€์ง€๋Ÿฐํžˆ ๋ธ”๋Ÿญ์ฒด์ธ์„ ์กฐํ•ฉํ•ด๋ณด๋ฉด ์ด๊ฒƒ์ด HD์ง€๊ฐ‘ ๋‚ด๋ถ€์˜ ์—ฌ๋Ÿฌ ์ฃผ์†Œ์˜ ๊ฒƒ์ธ๊ฐ€ ์ถ”๋ก ์€ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹น์—ฐํžˆ ํ•œ ๋ˆˆ์— ์ •๋ฆฌ๋˜์–ด ๋ณด์ด๋Š” ๊ฒƒ๊ณผ๋Š” ์ƒ๋‹นํ•œ ์ˆ˜์ค€์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

์ž์‹์˜ ๋น„๋ฐ€ํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜๋ฉด ๋ถ€๋ชจ์˜ ๋น„๋ฐ€ํ‚ค๋Š” ์œ„ํ—˜ํ•˜์ง€ ์•Š์„๊นŒ?

๋‹น์—ฐํžˆ ๊ดœ์ฐฎ๋‹ค. ์ž์‹์˜ ๋น„๋ฐ€ํ‚ค๋กœ ๋ถ€๋ชจ์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ์—ญ์‚ฐํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ตฌํ˜„๋ฒ•

Seed

HD ์ง€๊ฐ‘์€ ๋ฃจํŠธ ์‹œ๋“œ(Root Seed) ํ•œ ๊ฐœ๋กœ๋ถ€ํ„ฐ ๋งŽ์€ ํ‚ค์™€ ์ฃผ์†Œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

๋ฃจํŠธ ์‹œ๋“œ๋Š” ๋‹ˆ๋ชจ๋‹‰ ๋‹จ์–ด ์ˆœ์„œ(Mnemonic Word Sequence)๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฃจํŠธ ์‹œ๋“œ๋ฅผ HMAC-SHA512 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด์‹œํ•œ ๊ฐ’์—์„œ ๋งˆ์Šคํ„ฐ ๊ฐœ์ธํ‚ค(Mater Private Key)๊ณผ ๋งˆ์Šคํ„ฐ ์ฒด์ธ์ฝ”๋“œ(Master Chain Code)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

512๋น„ํŠธ์˜ ํ•ด์‹œ๋œ ๊ฐ’์—์„œ ์™ผ์ชฝ 256๋น„ํŠธ๋ฅผ ๋งˆ์Šคํ„ฐ ๊ฐœ์ธํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ 256๋น„ํŠธ๋ฅผ ์ฒด์ธ์ฝ”๋“œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งˆ์Šคํ„ฐ ๊ณต๊ฐœํ‚ค๋Š” ํƒ€์›๊ณก์„  ๊ณฑ์…ˆ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์Šคํ„ฐ ๊ฐœ์ธํ‚ค๋กœ๋ถ€ํ„ฐ ๊ณ„์‚ฐ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์‹œ๋“œ(A)๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ด ์‹œ๋“œ(A)๋ฅผ ๊ฐ€์ง€๊ณ  ๋งˆ์Šคํ„ฐ ํ‚ค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ํŒŒ์ƒ์‹œํ‚ค๋Š” ๋‹ˆ๋ชจ๋‹‰ ํ˜น์€ ๋ฃจํŠธ ์‹œ๋“œ๋งŒ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํ‚ค๊ฐ€ ํฌํ•จ๋œ HD ์ง€๊ฐ‘์„ ๋ฐฑ์—…, ๋ณต์›, ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์™œ ๋ฃจํŠธ ์‹œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋‹ค์‹œ ์‹œ๋“œ(A)๋ฅผ ๋งŒ๋“œ๋Š”๊ฑธ๊นŒ?

์ด ๋•Œ DRBG๋ผ๋Š” ๊ฒƒ์ด ์‚ฌ์šฉ๋œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ๋žœ๋ค ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์ด๊ฒƒ์€ ์‚ฌ์‹ค ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•œ ๊ฐ€์งœ ๋‚œ์ˆ˜์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ง„์งœ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์งœ ๋‚œ์ˆ˜๊ฐ’์„ ํ•ด์‹ฑํ•œ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ง„์งœ ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ DRBG๋ผ๊ณ  ํ•˜๊ณ , HD ์ง€๊ฐ‘์—์„œ ์‹œ๋“œํ‚ค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

์‹œ๋“œ์—์„œ ๋งˆ์Šคํ„ฐํ‚ค๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‚˜์˜ค๋Š”๊ฑธ๊นŒ?

๊ณ„์ธต ๊ฒฐ์ •์  ์ง€๊ฐ‘์€ ์ž์‹ํ‚ค ์œ ๋„ ํ•จ์ˆ˜(CKD)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋ชจํ‚ค๋กœ ๋ถ€ํ„ฐ ์ž์‹ํ‚ค๋ฅผ ํŒŒ์ƒํ•œ๋‹ค.

์ž์‹ํ‚ค ์ƒ์„ฑ์—๋Š” ๋ถ€๋ชจํ‚ค, ์ฒด์ธ์ฝ”๋“œ, ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

์ž์‹ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจํ‚ค, ์ฒด์ธ์ฝ”๋“œ, ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ HMAC-SHA512๋กœ ํ•ด์‹œํ•œ๋‹ค.

ํ•ด์‹œ๋œ ๊ฐ’(512๋น„ํŠธ)์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ  ๊ฐœ์ธํ‚ค(256๋น„ํŠธ)์™€ ์ฒด์ธ์ฝ”๋“œ(256๋น„ํŠธ)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ด ๋ฐฉ๋ฒ•์œผ๋กœ ์ž์‹ํ‚ค๋ฅผ ๊ณ„์† ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ•ํ™”๋œ ์œ ๋„๋ฒ• (Hardened Derivation)

๋งŒ์•ฝ ์ž์‹ ํ™•์žฅ ๊ฐœ์ธํ‚ค๊ฐ€ ์œ ์ถœ๋˜๋Š” ๊ฒฝ์šฐ, ์ž์‹ ํ™•์žฅ ๊ฐœ์ธํ‚ค๊ฐ€ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ํ‚ค์™€ ์ฒด์ธ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์ž์‹์˜ ๊ฐœ์ธํ‚ค ์ „๋ถ€๋ฅผ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด HD์ง€๊ฐ‘์€ ๊ฐ•ํ™”๋œ ์œ ๋„(Hardened Derivation) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ•ํ™”๋œ ์œ ๋„ ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ํ‚ค์™€ ์ž์‹ ์ฒด์ธ์ฝ”๋“œ ๊ด€๊ณ„๋ฅผ ๋Š์–ด๋ฒ„๋ ค์„œ, ๋ถ€๋ชจํ‚ค์™€ ์ž์‹ํ‚ค ์‚ฌ์ด์— **๋ฐฉํ™”๋ฒฝ(firewall)**์„ ๋งŒ๋“ ๋‹ค.

m/44'/60'/0'/0/0 ์€ ๋ญ˜๊นŒ

์œ„์˜ ์•Œ ์ˆ˜ ์—†๋Š” ์ € ๋ฌธ์žฅ์€ ๋ฐ”๋กœ ๊ฒฝ๋กœ์ด๋‹ค.

HD ์ง€๊ฐ‘์˜ ๊ฐ ํŠธ๋ฆฌ ๋ ˆ๋ฒจ์€ ์Šฌ๋ž˜์‹œ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

๋งˆ์Šคํ„ฐ Private Key์—์„œ ํŒŒ์ƒ๋œ ๋น„๋ฐ€ ํ‚ค๋Š” m์ด ๋˜๊ณ , ๋งˆ์Šคํ„ฐ ๊ณต๊ฐœ ํ‚ค์—์„œ ์ƒ์„ฑ๋œ ๊ณต๊ฐœํ‚ค๋Š” M์ด ๋œ๋‹ค.

์ด ํ›„ ํŠธ๋ฆฌ ๋ ˆ๋ฒจ์ด ๊นŠ์–ด์งˆ ์ˆ˜๋ก ์Šฌ๋ž˜์‹œ๊ฐ€ ๋” ๋ถ™์œผ๋ฉด์„œ ๊ฒฝ๋กœ๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค.

M / 0 : ๋งˆ์Šคํ„ฐ ๊ณต๊ฐœํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๊ณต๊ฐœํ‚ค

m / 0 : ๋งˆ์Šคํ„ฐ ๋น„๋ฐ€ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹ ๋น„๋ฐ€ํ‚ค

m / 0 / 1 : ๋งˆ์Šคํ„ฐ ๋น„๋ฐ€ ํ‚ค์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹์˜ ๋‘ ๋ฒˆ์งธ ์ž์‹ ๋น„๋ฐ€ํ‚ค

โ€ฆ

BIP-44

๋น„ํŠธ์ฝ”์ธ์˜ BIP-44 ํ‘œ์ค€์€ ๋ณต์žกํ•œ ํ‚ค ์ƒ์„ฑ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

BIP-44๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ 5๊ฐœ์˜ ๋ ˆ๋ฒจ์˜ path๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

m / purpose' / coin_type' / account' / change / address_index

๊ฒฝ๋กœ์— ์žˆ๋Š” ์•„ํฌ์ŠคํŠธ๋กœํ”ผ(') ๋ฌธ์ž๋Š” BIP-32์˜ ๊ฐ•ํ™”๋œ ์œ ๋„(hardened derivation)๊ฐ€ ์‚ฌ์šฉ๋จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • purpose๋Š” 44'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. BIP-44 ๊ทœ๊ฒฉ์ด ์‚ฌ์šฉ๋จ์„ ์˜๋ฏธํ•œ๋‹ค.

  • coin_type์€ ๊ฐ€์ƒํ™”ํ ์ฝ”์ธ ์œ ํ˜•์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋”๋ฆฌ์›€์€ 60'์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ์ฝ”์ธ ์œ ํ˜• ์ฝ”๋“œ๋Š” SLIP0044 ํ‘œ์ค€ ๋ฌธ์„œ์—์„œ ์ฐพ์•„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • account์€ ํšŒ๊ณ„๋‚˜ ์กฐ์ง ๋ชฉ์ ์„ ์œ„ํ•ด ์ง€๊ฐ‘์„ ํ•˜์œ„ ๊ณ„์ขŒ๋กœ ์„ธ๋ถ„ํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

  • change์€ ์ด๋”๋ฆฌ์›€์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋น„ํŠธ์ฝ”์ธ์—์„œ ์ˆ˜์‹  ์ฃผ์†Œ(receiving address)์™€ ์ž”์•ก ์ฃผ์†Œ(change address)๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

  • address_index๋Š” ์ฃผ์†Œ ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ˆœ์ฐจ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.

Javascript ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

var Bitcore = require('bitcore-lib');

// ๋งˆ์Šคํ„ฐ ํ™•์žฅ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ
var xPriKey = new Bitcore.HDPrivateKey();

// ๋‹จ์ ˆ๋œ ํ™•์žฅ ์ž์‹ ๊ณต๊ฐœํ‚ค ์ƒ์„ฑ
var xPubKey = xPriKey.deriveChild("m/44'/60'/0'").hdPublicKey;

// 0๋ฒˆ์งธ ์ž์‹ ๊ณต๊ฐœํ‚ค ์ƒ์„ฑ
var pubKey = xPubKey.deriveChild("m/0/0").publicKey;
console.log(publicKey)

pubKey๊ฐ€ ์ž์‹์˜ ๊ณต๊ฐœํ‚ค ์ฃผ์†Œ, xPriKey๊ฐ€ ์ž์‹์˜ ๋น„๋ฐ€ํ‚ค๊ฐ€ ๋œ๋‹ค.

๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ ๋‹จ์–ด BIP-39

๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ ๋‹จ์–ด(mnemonic code words)๋Š” ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ด๋œ ์˜์–ด ๋‹จ์–ด์—์„œ ์‹œ๋“œ(seed)๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ๋Š” BIP-39 ํ‘œ์ค€์— ์ •์˜๋˜์–ด ์žˆ๋‹ค. ๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HD ์ง€๊ฐ‘์„ ์‰ฝ๊ฒŒ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ ๋‹จ์–ด์—ด์€ 12 ~ 24 ๋‹จ์–ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋‹ˆ๋ชจ๋‹‰ ์‹œ๋“œ์—์„œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.

var Mnemonic = require('bitcore-mnemonic');

// ๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ ์ƒ์„ฑ
var code = new Mnemonic(Mnemonic.Words.ENGLISH);
console.log(code.toString());

// ๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ์—์„œ ๊ฐœ์ธํ‚ค ์ƒ์„ฑ
var xPriKey = code.toHDPrivateKey();
console.log(xPriKey);

๋‹ˆ๋ชจ๋‹‰ ๋‹จ์–ด๋กœ๋ถ€ํ„ฐ ๊ฐœ์ธํ‚ค๋ฅผ ๋ณต์›ํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// ๋ณต์›์šฉ ๋‹ˆ๋ชจ๋‹‰ ๋‹จ์–ด
var words = "damage clog alert hurt fork purchase iron cotton apple buffalo survey vast";

// ๋‹ˆ๋ชจ๋‹‰ ๋‹จ์–ด๋กœ ๋ถ€ํ„ฐ ๊ฐœ์ธํ‚ค ๋ณต์›
var xPriKey = Mnemonic(words).toHDPrivateKey();
console.log(xPriKey);

์ฐธ๊ณ ๋กœ bip39 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ๊ธ€์„ ๋‹ˆ๋ชจ๋‹‰ ๋‹จ์–ด๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์ด๋”๋ฆฌ์›€ ์ง€๊ฐ‘์„ ๊ฐœ๋ฐœํ•œ๋‹ค๋ฉด BIP-32, BIP-39, BIP-43, BIP-44 ํ‘œ์ค€์— ๋”ฐ๋ผ ๋‹ˆ๋ชจ๋‹‰ ์ฝ”๋“œ๋ฅผ ์‹œ๋“œ๋กœ ์‚ฌ์šฉํ•˜๋Š” HD์ง€๊ฐ‘์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

Sources โ€ฆ

Last updated