Sicherheit bei Bitcoin (Schlüssel und Pseudonyme), Einstieg Hashfunktionen

in #deutsch6 years ago

Dies ist nun mein siebter Artikel zum Thema Bitcoin (Funktionsweise bzw technische Erläuterungen). Ich hoffe ihr könnt ein paar Informationen daraus ziehen und so Bitcoin besser verstehen (macht auch bei Investitionen Sinn, da man verstehen sollte, in was man investiert, um abwägen zu können, wie viel Geld man bereit ist zu investieren).

Ich werde nachdem ich mit der Artikelserie über Bitcoin fertig bin auch noch Artikel über Iota schreiben. Ansonsten sind die Themen auf diesem Blog Fitness, Ernährung sowie Persönlichkeitsentwicklung (und eben Kryptowährungen). Bei Interesse könnt ihr mir gerne folgen:)

Übersicht über die bisher erschienenen Artikel zum Thema Bitcoin:

  1. Das Bitcoin-System
  2. Erfüllung der drei Transaktionsbedingungen bei Bitcoin
  3. Transaktionskonsens bei Bitcoin (Mining und Blockchain)
  4. Netzwerkknoten (Bitcoin)
  5. Bitcoin Kommunikationsprotokoll und aktuelle Registerversion, Verwaltung des Bitcoin Systems (BIP), Bitcoin ist Fiatgeld
  6. Pseudonyme und Zugriffsberechtigungen bei Bitcoin (transaktionslegitimität)

Einweg-Pseudonymität

Für die Sicherheit (und Anonymität) ist es wichtig, dass die Pseudonyme im Bitcoin System nur einmal verwendet werden. Wie das gelöst wird steht auch als Kommentar unter meinem letzten Artikel wird aber hier nochmal kurz erklärt. Viele Wallets (die meisten) erstellen für jede Transaktion ein neues Schlüsselpaar (da aus dem public key ja die Bitcoin Adresse generiert wird, wird damit auch eine neue Bitcoin Adresse erstellt). Bei der Transaktion (von deiner Wallet aus) sendet die Wallet also den eigentlichen Betrag an die Adresse des Rechnungsstellers und generiert gleichzeitig neue Adressen, auf die dann das restliche Guthaben geschickt wird.

Dabei wird schnell klar, das es einen extrem großen Bedarf nach Adressen bzw Pseudonymen gibt. Diese können wie in Artikel 6 gelernt aus dem private key generiert werden oder aber mithilfe eines sogenannten Seed´s.

Wallets (deterministisch und nicht-deterministisch)

Nicht deterministische Wallets erstellen zu Beginn eine gewisse Anzahl an Schlüsselpaaren die dann nacheinander genutzt werden.

Deterministische Wallets dagegen nutzen eine Zufallszahl (den Seed) und erzeugen mithilfe von diesem Seed und einer Hashfunktion die private keys (Hashwert vom Seed und der Laufnummer). Das geile ist jetzt, dass das eine unbegrenzte Anzahl neuer private keys ermöglicht (wie auch bei nicht deterministischen Wallets) aber mit dem großen Vorteil, dass nur der Seed als Backup gespeichert werden muss (den Seed bekommst du anfänglich, schreibst ihn auf/gravierst ihn in eine Stahlplatte die du in einen Tresor legst oder was auch immer:D) und dann kannst du aus dem Seed deine private keys wiederherstellen, falls du deinen private key verlierst. Bei der nicht deterministischen Wallet müssen alle private keys gespeichert werden (du musst die ganze Zeit Backups machen wenn ein neues Schlüsselpaar erzeugt wird). Die Deterministischen Wallets sind also "besser" wenn man das so sagen kann. Das die Schlüssel durch eine Deterministische Wallet auf Basis eines Seeds erzeugt wurden ist "von außen"nicht erkennbar. Es gibt auch eine "Weiterentwicklung" der deterministischen Wallet, die Hierarchisch deterministische Wallet.

Sicherheit des private keys und der Pseudonyme

Da die privaten Schlüssel ja aus einer bereits bekannten Zahlenmenge gewählt werden (wie in Artikel 6 beschrieben) sind die möglichen Werte bereits vorher bekannt. Da jeder Nutzer sich eine unbegrenzte Anzahl von private keys und damit Pseudonymen aussuchen kann, könnte es hierbei zu Überschneidungen kommen.

