Giter VIP home page Giter VIP logo

hd-wallet's Introduction

HD Wallet

HD Wallet, atau Hierarchical Deterministic Wallet, adalah salah satu fitur digital wallet modern yang memungkinkannya memiliki banyak address namun tetap mengacu ke satu wallet yang sama.

HD Wallet muncul pertama kali dicetuskan tahun 2012 dalam dokumen BIP-32.

Proyek Apa Ini?

Proyek ini adalah versi over-simplified bagaimana sebuah HD Wallet dibuat. Saya sebut over-simplified karena walaupun langkah demi langkahnya legit, akan tetapi:

  1. Tidak ada blockchain network yang dilibatkan.
    Dengan demikian belum bisa dibuktikan apakah bisa dilakukan transaksi pada wallet yang tercipta.
  2. Tidak ada fungsi pengecekan balik integritas hashes yang tercipta.
    Karena tidak ada transaksi yang terjadi, maka fungsi-fungsi tersebut sengaja tidak dibuat.
  3. Beberapa fungsi kriptografi tidak dibuat dengan seharusnya.
    Terutama jika fungsi kriptografi tersebut bisa dibuat versi sederhananya.
  4. Beberapa fungsi kriptografi dibuat dengan bantuan external libraries agar lebih succint, sekalipun aslinya bisa ditulis dalam native libraries.

Proses Pembuatan HD Wallet

TLDR; (1) Entropy -> (2) Seed Phrase -> (3) Seed -> (4) Master Private Key and Chain Code -> (5) child Private Keys and Public Keys -> (6) Public Address

Langkah 1: Membangun Entropy

Entropy adalah tentang seberapa random pembuatan initial set of keys. Anggap entropy ini seperti melempar dadu; semakin banyak dadu dan lemparannya crucial bagi keamanan wallet.

Entropy biasanya sepanjang 128, 160, 192, atau 256 bits. Semakin banyak bits, semakin tinggi level entropy, semakin tinggi level security.

Randomness dari entropy berasal dari suatu metode yang bernama: CSPRNG, atau Cryptographically Secure Pseudo-Random Number Generator. Dalam Swift, fungsi SecRandomCopyBytes dapat dipakai untuk keperluan ini.

Langkah 2: Membangun Seed Phrase

Entropy yang sudah tercipta kemudian diubah kedalam bentuk yang disebut mnemonic seed phrase. Seed phrase ini berupa 12 atau 24 kata acak yang berguna untuk memulihkan (recovering) wallet jika suatu saat kalian tidak bisa mengakses wallet kalian.

Seed phrase ini muncul dari suatu konsensus di komunitas Bitcoin dunia: BIP39. Kumpulan kata-kata yang mungkin muncul dalam seed phrase bisa dilihat di BIP39 English Word List.

Langkah 3: Membuat Seed

Seed Phrase yang terbentuk (ditambahkan passphrase jika perlu) kemudian diproses menggunakan fungsi kriptografi berbasis password bernama PBKDF2, yang terdefinisi dalam PKCS5. Proses ini menghasilkan seed sepanjang 512-bit (64 bytes).

Jangan tertukar istilah. Seed tidak sama dengan Seed Phrase.

Langkah 4: Menciptakan Wallet dan (Master) Private Key

Seed yang tercipta kemudian digunakan untuk menciptakan HD Wallet menggunakan algoritma HMAC-SHA512.

Dalam HD Wallet ini terdapat Master Private Key dan Chain Code-nya. Keduanya akan digunakan untuk menciptakan banyak pasangan child Private Keys dan Public Keys-nya.

Langkah 5: Menciptakan (child) Private Key dan Public Key

Kombinasi dari master private key dan chain code, yang diproses dengan algoritma ECDSA akan menghasilkan pasangan child private key dan public key-nya.

Langkah 6: Menciptakan Wallet’s Public Address

Wallet Address bisa dianalogikan seperti alamat email: (1) Orang lain perlu tahu alamat ini agar bisa mengirimkan asset. (2) Kalian boleh menyebarkan address ini kepada siapapun. (3) Orang lain tidak bisa mengakses wallet kalian melalui address ini. Intinya: Wallet address = Email address.

/eof

hd-wallet's People

Contributors

rkukuh avatar

Stargazers

Jarrian Gojar avatar

hd-wallet's Issues

HD Wallet creation

  • Component: Regular button
  • HD Wallet will be created dynamically along with its (master) private key and chain code.
  • This only can happen once (only one HD Wallet allowed).

Refactor to MVVM

  • Should be done in (new) branch: feature/refactor-mvvm
  • Create partial views for each model

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.