[카테고리:] 미분류

  • 🔐 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());
    }
    
    • 내부 함수 mnemonicToSeedTrezor-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.cppCoin.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]