Hallo Chefin,
Meinst du echt, Menschen führen ein Programm aus auf einem Rechner wo sie Bitcoins lagern, das von jemanden kommt der genau ein Posting hat und erklärt den Quellcode rücke ich irgendwann mal raus, das ihr die Ehrlichkeit des Programms überprüfen könnt.
Du hast vollkommen Recht, ich würde es wahrscheinlich auch nicht machen. Deswegen ging der Aufruf auch an Leute die sich mit Computern auskennen und meinen das Risiko beherrschen zu können.
Zu meiner Person: ich programmiere gern und um das System Bitcoin zu verstehen habe ich begonnen selbst ein bisschen damit herumzuspielen. Darum handelt es sich bei KeyBits auch nur um eine Spielerei bzw. einem Proof of Work. Das Programm ist definitiv noch in der Testphase und garantiert nicht bugfrei. Den Quellcode entwickle ich mit Eclipse, mit GitHub kenne ich mich aber noch nicht aus und muss den Code erstmal sauber in ein Git-Repository einpflegen. Das kann noch ein Weilchen dauern. Das Programm als Jar-Datei zur Verfügung zu stellen war für eine Veröffentlichung aktuell die einfachste Lösung. Da meine Kenntnisse in Bezug auf Ant auch noch ziemlich gering sind, so habe ich folgende Pakete direkt in das Jar eingebunden: bitcoinj, json-simple, commons-cli, slf4j, bcpg, bcprov. Deshalb ist die Datei hochredundant was die Grösse erklärt. Ein Doppelklick auf die Datei und man sieht alle zusammengepackten Java-Klassen. Ich glaube, per Eclipse lassen sich sogar die Methoden analysieren.
Wer es kann, der mag eine virtuelle Maschine aufsetzen oder ein Live-System nutzen, welches eine JVM bereitstellt um darin das Programm auszuführen.
Aber vieleicht hast du ja auch Glück und es findet sich jemand. Am besten erkläre mal was es den genau macht, dann kann man wenigstens das mit vergleichen was das Programm dann ausführt.
Erklärung der Funktionsweise: Man kann keine beliebigen Informationen direkt in der Blockchain ablegen. Dazu muss man die Informationen in 20 Byte grosse Blöcke zerlegen, und diese können dann in Adressen verwandelt werden. Diese sind valide was bedeutet, dass man Bitcoins dorthin versenden kann. Natürlich besitzt man den privaten Schlüssel zu diesen Adressen nicht, so dass die versendeten Bitcoins praktisch verloren sind. Jedoch werden diese Adressen in der Blockchain abgespeichert. Die Funktion, welche 20 Byte-Blöcke in Adressen verwandelt, lässt sich umdrehen, man kann also die gespeicherten Daten zurückübersetzen, wenn man weiss wo die Daten sich in der Blockchain befinden. Diese Idee ist schon alt, fast so alt wie der Bitcoin und ich glaube (weiss es aber nicht), dass Namecoin nach einem ähnlichen Prinzip funktioniert. Zumindest wurde schon das Orginalpaper von Satoshi Nakamoto derart in der Blockchain fixiert. Mancher macht sowas aus Jux, man kann dann schon von Vandalismus in der Blockchain sprechen. Ich bin aber der Meinung, dass das Fixieren von Informationen in der Blockchain unproblematisch ist, da man dafür praktisch Geld bezahlen muss.
Die Blockchain ist dauernd online, kaum abzuschalten, im Prinzip von überall erreichbar und erhält sich selbst. Da liegt die Idee nahe öffentliche GPG-Schlüssel in der Blockchain abzulegen anstatt sie auf beliebig vielen Servern zu verteilen. Um jemanden nun den öffentlichen Schlüssel zukommen zu lassen reicht es, demjenigen eine einzige Bitcoin-Adresse zukommen zu lassen. Hier ein Beispiel:
https://blockchain.info/address/1Pmbtsb5Wm2ivE1KTnRXtpkR5oRprUAcczDiese Adresse erzeugt 112 zusätzliche Adressen durch eine einzige ausgehende Transaktion, welche man als eine Art Pointer auffassen kann, nach dem Motto: Bei Adresse X analysiere die ausgehenden Transaktionen, sind es mehr als eine dann handelt es sich garantiert nicht (per meiner Definition) um einen validen GPG-Schlüssel. Ist es eine Transaktion, dann interpretiere die Output-Adressen als öffentlichen GPG-Schlüssel. Der Aufruf
java -jar KeyBits.jar -i 1Pmbtsb5Wm2ivE1KTnRXtpkR5oRprUAccz
macht genau das und gibt den Schlüssel (GPG-Keyring, 2x RSA4096) aus (siehe README.md).
Wie erzeugt KeyBits diese Daten? Will man einen eigenen Schlüssel exportieren, so erzeugt das Programm eine Wallet assoziiert mit einem gegebenen GPG-Schlüssel, die genau eine Adresse enthält. Diese Wallet wird standardmässig verschlüsselt. Man muss also ein Passwort wählen, sich merken und dann immer eingeben. Sie kann natürlich auch schon existieren, erzeugt durch einen früheren Aufruf von KeyBis. Daraufhin synchronisiert sich die Wallet und es wird getestet ob genügend Bitcoins vorhanden sind um den GPG-Schlüssel zu fixieren. Falls dem nicht so ist, so muss der Nutzer die Wallet mit der entsprechenden Menge an Bitcoins füllen. Das kann dieser machen wie er will, mit Smartphone, Multibit, etc. pp.. Sind genügend Bitcoins vorhanden erzeugt KeyBits die notwendige Transaktion mit den entsprechenden Outputs und wartet dann bis die Transaktion in die Blockchain aufgenommen wurde. Dabei reicht dem Programm wenn die Transaktion im aktuellen Block aufgenommen wurde, was in der Regel um die 10 Minuten dauert. Deshalb beendet das Programm nicht sofort. Man kann aber leicht das Verhalten mit blockchain.info abgleichen. Das Beispiel mit oberer Adresse kostete 0.0117 BTC, das sind aktuell 5-6 €, dabei habe ich aber ausversehen per Smartphone zuviel überwiesen, nämlich 0.019 XBT anstatt 0.0119 XBT. Es sollten 0.0119 XBT anstatt 0.0117 XBT sein weil mindestens noch 20000 Satoshis notwendig sind um den GPG-Schlüssel mit einer zweiten Transaktion ungültig zu machen (für Vorschläge wie man das insgesamt billiger hinbekommt wäre ich dankbar).
Desweiteren hat das Programm noch rudimentäre Wallet-Funkionalität. Diese ist notwendig um eine zweite Transaktion von der GPG-Schlüssel-Adresse auszuführen um den dort abgespeicherten GPG-Schlüssel ungültig zu machen.