===== News ===== * https://www.technologyreview.com/s/609771/a-cryptocurrency-without-a-blockchain-has-been-built-to-outperform-bitcoin/ ===== Theorie ===== * Hashfunktion: https://de.wikipedia.org/wiki/Kryptologische_Hashfunktion * Asymmetrische Kryptographie: https://de.wikipedia.org/wiki/Asymmetrisches_Kryptosystem * Public-Key Verschlüsselung: https://de.wikipedia.org/wiki/Public-Key-Verschl%C3%BCsselungsverfahren * RSA-Verschlüsselung: https://de.wikipedia.org/wiki/RSA-Kryptosystem * Blockchain: https://de.wikipedia.org/wiki/Blockchain ===== BadBlockChain ===== {{ :efinf:blcks2017:crypto:badblockchain.zip |BadBlockChain in Python}} ==== Format eines BadBlocks ==== 5 # Nummer des Blocks 98 # Hash vom Vorgängerblock 1 # Anzahl Transactions 1513199769622,7630423873,8565935687,40,2478293393 8565935687,3747393 # Öffentlicher Schlüssel vom Miner, Nonce so, dass Hash(block) < difficulty (2^10). ==== Transaction ==== 1513199769622,7630423873,8565935687,40,2478293393 Timestamp (ms seit 1.1.1970), Public Key vom Sender, Public Key vom Empfänger, Betrag der überwiesen wird, Digitale Unterschrift vom Sender === Unterschrift === Man bildet den Hash $h$ der Transaction (ohne ',Unterschrift'). $h$ wird mit PrivateKey vom Sender verschlüsselt. Verfizierung: Hash $h$ bilden, und Unterschrift mit PublicKey vom Sender entschlüsseln, beide Werte müssen gleich sein. ==== RSA ==== Sei n eine Zahl, der Modulus. Rechnen mit Resten modulo n: Alle Resultate werden durch n geteilt und der Rest genommen. $a^x \mod n = b$ kann nicht effizient nach $x$ aufgelöst werden, d.h. der diskrete Logarithmus ist nicht effizient berechenbar. RSA: öffentlicher Modulus $m$, öffentlicher Exponent $e$, privater Exponent $p$. Clou: $\left(a^e\right)^p = a = \left(a^p\right)^e = a^{e\cdot p} \mod m$. ===== Anwendung BadBlockChain ===== === Key Management === Key Erzeugen: from badkeymaterial import BadKeyMaterial print BadKeyMaterial(32) Ausgabe z.B. Public modulus: 4906493971 public exponent: 31 private exponent: 158269471 Key verwenden: from badkeymaterial import BadKeyMaterial # modulus eintragen k=BadKeyMaterial(4906493971) # privaten Schlüssel setzen k.private = 158269471 Mining: from badblockchain import BadBlockChain from badkeymaterial import BadKeyMaterial c = BadBlockChain() c.getNewBlocks() # Blockchain import # modulus eintragen k=BadKeyMaterial(4906493971) # privaten Schlüssel setzen k.private = 158269471 c.mine(k.modulus) print c.wallets.wallets Neue Hash-Funktion: # 32-Bit Hash @classmethod def badHash(cls,x): x = str(x) h = 0xdeadbeef for i in xrange(0,len(x)): h = ((h+6543)*(ord(x[i])+57361)+567) % 2**32 return h