efinf:blcks2017:crypto:start

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).
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.

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$.

Key Management

Key Erzeugen:

makekey.py
from  badkeymaterial import BadKeyMaterial
 
print BadKeyMaterial(32)

Ausgabe z.B.

Public modulus: 4906493971 public exponent: 31  private exponent: 158269471

Key verwenden:

initkey.py
from  badkeymaterial import BadKeyMaterial
 
# modulus eintragen
k=BadKeyMaterial(4906493971)
# privaten Schlüssel setzen
k.private = 158269471

Mining:

miner.py
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
  • efinf/blcks2017/crypto/start.txt
  • Last modified: 2017/12/20 22:08
  • by Ivo Blöchliger