Bitcoin címek generálásának a menete – technikai útmutató
A bitcoin címek nyílt forráskódú könyvtárak alapján algoritmikus hash funkciók használatával generálhatók ki. A felhasználóknak általában ugyanis több mint egy bitcoin címre van szükségük a coinok küldéséhez a blokkláncon belül. A Bitcoin címeket úgynevezett publikus kulcs kriptográfiának nevezett koncepció alapján hozzák létre. A privát kulcsokat azonban csak a tulajdonosok/felhasználók ismerik.
Ebben a cikkünkben áttekintjük a bitcoin címek generáláshoz alkalmazható offline algoritmikus koncepciókat, mint a publikus kulcs – privát kulcs, EDCSA, SHA-256 funkció, RIPEMD-160 hashelés és bináris bitcoin címek.
A bitcoin címek alfanumerikus karakterekből állnak Base58 kódolás alapján – nem tartalmazhatnak a címek 0 (nulla), O (nagybetűs O), I (nagybetűs I), l (kisbetűs L) karaktereket, és nem lehetnek nem-alfanumerikus karakterek sem, mint a + (plusz) és / (slash). Több információ a Base58 kódolásról itt található: https://en.wikipedia.org/wiki/Base58
Ennek megfelelően a Bitcoin címek alfabetikus karaktereket tartalmazhatnak csak a Base58 kódolásnak megfelelően: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Ma 3 különböző címformátumot alkalmaznak a Bitcoin esetében:
1. P2PKH(Pay-to-PubkeyHash) — 1EmtPRcdK168WSN5czx15VuUxBBLhR8MZC — ezek a címek ‘1’-sel kezdődhetnek
2. P2SH (Pay to script hash) — 34S3z3phL2Fdm7QCas3Q8AN9ZwPs7qpPQn — ezek a címek ‘3’-sal kezdődhetnek
3. Bech32 (SegWit) — bc1qh3qfn8fjj05f7v9x4k9yv487xdp6enpl5nslll — ezek a címek ‘bc1’-vel kezdődhetnek
Első lépés tehát a privát kulcs létrehozása egy nyílt forráskódú bitcoin könyvtár használatával. Ezek után a bitcoin publikus kulcsok kerülnek létrehozásra egy algoritmus által, amit Elliptic Curve Digital Signature Algoritmusnak hívnak.
Grafikus bitcoin cím generátor:
http://royalforkblog.github.io/2014/08/11/graphical-address-generator/
Ennek részleteiről bővebben olvashatsz itt:
https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm
https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm
Néhány nyílt forráskódú könyvtár, ami ugyanezt a funkcionalitást biztosítja:
https://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography)
https://en.wikipedia.org/wiki/Cryptlib
https://en.wikipedia.org/wiki/Crypto%2B%2B
Privát kulcsok
- Ezek random generált számok, amit csak a felhasználó ismer. Ezt egy könyvtár vagy kriptográfiai hash funkció által lehet létrehozni.
- Nem szabad megosztani senkivel sem, ugyanis aki hozzáfér a privát kulcshoz, az eléri a blokkláncon tárolt kriptót is
- Ezzel írják alá a tranzakciókat küldés és fogadás esetén
- Ez egy 32 byte-os aláíratlan integer (256 bit)
Publikus kulcsok
- a publikus kulcsok a privát kulccsal közösen használhatók
- a publikus kulcsokat a privát kulcsok által generálhatjuk, viszont nem készíthetsz privát kulcsot publikus kulcsból (a publikus kulcsgenerálás tehát egy egyirányú funkció)
Bitcoin címek
- A bitcoin címek anonimak, ami azt jelenti, hogy senki sem tudja, hogy egy cím kihez, melyik személyhez tartozik
- A bitcoin címek készíthetők offline a számítógépeden, internetkapcsolat nélkül is.
- A bitcoin címek létrehozása ingyenes, nem kell fizetni érte
- A bitcoin címet csak egyszer lehet felhasználni. Ha egy címet egynél többször akarnál használni, az komoly biztonsági problémákat okozna.
- bitcoin címek maximum 35 karakter hosszúak lehetnek.
- A bitcoin címek QR kód formájában is kigenerálhatók, így a telefonod is be tudja olvasni, és így egyszerűen tudsz BTC-t küldeni.
A bitcoin címek létrehozásának technikai lépései
- Hozz létre egy privát kulcsot egy nyílt forráskódú könyvtár használatával
- Általában célszerűbb együtt kezelni a privát kulcsot és a publikus kulcsot is, így nem kell vesződnöd az implementáció részleteivel
0. lépés: Privát kulcs: a4f228d49910e8ecb53ba6f23f33fbfd2bad442e902ea20b8cf89c473237bf9f
Privát kulcs Base58: C6t2iJ7AXA2X1KQVnqw3r7NKtKaERdLnaGmbDZNqxXjk
- Hozd tehát létre a kapcsolódó publikus kulcsot a kigenerált privát kulcs alapján a nyílt forráskódú könyvtárból
- A könyvtárak tehát biztosítják a publikus kulcsokat is
1.lépés: publikus kulcs: 03564213318d739994e4d9785bf40eac4edbfa21f0546040ce7e6859778dfce5d4
- Alkalmazd SHA-256 hash funkciót az 1. lépésben generált publikus kulcsra (dekódolnod kell a hexet az SHA-256 előtt).
- SHA-256-ról bővebben itt olvashatsz: https://en.wikipedia.org/wiki/SHA-2
2. lépés: SHA-256 publikus kulcs: 82c77b119e47024d00b38a256a3a83cbc716ebb4d684a0d30b8ea1af12d42d9
- Alkalmazd a RIPEMD-160 hash funkciót a 2. lépésben generált eredményre (a publikus kulcs SHA-256).
- RIPEMD-160 hashről bővebben itt olvashatsz: https://en.wikipedia.org/wiki/RIPEMD
3. lépés: RIPEMD-160 hash a SHA-256 publikus kulcs eredményére: 0c2c910a661178ef63e276dd0e239883b862f58c
- Tedd hozzá a verzió prefixjét a 3. lépés eredményéhez, amely meghatározza a különböző címformátumokat – 00 a verzió byte (0x00 a Main Network-höz).
4. lépés: RIPEMD-160 hash a verzió byte-al: 000c2c910a661178ef63e276dd0e239883b862f58c
- Alkalmazd kétszer a SHA-256 hash funkciót a 4. lépésre (SHA-256(SHA-256(ripemd-160WithVersionByte))).
5–6. lépés: 2 * SHA-256 hash RIPEMD-160 hash-re a verzió byte-tal: c3c0439f33dc4cf4d66d3dd37900fc12597938a64817306b542a75b9223213e0
- Válaszd le az első 5 byte-ot a 6. lépésben generált eredményről, amit a második SHA-256 funkció kimenetele ad
7. lépés: CheckSum: c3c0439f
- Add hozzá a checksumot a 4. lépésben generált RIPEMD-160 hash verzió byte-hoz
8. lépés: 25 Byte-os bináris Bitcoin cím: 000c2c910a661178ef63e276dd0e239883b862f58cc3c0439f
- Alkalmazd és konvertáld át a bináris Bitcoin címet a Base58 funkció alkalmazásával a Bitcoin cím formátumra
- A Base58-ról bővebben itt olvashatsz: https://en.wikipedia.org/wiki/Base58
9. lépés: Bitcoin cím: 127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv
Meg is találhatod a címet a blokkláncon:
127NVqnjf8gB9BFAW2dnQeM6wqmy1gbGtv