WIF
chaos | entropie | generátor | hash | wif | mmBIP32-84 | adresy | transakce | blockchain | halving
WIF (Wallet Import Format) je specifický formát pro ukládání a přenos privátních klíčů v Bitcoinových peněženkách. Tento formát zajišťuje, že privátní klíče mohou být bezpečně a jednoduše importovány do různých peněženek. Ačkoli WIF není přímo popsán v žádném konkrétním BIP (Bitcoin Improvement Proposal), je dobře známý a používán v Bitcoinové komunitě.
1AGAMA8wpYMH6Q9EjThLuEAPW7C9J3gbK9
secret test:
467bd9d7a542e34532d4bccd383921a75c3f36b98a541ee9d3fc2a3ce07d451d6f41d6ca98408a5a74cebd8e293e5a9e6c4479c3be5746d791ae1621e65f6118785099ae8f0e9e5b7486b386262413a3741d73dfd6613fa8e9d07f49843a4d42
1AGAMA8…. je vanity („marnivá“) adresa. Což je speciální Bitcoinová adresa, která obsahuje požadovanou sekvenci znaků, což z ní činí nejen vizuálně atraktivní prvek, ale také potenciální marketingový nástroj. Vytvoření takové adresy vyžaduje určitou úroveň technických znalostí a může být potřebný i jistý výpočetní výkon a čas. Generování správné kombinace znaků může být i poměrně. Kromě vizuální přednosti mívá vanity adresa i bezpečnostní výhodu – eliminuje možnost chyby při rozpoznávání adresy, protože útočníci obvykle nevěnují čas ani zdroje k tomu, aby podvrhli adresu s identickým vzhledem v kompletním kontextu, což přispívá k ochraně před phishingovými útoky.
WIF (Wallet Import Format): Umožňuje přímý import privátního klíče v „tradičním“ formátu. (Electrum, Mycelium, Wasabi Wallet, Samourai Wallet…)
BIP39: Standard pro mnemotechnickou frázi (seed), která umožňuje generování hierarchických deterministických peněženek.
SLIP39: Standard pro sdílení seedu (Shamir’s Secret Sharing) používaný hlavně v hardwarových peněženkách, jako je Trezor.
1. WIF Formát v Kódu Bitcoin Core:
WIF formát je popsán v implementaci Bitcoin Core, konkrétně v části kódu, která se zabývá privátními klíči a jejich konverzí do formátu WIF.
V Bitcoin Core kódu najdete implementaci WIF v souboru:
src/key.cpp
src/base58.cpp
(pro Base58Check kódování)
Funkce v kódu Bitcoin Core, které souvisejí s WIF, jsou například:
CKey::SetWIF()
aCKey::GetWIF()
– slouží k nastavení a získání privátního klíče ve formátu WIF.EncodeBase58Check()
aDecodeBase58Check()
– slouží k zakódování a dekódování dat do/z Base58Check formátu, což je součást WIF formátu.
2. Struktura WIF:
WIF formát je definován následujícími kroky:
- Prefix:
- Přidá se prefix
0x80
pro Bitcoin Mainnet (pro Testnet je to0xEF
).
- Přidá se prefix
- Privátní klíč:
- Privátní klíč je 32 bajtů dlouhé číslo (256 bitů).
- Kompresní příznak (volitelný):
- Pokud je privátní klíč komprimovaný, přidá se bajt
0x01
na konec.
- Pokud je privátní klíč komprimovaný, přidá se bajt
- Checksum:
- Vypočítá se dvojitý SHA-256 hash na celém řetězci (prefix + privátní klíč + případný kompresní příznak) a z výsledku se vezmou první 4 bajty, což je kontrolní součet (checksum).
- Base58Check kódování:
- Výsledný řetězec (prefix + privátní klíč + případný kompresní příznak + checksum) je zakódován pomocí Base58Check.
- Výsledný řetězec (prefix + privátní klíč + případný kompresní příznak + checksum) je zakódován pomocí Base58Check.
Function generate_bitcoin_address: Parameters: private_key_bytes: The 256-bit private key in bytes. compressed: A boolean flag indicating whether to generate a compressed or uncompressed address. Public Key Generation: If compressed is True, the public key is compressed, meaning it will be 33 bytes long. If compressed is False, the public key is uncompressed, meaning it will be 65 bytes long. Hashing: SHA-256 followed by RIPEMD-160 is applied to the public key bytes. Version and Checksum: A version byte (0x00 for Bitcoin Mainnet) is prepended. The checksum is calculated using double SHA-256, and the first 4 bytes are appended. Base58Check Encoding: The final address is encoded in Base58Check format.
3. Příklad WIF specifikace:
- Privátní klíč:
1E99423A4ED27608A15A2616DA3C3F55EFD084FAE0A3C50E8F0CEFAE27902637
- Prefix:
0x80
- Kompresní příznak:
0x01
(pokud je použit komprimovaný formát) - Výsledek po kódování: WIF klíč, např.
5J1F3zi1XsWkDzWxjt7sP9qA4JZL9MPM6t8bZsnkVdPLaMMqBB8
4. BIP:
Ačkoli WIF není přímo součástí žádného BIP, WIF souvisí s těmito BIPy:
- BIP32: Hierarchicky deterministické peněženky. Privátní klíče generované z BIP32 seedu mohou být převedeny do WIF.
- BIP44: Víceúrovňová hierarchická deterministická struktura založená na BIP32.
- BIP39: Generování seedu pomocí mnemotechnické fráze, ze kterého lze odvodit privátní klíče.
Shrnutí:
- Specifikace WIF je implementována v kódu Bitcoin Core, především v souborech
key.cpp
abase58.cpp
. - WIF není přímo specifikován v žádném BIP, ale je běžně používaný v rámci Bitcoinové komunity pro přenos privátních klíčů.
- BIPy jako BIP32, BIP44 a BIP39 souvisejí s odvozováním privátních klíčů, které mohou být následně převedeny do WIF formátu.
xx https://github.com/vbuterin/pybitcointools (2015)
-> https://github.com/primal100/pybitcointools (2021)
https://github.com/agama-point/agama_point_crypto/blob/main/lbc_guru_dio.py
Zde je rozšířená tabulka (chatGPT 2024/06) s více peněženkami a nahrazeným sloupcem SLIP39 za LN (Lightning Network):
Aplikace | Platforma | Podpora WIF | Podpora BIP39 | Podpora LN (Lightning Network) |
---|---|---|---|---|
Electrum | Desktop (Windows, macOS, Linux), Android | Ano | Ano | Ano |
Mycelium | Mobilní (Android, iOS) | Ano | Ano | Ne |
Coinomi | Mobilní (Android, iOS), Desktop (Windows, macOS, Linux) | Ne | Ano | Ne |
Exodus | Desktop (Windows, macOS, Linux), Mobilní (Android, iOS) | Ne | Ano | Ne |
Trust Wallet | Mobilní (Android, iOS) | Ne | Ano | Ne |
Ledger Live | Desktop (Windows, macOS, Linux), Mobilní (Android, iOS) | Ne | Ano | Ne |
Trezor Suite | Desktop (Windows, macOS, Linux), Web | Ne | Ano | Ne |
Armory | Desktop (Windows, macOS, Linux) | Ano | Ano | Ne |
Wasabi Wallet | Desktop (Windows, macOS, Linux) | Ano | Ano | Ne |
BlueWallet | Mobilní (Android, iOS) | Ano | Ano | Ano |
Samourai Wallet | Mobilní (Android) | Ano | Ano | Ano |
Green (Blockstream) | Desktop (Windows, macOS, Linux), Mobilní (Android, iOS) | Ne | Ano | Ano |
Muun Wallet | Mobilní (Android, iOS) | Ne | Ano | Ano |
Zap Wallet | Desktop (Windows, macOS, Linux), Mobilní (Android, iOS) | Ne | Ne | Ano |
Breez Wallet | Mobilní (Android, iOS) | Ne | Ne | Ano |
Phoenix Wallet | Mobilní (Android, iOS) | Ne | Ne | Ano |
Sparrow Wallet | Desktop (Windows, macOS, Linux) | Ano | Ano | Ne |
Bitcoin Core | Desktop (Windows, macOS, Linux) | Ano | Ne | Ne |
Zeus Wallet | Mobilní (Android, iOS) | Ne | Ne | Ano |
Vysvětlení:
- LN (Lightning Network): Podpora pro Lightning Network, což je druhá vrstva protokolu Bitcoinu pro rychlé a levné transakce.
Klíčové body:
- Electrum a BlueWallet poskytují širokou škálu funkcí, včetně podpory WIF, BIP39 a Lightning Network.
- Mycelium, Samourai Wallet, a Green (Blockstream) jsou silné peněženky, které podporují BIP39 a některé z nich také Lightning Network.
- Zap Wallet, Breez Wallet, Phoenix Wallet, a Zeus Wallet jsou primárně zaměřené na Lightning Network a nemusí podporovat klasický BIP39 nebo WIF formát.
- Bitcoin Core a Armory jsou vhodné pro uživatele, kteří preferují kompletní kontrolu nad svými klíči, včetně podpory WIF, ale ne Lightning Network.