Hierzu mal drei Szenarien, die aufzeigen, wie gering das Risiko ist das ein und derselbe private key zweimal ausgewählt wird, oder es anderweitig zu Überschneidungen kommt.

  • Szenario 1:

Jemand will den private key einer bestimmten Bitcoin Adresse um über diese Bitcoin Einheiten verfügen zu können. Dieser private key kann durch ihn nur durch einen Brute-Force Angriff (also ausprobieren aller möglichen Kombinationen) bestimmt werden. Mit einem Computer der in der Lage ist, 60 Milliarden private keys pro Sekunde zu überprüfen würde man im 24/7 Betrieb über 7 Quadrilliarden Jahre benötigen um den passenden private key mit einer einprozentigen Wahrscheinlichkeit zu finden.

  • Szenario 2:

Den private key für irgendeine beliebige Adresse mit Guthaben zu finden ist praktisch genauso unmöglich. Selbst wenn man alle 21 Millionen Bitcoin Einheiten (die es irgendwann mal geben wird) kleinstmöglich aufteilt (also in 2.1 Billiarden Satoshi) und jedes Satoshi einzeln auf einer anderen Adresse verteilt würde man mit dem Computer aus dem ersten Szenario noch knapp 3.7 Billionen Jahre benötigen um mit einer einprozentigen Wahrscheinlichkeit einen passenden private key zu finden (mit der Brute Force Methode). 

  • Szenario 3:

"Geburtstagsparadoxon": Wahrscheinlichkeit das durch das gesamte Bitcoin Netzwerk mindestens 2 gleiche private keys gewählt werden. (Geburtstagparadoxon ist die Wahrscheinlichkeit, nach der in einer Gruppe von Menschen mindestens zwei am gleichen Tag Geburtstag haben). Bei 5,4*10 hoch 22 erstellten Bitcoin Adressen liegt die Wahrscheinlichkeit einer solchen Kollision bei 0.01%. Selbst wenn jeder Mensch auf der Welt einen Computer hätte und Non-stop Bitcoin Adressen generieren würde, würde es über 300 Jahre dauern bis die kritische Schlüsselzahl überschritten wäre (jeder Mensch bräuchte dann ungefär 50 000 TB Speicherplatz).

Im Endeffekt wird dadurch klar, dass das System mit Pseudonymen und Schlüsseln sehr sicher ist. Für Hacker lohnt es sich überhaupt nicht die Brute-Force Methode bei Bitcoin private keys anzuwenden (die Rechenleistung ist beim Minen besser aufgehoben).

Der einzige Weg durch den euer private key unsicher wird, ist eigentlich wenn ihr diesen von "zwielichtigen" Zufallsprogrammen erstellen lasst. Diese private keys könnten dann ein bestimmtes Muster aufweisen, dass ein Hacker nutzen könnte.

Manche Zufallsgeneratoren nutzen auch die Bewegung der Maus zum erstellen eines private keys, was wenn der Generator kein Scam ist sicher ist.

Am besten ist es meiner Ansicht nach die private keys abseits vom Computer mithilfe von physikalischen Phänomenen (die aufjedenfall echte Zufallswerte liefern und garantiert kein Scam sind:D) zu erstellen. Da könnt ihr ganz kreativ sein. zb ganz altmodisch mit Würfeln oder Münzwürfen oder Naturereignissen die ihr in Zahlen irgendwie darstellt:D

Einstieg Hashfunktionen und Hashwerte

Wie uns mittlerweile klar geworden ist, basiert sehr viel im Bitcoin System auf diesen Hashfunktionen. Hier wird jetzt erklärt was diese Hashfunktionen überhaupt sind.

Hashfunktionen H sind mathematische Abbildungen, die einem Input m (auch Urbild genannt)einen Hashwert h zuweisen H(m)=h. Das Urbild kann dabei eine Zeichenfolge von beliebiger Länge sein. Ein und das selbe Urbild wird mit einer gegebenen Hashfunktion immer den selben Hashwert liefern. Theoretisch können auch unterschiedliche Urbilder den gleichen Hashwert liefern (Kollision).

Auch in der IBAN wird übrigens eine Hashfunktion verwendet. Die ersten zwei Ziffern (nach dem Ländercode selbstverständlich) entsprechen nämlich dem Hashwert vom Rest der Kontonummer. Falls nun eine Zahl falsch eingetippt wird, wird ein Fehler gemeldet, da der Hashwert nichtmehr passt.

