Zum Inhalt springen
buybitcoinsmart

Glossar / Entwicklerreferenz

PaymentRequest

Was ist PaymentRequest?
PaymentRequest ist der äußere BIP70-Umschlag: er umhüllt einen serialisierten PaymentDetails-Block zusammen mit einer Zertifikatskette und einer Signatur, damit der Zahler prüfen konnte, wer die Anfrage stellte.

Spezifiziert im BIP-70.

PaymentRequest war die Nachricht, mit der eine Wallet einen Firmennamen statt einer Zeichenkette anzeigen konnte. Sie hatte fünf Felder, und die beiden, auf die es ankam, waren pki_type, eines von none, x509+sha256 oder x509+sha1, und signature über die serialisierten Details. Für alle, die heute zahlen, überlebt die Lehre das Protokoll: ein Name auf einem Zahlungsbildschirm ist nur so vertrauenswürdig wie derjenige, der für ihn gebürgt hat.

So funktioniert es

Status: obsolet. Bitcoin Core enthielt die PaymentRequest-Behandlung von 0.9.0 bis Version 0.20.0, die sie am 3. Juni 2020 entfernte, und heute interpretiert keine gepflegte Wallet die Nachricht mehr.

Fünf Felder, in dieser Reihenfolge:

  • payment_details_version, ein 32-Bit-Integer mit dem Standardwert 1. Er wurde nie erhöht.
  • pki_type, eine Zeichenkette mit dem Standardwert "none". Die Alternativen waren "x509+sha256" und "x509+sha1".
  • pki_data, enthielt eine X509Certificates-Struktur mit dem Blattzertifikat des Händlers an erster Stelle und etwaigen Zwischenzertifikaten danach.
  • serialized_payment_details, erforderlich, die undurchsichtige Byte-Zeichenkette, die an anderer Stelle in diesem Glossar beschrieben wird.
  • signature, die Bytes, die belegen, dass das Ganze vom Zertifikatsinhaber stammt.

Das Signaturverfahren enthält einen kleinen Kniff. Der Händler füllt jedes Feld aus, setzt signature auf leer, serialisiert die vollständige Nachricht, hasht diese, signiert den Hash mit dem privaten Schlüssel, der zum Blattzertifikat gehört, und schreibt die Signatur anschließend in das Feld, das er gerade leer gelassen hatte. Ein Prüfer leert das Feld erneut, serialisiert neu und prüft. Einfach, in sich geschlossen und von nichts außer dem Zertifikat abhängig.

Genau diese Abhängigkeit war das Problem. Die Validierung der Kette verlangte, dass die Wallet einen Stammspeicher für Zertifikate vorhielt, den Desktop-Software vom Betriebssystem übernahm und Mobilsoftware häufig falsch handhabte. Selbst eine korrekte Implementierung bewies nur, dass irgendeine Zertifizierungsstelle einen Domainnamen bezeugt hatte, und ein Stammspeicher enthält Hunderte von Stellen, von denen jede für jeden Namen ausstellen kann. Die schwächste angebotene Option, x509+sha1, alterte besonders schlecht: eine praktische SHA-1-Kollision wurde am 23. Februar 2017 veröffentlicht, vier Jahre nachdem das BIP70 geschrieben wurde.

Wo es auftaucht

Zwei Stellen verwenden den Namen PaymentRequest noch, und nur eine davon hat mit Bitcoin zu tun.

Die erste ist archivierter Code und archivierte Dokumentation, wo der MIME-Typ application/bitcoin-paymentrequest aus dem BIP71 die Antwort kennzeichnete, die ein Händlerserver zurückgab. Die zweite ist die moderne Webplattform, wo PaymentRequest eine Browser-API für den Checkout mit Karte und gespeicherten Zahlungsmitteln bezeichnet, die mit diesem Protokoll nichts zu tun hat. Ein Entwickler, der das Wort heute verwendet, meint fast sicher die des Browsers, und die beiden zu verwechseln ist der häufigste Fehler bei der Suche nach älterer Bitcoin-Dokumentation.

Für jemanden, der Bitcoin kauft, geht es bei der Schlussfolgerung darum, wie Identität an Zahlungen geknüpft wird. Kryptobörsen lösen das mit Konten und Identitätsprüfung (KYC), sodass die Plattform weiß, wer Sie sind, und Sie sich auf den Ruf der Plattform verlassen. Die Selbstverwahrung löst es, indem Sie die Adresse selbst prüfen. BIP70 versuchte einen dritten Weg, indem es das Zertifikatssystem des Webs entlehnte, und dieser Weg ist geschlossen.

PaymentRequest vs. PaymentDetails

PaymentRequest ist der Umschlag, PaymentDetails der Brief darin. Wer den Umschlag liest, erfährt, wer signiert hat und welches Zertifikat diese Person verwendete, aber nicht, was verlangt wird. Die Beträge, die Skripte, der Ablauf und die Notiz stehen alle in der inneren Nachricht, die gerade deshalb als uninterpretierte Byte-Zeichenkette im Umschlag liegt, damit die Signatur nicht durch eine neue Kodierung ungültig wird. Eine Wallet musste den Umschlag prüfen, bevor sie irgendetwas im Brief vertraute.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Ist PaymentRequest dasselbe wie die Browser-API Payment Request?

Nein, sie teilen den Namen und sonst nichts. Die Browser-API wickelt den Checkout mit Karte und gespeicherten Zahlungsmitteln im Web ab. Die gleichnamige Bitcoin-Nachricht war Teil des BIP70, das Bitcoin Core in Version 0.20.0 im Juni 2020 entfernte.

Bewies eine signierte PaymentRequest, dass ein Händler ehrlich war?

Sie bewies nur, dass eine Zertifizierungsstelle einen Domainnamen bezeugt hatte. Sie sagte nichts darüber aus, ob die Ware existierte oder der Preis angemessen war, und jede der Hunderte von Stellen in einem Stammspeicher konnte ein Zertifikat für jeden Namen ausstellen.

Verwandte Begriffe

Mehr zum Thema Entwicklerreferenz

Diese Seite auf Englisch lesen