Signieren von Nachrichten mit Digital Signature Algorithm (ECDSA) in Java und Elliptische-Kurven-Kryptografie (ECC) secp256k1

Wie werden in Java Nachrichten signiert und vom Empfänger validiert? Das geht mit ein paar Zeile aus dem Java Package java.security. Wir verwenden die auch in Bitcoin verwendeten Elliptische-Kurven-Kryptografie secp256k1. Was wollen wir zu Entspannung nach Feierabend machen?

Das wird in diesem BPMN-Diagramm dargestellt:

Hier die kommentierte Java Klasse: …

Das Ergebniss:

Wer will kann auch die Nachricht mal verändern (einkommentieren der HACK Zeile) um den negativen Fall abzubilden.

Die Public Key Ableitung ist eine Einbahnstrassenfunktion, ebenso wie kryptografische Hashfunktionen. Man kann den private Key nicht aus dem public Key herleiten. Die Sicherheit von digitalen Signaturen hängt wesentlich von dieser Eigenschaft ab. Auch erzeugen mehrere Durchläufe des private Key durch die Ableitungsfunktion stets denselben public Key.


Wer mal mit den Elliptic Curve scalar multiplication spielen will, kann diesen Online Rechner verwenden.