Damit dies funktioniert muss die Hashfunktion zwei wesentliche Eigenschaften haben:

  1. Wenn man verschiedne Inputs durchprobiert sollten alle Hashwerte ungefähr gleich oft vorkommen.
  2. Selbst kleine Input Änderungen sollten zu einem anderen Hashwert führen (sonst würde die Tippfehler Kontrolle bei einem falsch eingegebenen Wert ja nichtmehr funktionieren).

Diese Hashfunktionen sind aber nicht für komplexere Aufgaben geeignet und könnten manipuliert werden (Wahl von bestimnmten Urbildern führt zu bestimmten Hashwerten, es ist möglich Kollisionen herbeizuführen). Außerdem dürfen vom Hashwert keine Rückschlüsse auf das Urbild zu vollziehen sein. Das wird durch die Verwendung kryptografischer Hashfunktionen möglich.

Integrität der Urbilder durch kryptografische Hashfunktionen

Jegliche Anpassung des Urbilds führt sofort zu einer starken Veränderung des Hashwerts. Aufgrund der Eigenschaften kryptografischer Hashfunktionen (bei Hashfunktionen wäre es möglich) ist es außerdem unmöglich eine Kollision herbeizuführen; das bedeutet ein anderes Urbild zu finden, dass den gleichen Hashwert ergibt.

Hashwerte als Arbeitsnachweis (Block ID Schwellenwert)

Da es bei kryptografischen Hashfunktionen nicht möglich ist gezielte Hashwerte herbeizuführen, kann eine solche Hashfunktion (bei Bitcoin SHA-256) auch als Nachweis dazu dienen, dass zur Berechnung eines bestimmten Hashwertes eine bestimmte Rechenleistung genutzt wurde(im Schnitt). Wie das ganze bei Bitcoin genutzt wird, wurde in Artikel 3 bereits grob erklärt.

Fragen oder Anmerkungen wie immer gerne in die Kommentare. Ich werde alle Fragen so gut ich kann beantworten. Über einen Upvote würde ich mich ebenfalls sehr freuen. Schönen Tag noch:)

Quellen

 

  • Mein Wissen über dieses Thema habe ich größtenteils aus diesem Buch. Ich kann es sehr empfehlen.

https://www.amazon.de/gp/product/3738653929/ref=as_li_tl?ie=UTF8&tag=urdreamscomet-21&camp=1638&creative=6742&linkCode=as2&creativeASIN=3738653929&linkId=d95515f27071b70b443408ad7170a100

Dies ist ein ref Link von mir zu dem Buch. 

http://www.righto.com/2014/09/mining-bitcoin-with-pencil-and-paper.html


Sort:  

Hi hi,

vielen Dank wieder für den tollen Artikel. Wollte mir das besagte Buch schon kaufen, kann ich mir aber bestimmt bald schenken... haha. Die Frage ist natürlich ob nicht irgendwann mal ein Quantencomputer (sofern die je funktionieren) die ganzen Private Keys hacken könnte. Dann ist sicher Ende im Gelände. Wie ich aber auch mitgekriegt hab gehen zu dem Thema die Meinungen ziemlich weit auseinander. Manche sagen wenn der QC da ist, ist die BC futsch, andere sagen selbst ein QC kann der BC nix anhaben. Na wir werden sehen.

Ich muss übrigens leider gestehen, dass ich das mit den Hashes immer noch nicht ganz gegriffen hab. Hast du da vielleicht mal eine schöne Abbildung zu Thema (bin ja eher so der visuelle Typ wie du vielleicht weißt).

Ansonsten Daumen hoch & Resteem

Bis neulich

Chapper

Hi Chapper, vielen Dank für dein Feedback:) Ja ich verwende schon sehr viele Infos aus dem Buch aber das Buch hat soviel Input das ich natürlich nicht alles aus dem Buch in meinen Artikeln unterbringen kann. Also falls du dir irgendwann ein Bitcoin Buch kaufen willst ist dieses empfehlenswert:D
Das mit den Quantencomputern ist wie du sagst echt kritisch aber ich weiß auch nicht wie sicher Bitcoin dann noch wäre. Habe aber mehr Stimmen nach dem Motto Bitcoin wäre dann nicht mehr sicher bzw funktionsfähig gehört, kenne mich allerdings mit QC überhaupt nicht aus:D

