Doichain Academy

Lektion 5 / 6 · 15 Minuten

Signierte Nachrichten

Ein Proof of Existence beweist, dass etwas existierte, aber nicht, von wem es stammt. Dafür gibt es Signaturen. Mit einer signierten Nachricht belegt jemand, dass er den privaten Schlüssel zu einer Adresse besitzt, ohne Coins zu bewegen.

Wie es funktioniert

Doichain übernimmt das Verfahren von Bitcoin. Vor dem Signieren wird die Nachricht mit einem festen Präfix versehen. Doichain Core hat es von Namecoin geerbt:

Namecoin Signed Message:\n

Das Präfix verhindert, dass eine Nachrichtensignatur als Transaktionssignatur missbraucht werden kann. Die Signatur ist ein Base64-String. Aus ihr und der Nachricht lässt sich der öffentliche Schlüssel rekonstruieren und mit der Adresse vergleichen.

Signieren und prüfen mit Doichain Core

doichain-cli signmessage "N…adresse" "Ich bin Inhaber, 2026-10-10, Nonce 8f3a…"
doichain-cli verifymessage "N…adresse" "<signatur>" "Ich bin Inhaber, 2026-10-10, Nonce 8f3a…"
# true oder false

Wie in Bitcoin Core arbeiten signmessage und verifymessage in Doichain Core nur mit Legacy-Adressen (N…). Eine dc1q…-Adresse lehnt die Node mit „Address does not refer to key“ ab. Wer Eigentumsnachweise plant, hält dafür eine Legacy-Adresse bereit.

Achtung bei anderen Wallets: Light-Wallets wie Electrum-DOI können ein anderes Präfix verwenden. Ihre Signaturen lassen sich dann mit Doichain Core oder der API nicht prüfen. Vor dem Einsatz mit dem Wallet der Zielgruppe testen.

Prüfen über die API

curl -X POST https://doi-api.sendlabs.de/v1/message/verify \
  -H "Content-Type: application/json" \
  -d '{"address": "N…", "signature": "<base64>", "message": "<text>"}'
# {"valid": true, "address": "N…"}

Prüfen braucht keinen Schlüssel (Stufe read). Signieren über die API (POST /v1/message/sign) geht nur mit Stufe admin, und nur mit Adressen des Node-Wallets. In eigenen Anwendungen signiert deshalb immer der Nutzer selbst in seinem Wallet. Der private Schlüssel verlässt nie das Wallet.

Im MCP-Server gibt es dafür das Werkzeug verify_message.

Eigentumsnachweis richtig bauen

Eine Signatur über einen festen Text kann jeder weiterverwenden, der sie einmal gesehen hat. Ein sicherer Ablauf als Challenge-Response:

  1. Der Server erzeugt eine Herausforderung mit Zufallswert, Zweck, Datum und Ablaufzeit, etwa „Anmeldung bei Beispiel-App, 2026-10-10T14:00Z, Nonce 8f3a…“.
  2. Der Nutzer signiert genau diesen Text in seinem Wallet.
  3. Der Server prüft Signatur, Adresse, Ablaufzeit und dass die Nonce noch nicht benutzt wurde, und verwirft sie danach.

So lässt sich eine abgefangene Signatur nicht erneut verwenden (Replay-Schutz).

Signatur plus Proof of Existence

Beides zusammen ergibt einen starken Nachweis: Der Urheber signiert den Hash eines Dokuments, und der Hash wird verankert. Dann steht fest, dass das Dokument spätestens zur Blockzeit existierte, und wer es mit seinem Schlüssel bestätigt hat.

Merksätze

  • Präfix in Doichain Core Namecoin Signed Message:\n, Signatur in Base64.
  • signmessage und verifymessage nur mit Legacy-Adressen N…, Signaturen anderer Wallets vorher testen.
  • Prüfen über POST /v1/message/verify ohne Schlüssel, signieren immer im Wallet des Nutzers.
  • Herausforderung mit Nonce und Ablaufzeit gegen Wiederverwendung.

Bitte anmelden, um den Fortschritt zu speichern und die Prüfung abzulegen. Registrieren

Weiter →