πŸ” BIP-39: λ‹ˆλͺ¨λ‹‰ β†’ μ‹œλ“œ λ³€ν™˜

βœ… ν‘œμ€€ μ„€λͺ…

  • BIP-39λŠ” λ‹ˆλͺ¨λ‹‰ 문ꡬ(mnemonic phrase)와 선택적 νŒ¨μŠ€ν”„λ ˆμ΄μ¦ˆ(passphrase)λ₯Ό μ‚¬μš©ν•˜μ—¬ **512λΉ„νŠΈ μ‹œλ“œ(seed)**λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
  • μ§€κ°‘ 볡ꡬ μ‹œ μ‚¬μš©ν•˜λŠ” “단어 리슀트”λŠ” 이 단계에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

🧩 wallet-core λ‚΄λΆ€ λ™μž‘

  • 파일: HDWallet.cpp
cppCopyEditHDWallet::HDWallet(const std::string& mnemonic, const std::string& passphrase) {
    const auto seed = mnemonicToSeed(mnemonic, passphrase);
    this->seed = Data(seed.begin(), seed.end());
}
  • λ‚΄λΆ€ ν•¨μˆ˜ mnemonicToSeedλŠ” Trezor-crypto 라이브러리 μ‚¬μš©:
cppCopyEditmnemonic_to_seed(mnemonic.c_str(), passphrase.c_str(), seed, nullptr);

🧭 BIP-44: 계측적 ν‚€ νŒŒμƒ (HD Wallet)

βœ… ν‘œμ€€ μ„€λͺ…

  • 경둜 ꡬ쑰: m / purpose' / coin_type' / account' / change / address_index
  • BIP-44λŠ” λͺ©μ (Purpose) = 44'λ₯Ό κ³ μ •ν•˜λ©°, λ‹€μ–‘ν•œ 코인을 μ§€μ›ν•˜κΈ° μœ„ν•œ coin_type ν•„λ“œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.

예: 이더리움 μ£Όμ†Œ: m/44'/60'/0'/0/0

🧩 wallet-core λ‚΄λΆ€ λ™μž‘

  • 파일: DerivationPath.cpp 및 Coin.cpp
cppCopyEditauto path = DerivationPath("m/44'/60'/0'/0/0");
PrivateKey privKey = hdWallet.getKey(path);
auto pubKey = privKey.getPublicKey(TWPublicKeyTypeSECP256k1);
auto address = Ethereum::Address(pubKey);
  • getKey(path)λŠ” μ‹œλ“œλ₯Ό 기반으둜 HMAC-SHA512 νŒŒμƒμ„ 톡해 private keyλ₯Ό μœ λ„ν•©λ‹ˆλ‹€.

πŸš€ BIP-84: Native SegWit (λΉ„νŠΈμ½”μΈ μ „μš©)

βœ… ν‘œμ€€ μ„€λͺ…

  • 경둜 ꡬ쑰: m/84'/0'/0'/0/0
  • Bech32 (bc1…) μ£Όμ†Œ 포맷을 μƒμ„±ν•˜λ©°, λΉ„νŠΈμ½”μΈμ˜ μ„Έκ·Έμœ—(segwit) κΈ°λŠ₯을 μ΅œλŒ€ν•œ ν™œμš©ν•˜λŠ” 방식.

🧩 wallet-core λ‚΄λΆ€ λ™μž‘

  • λΉ„νŠΈμ½”μΈ 계열 μ½”μΈμ˜ Coin.cpp에 coinType 별 defaultDerivationPath μ •μ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€:
cppCopyEdit// BIP84 - Native Segwit
if (coin == TWCoinTypeBitcoin) {
    return DerivationPath("m/84'/0'/0'/0/0");
}
  • μ‹€μ œ μ£Όμ†Œ 생성은 λ‹€μŒμ²˜λŸΌ 처리:
cppCopyEditauto privKey = wallet.getKey(coin, derivationPath);
auto pubKey = privKey.getPublicKey(TWPublicKeyTypeSECP256k1);
auto addr = Bitcoin::Bech32Address(pubKey, HRP); // bc1q...

πŸ“ 핡심 κ΄€λ ¨ 파일 정리

κΈ°λŠ₯κ²½λ‘œμ„€λͺ…
BIP-39 μ‹œλ“œ 생성HDWallet.cpp, TrezorCrypto/mnemonic.cλ‹ˆλͺ¨λ‹‰ β†’ μ‹œλ“œ
BIP-44 경둜 νŒŒμ‹±DerivationPath.cpp경둜 λ¬Έμžμ—΄ β†’ 숫자 λ°°μ—΄
ν‚€ νŒŒμƒ (44, 84 곡톡)HDWallet::getKey(...)μ‹œλ“œ β†’ private key
μ£Όμ†Œ 생성Coin.cpp, Bitcoin/Address.*, Ethereum/Address.*pubkey β†’ address
코인별 경둜 μ§€μ •Coin.cppBIP-44 vs BIP-84 λ“± 적용

🧠 μš”μ•½ 흐름도

csharpCopyEdit[Mnemonic (BIP-39)]
        ↓
  [Seed: 512bit]
        ↓
[DerivationPath (BIP-44/84)]
        ↓
[Private Key]
        ↓
[Public Key]
        ↓
[Address: Coin-specific format]

μ½”λ©˜νŠΈ

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€