Was genau hast du bei den Hashwerten/Hashfunktionen nicht verstanden? Vielleicht kann ich da nochmal helfen. Ich schau mal nach ner schönen Abbildung oder erstelle selber eine, kommt dann im nächsten Artikel!
Danke für Feedback und resteem,
Grüße!:)

Hi nochmal, zum Beispiel kann ich mir nicht vorstellen wie unterschiedlich lange Datenpakete (also zum Beispiel ein Buch vs. ein einziges Wort) die gleiche Hashlänge erzeugen bzw. wie man daraus auf den Ursprung schließen kann (sofern dies überhaupt das Ziel ist, wahrscheinlich dient der Hash nur dazu zuzeigen, dass man das Orginalpasswort kennt). Dann kommt auch noch diese Nonce ins Spiel. Also ich hab es jetzt so verstanden, dass die Nonce an den Hash gehängt wird damit die Transaktion in einen Block integriert werden kann. Wer aber legt konkret fest welche die korrekte Nonce ist?

Ich glaub ich muss mir nochmal deine anderen Post durchlesen und mir auch mal ein Buch kaufen mit mehr technischen Details dazu. So nebenher ist das im Gesamtumfang wohl wirklich nicht zu verstehen.

Danke für deine Arbeit

Beste Grüße

Chapper

Posted using Partiko Android

Okay, also der Sinn von diesen kryptografischen Hashfunktionen ist gerade das man von dem Hashwert nicht auf den Ursprung schließen kann. Also du kannst aus einem Hashwert einer kryptografischen Hashfunktion nicht erkennen aus welchem Wert das ganze entstanden ist.

wie unterschiedlich lange Datenpakete (also zum Beispiel ein Buch vs. ein einziges Wort) die gleiche Hashlänge erzeugen

Der Input ist einfach ein Wert auf dieser Hashfunktion und dieser Hashwert ist dann der Wert der Hashfunktion an der Stelle des Input Werts.

Die Nonce ist grob ganz einfach zu erklären. Die Nonce ist einfach ein Raum für arbiträre Zahl im Block der einfach verändert werden kann. Die Block ID (Identifikationsnummer) wird ja aus dem Block berechnet (mit einer Hashfunktion). Diese Block ID ist also abhängig vom Inhalt des Blocks. Und die Block ID muss unter einem gewissen Schwellenwert liegen, damit der Block ins Blockchain Register kommt. Und da man bei einer Hashfunktion (bei SHA 256) nicht weiß welcher Input (also welcher Block Inhalt) welchen Hashwert liefert muss man einfach den Block Inhalt so lange ändern, bis die Block ID unter dem Schwellenwert liegt. Soweit verständlich hoffe ich:)
Also der Hashwert des Block Inhaltes (Block ID) ist jetzt vereinfacht gesagt 12. Der Schwellenwert liegt aber bei vereinfacht gesagt 6 als beispiel. Nun kann der Block nicht ins Blockchain Register, da die Block ID zu groß ist. Also muss der Miner den Block Inhalt solange ändern bis die Block ID unter 6 liegt (der Miner muss das machen da er nur wenn sein Block vom Blockchain Register angenommen wird, er die Belohnung bekommt (die sogenannte Coinbase Transaktion bei der ein paar neue Bitcoins geschaffen werden die der Miner bekommt).
Also jetzt könnte der Miner den Block Inhalt ändern in dem er ein paar Transaktionen aus dem Block wirft oder neue reintut und so weiter. Aber das wäre doof:D Daher gibt es die sogenannte Nonce. Also verändert der Miner einfach nur die Nonce und kann sonst alles im Block gleich lassen. Aber durch die veränderte Nonce (andere Zahl) ist der Block Inhalt anders und daraufhin wird auch der Hashwert des Blocks anders und damit auch die Block ID. Diese neue Block ID ist jetzt zum Beispiel 9. Immernoch nicht unter dem Schwellenwert. Also nimmt der Miner wieder eine andere Nonce. Diesesmal ist der Hashwert des Block Inhaltes (und damit auch die Block ID) 3 das ist unter dem Schwellenwert das heißt der Block wird angenommen, kommt in die Blockchain und der Mimer bekommt seine Belohnung:)

