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.

BTC_címek

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