Ja das Thema ist doch relativ komplex aber ich denke wenn man sich meine Posts (Oder das verlinkte Buch) ein paar mal durchliest versteht man es. Ist natürlich gerade bei den Posts schwierig, da ich ja nur alle paar Tage welche schreibe und man bis dahin vielleicht schon wieder die Hälfte vergessen hat:D

Danke für deine Frage, ich hoffe die Erklärung der Nonce hat jetzt geholfen! die Sache mit der Nonce kannst du in Artikel 3 (oben im Artikel verlinkt) auch nochmal im gesamten durchlesen.
Grüße:)

Kann mich dem nur anschließen ein hammer Artikel! da macht das Lernen Spass :D Komme sicher nochmal mit Fragen zurück ^^

Zum Quantencomputer:

"hence our results suggest that executing these attacks may be as much as 275 billion times
more expensive than one would expect from the simple query analysis."

Mit nen Grover-Algorithmus auf SHA-256 (also schon die zeitsparende Bruteforce-Alternative)
https://arxiv.org/pdf/1603.09383.pdf

man kann davon ausgehen, dass aufgrund der ökonomischen Grenzen, man nur einen Schuss hat (wenn überhaupt) und diesen wendet man nicht auf Bitcoin an, sondern auf US-Atom Silos oder so.

Danke für dein Feedback!

Komme sicher nochmal mit Fragen zurück ^^

Dann hoffe ich, dass ich die beantworten kann:D

Dieser Grover-Algorithmus macht es doch möglich, vom Hashwert der SHA-256 Funktion auf das Urbild(den Input) zu schließen oder? Das würde ja diese kryptografische Hashfunktion in gewisser Weise useless machen. Muss mir da nochmal deinen Kommentar unter meinem letzten Artikel anschauen:D

Die pdf schau ich mir morgen nochmal genauer an, sieht ganz interessant aus, danke für die quelle und aufklärung;D

Ja wenn die Energie nur für einen Versuch reichen wird, wird der wohl kaum genutzt werden um Bitcoin zu zerstören:D
Grüße:)

Auf jeden Fall,

ich hab das Gefühl es immer besser zu raffen. Sehr fruchtbare Diskussion hier, vielen Dank.

Posted using Partiko Android

Wow Lauch krasses Dokument, ich glaub soweit bin ich noch nicht.

Gruß

Chapper

Posted using Partiko Android

Hi, vielen Dank für deine Mühe. Bei den Transaktionen kommt es demnach darauf an, es dem Hash eines jeweiligen Blocks rechtzumachen und damit niemand zu kurz kommt packt man eine Nonce vorn dran damit jede Transaktion potentiell in einen Block aufgenommen werden kann.

Demnach gibt es einen Mini-Hash (meine Transaktion bestehend aus Publik key, Inhalt und Signatur durch meinen Private key) und einem Mega-Hash, welcher die Block-ID beinhaltet, die eine Schwelle definiert welche niemals überschritten werden darf. Die Nonce stellt sicher, dass man tolerant jeden berücksichtigt uns letztlich alles in jeden Block reinkriegt. Weil das Ganze aber pervers komplex ist, kann man die Nonce nicht einfach so rausrechnen sondern muss rumprobieren bis das passt. Bis man dann mal Glück hat braucht somit ordentlich Rechenpower, bekommt aber den Reward, welcher sich aus Transaktiongebühr + X ergibt.

Vielleicht noch eine Frage: Was ist das X? Wo kommen die Coins her?

Gracias

Chapper

Posted using Partiko Android

Ja genau!:)
Aus was genau eine Transaktion besteht werde ich auch novhmal in einem Artikel schreiben (ich denke es werden noch so 4 Artikel kommen dann ist das Thema durch).
Den Reward den du X genannt hast, den die Miner bekommen ist diese sogenannte Coinbase Transaktion. Komischer Name bedeutet aber einfach, dass wenn ein Block der von einem Miner erzeugt wurde vom Netzwerk angenommen wird und der Block in die Blockchain kommt ein paar neue Bitcoin Einheiten geschaffen werden. Es gibt ja zurzeit jeden Tag mehr Bitcoin Einheiten. Irgendwann wird es 21 Millionen Bitcoin Einheiten geben(das ist die im Code festgelegte Grenze). Zurzeit gibt es glaub knapp 18 Millionen Bitcoins. Die Zahl der Bitcoins nimmt in einer immer flacher werdenden Wachstumskurve zu(da es immer länger dauert Bitcoins zu Minen also einen Block zu erstellen der vom Netzwerk angenommen wird.
Dieser Vorgang ist also dieses sogenannte Minen bei dem neue Bitcoins gemined werden. Und diese Bitcoins die neu erschaffen werden wenn ein neuer Block in die Blockchain kommt, die kriegt dann der Miner(der das ganze Hashwert zeug etc berechnet hat:D) als Belohnung.

Die Coins kommen also sozusagen aus dem nichts beziehungsweise werden neu geschaffen.
Diese Schwellenwert Sache (Hashwert des Block Inhaltes darft nicht höher als Schwellenwert xy sein) ist also auch dafür da, dass nicht alle paar Sekunden neue Bitcoins erzeugt werden, weil diese Berechnung einfach im Schnitt ziemlich lange dauert (circa alle 10 minuten kommt ein neuer Block in die Blockchain). Und wenn alle paar Sekunden einer kommen würde könnte sich das komplette Netzwerk gar nicht so schnell austauschen welcher Block den jetzt der aktuellste ist. Daher gibt es diesen Schwellenwert der Block ID. Dieser Schwellenwert ist sozusagen eine künstlich Beschränkung der Block Annahme (einfach das ed langsamer wird).

Also die Belohnung x ist die sogenannte Coinbase Transaktion, bei der neue Bitcoins geschaffen werden, die die Belohnung für den Miner darstellen.

Jo prima, allmählich rearrangen sich meine Synapsen zu dem Thema.

Vielleicht noch eine Frage zu den 10 min. Diese Block Time setzt doch bestimmt auch voraus, dass definitiv einer gerade die korrekte Lösung gefunden hat. Bleiben andere Blöcke die geschürft wurden erstmal liegen? Was ist wenn nicht alle 10 min ein neuer Block erzeugt werden kann. Bricht die Chain dann irgendwann auseinander bzw. hat diese irgendwelche Folgen?

Vielen Dank und

Servus

Chapper

Posted using Partiko Android

Ah sehr gut:)
Die 10 min sind einfach nur eine durchschnittszeit.
Wenn es schneller geht/langsamer kann der Schwellenwert dementsprechend angepasst werden. Umso kleiner der Schwellenwert wird, umso schwieriger wird es den richtigen Blockinhalt zu finden, der den richtigen Hashwert(Block ID) erzeugt. Also der Schwellenwert kann angepasst werden damit diese Zeit immer ungefähr gleich bleibt (auch wenn Computer leistungsfähiger werden etc) kann man die Zeit dadurch im Schnitt gleich halten.
Und wenn ein neuer Block in die Blockchain kommt müssen alle Miner dessen Block ID als Referenz nehmen. Da ist in Artikel 3 ja auch die Abbildung wo man dies schematisch sieht.

Hi, vielen Dank für deine Mühe. Bei den Transaktionen kommt demnach darauf an, es dem Hash eines jeweiligen Blocks rechtzumachen und damit niemand zu kurz kommt packt man eine Nonce vorn dran damit jede Transaktion potentiell in einen Block aufgenommen werden kann.

Demnach gibt es einen Mini-Hash (meine Transaktion bestehend aus Publik key, Inhalt und Signatur durch meinen Private key) und einem Mega-Hash, welcher die Block-ID beinhaltet, die eine Schwelle definiert welche niemals überschritten werden darf. Die Nonce stellt sicher, dass man tolerant jeden berücksichtigt uns letztlich alles in jeden Block reinkriegt. Weil das Ganze aber pervers komplex ist kann man die Nonce nicht einfach so rausrechnen sondern muss rumprobieren bis das passt. Bis man dann mal Glück hat braucht ordentlich Rechenpower,pü

Posted using Partiko Android

You just planted 0.12 tree(s)!


Thanks to @urdreamscometrue

We have planted already 3404.28 trees
out of 1,000,000


Let's save and restore Abongphen Highland Forest
in Cameroonian village Kedjom-Keku!
Plant trees with @treeplanter and get paid for it!
My Steem Power = 39464.49
Thanks a lot!
@martin.mikes coordinator of @kedjom-keku
treeplantermessage_ok.png

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 62629.89
ETH 2572.37
USDT 1.00
SBD 2.74