85.1.38. pepsi-stage-secure-link¶

hold a message that could not be encrypted, and mail the link

Handbuchabschnitt:

1

85.1.38.1.1. Name¶

pepsi-stage-secure-link - die Secure-Link-Ausweich-Stage der Pepsi-Pipeline.

85.1.38.1.2. Übersicht¶

pepsi-stage-secure-link [GLOBAL-OPTIONS] worker

85.1.38.1.3. Beschreibung¶

pepsi-stage-secure-link ist ein Stage-Programm, das von pepsi-dispatch(1) als persistenter Worker ausgeführt wird, der Nachrichten-IDs von der Standardeingabe liest.

Es ist das ferne Ende von [stage-encrypt] ON_NO_KEY = secure-link. Wenn pepsi-stage-encrypt(1) eine Nachricht verschlüsseln muss und der Empfänger keinen brauchbaren Schlüssel veröffentlicht, leitet es die Nachricht hierher, statt sie im Klartext zu senden oder einen Bounce zu erzeugen. Diese Stage nimmt die Nachricht dann vollständig von der Leitung:

  1. es erzeugt eine PIN, leitet das URL-Token aus dem Warteschlangendatensatz ab (siehe Wiederholungen) und einen Inhaltsschlüssel aus der PIN und dem serverseitigen Pfeffer und versiegelt die gesamte Nachricht darunter;

  2. in einer Transaktion speichert es nur das AEAD-Chiffrat in pepsi.secure_message und reiht eine Benachrichtigungsmail an den Empfänger ein, die den Link trägt, und — unter dem Standardwert PIN_DELIVERY = sender — eine zweite Mail an den Absender, die die PIN trägt, damit der Absender sie per Telefon oder Kurznachricht weitergibt;

  3. es löscht den Warteschlangendatensatz.

Der Datensatz wird gelöscht statt weitergeschaltet, weil das Weiterschalten den Klartext an genau den Empfänger übertragen würde, der keinen Klartext erhalten darf. Die Fortsetzung der Nachricht ist die Benachrichtigung, eine gewöhnliche ausgehende Nachricht, die bei [pepsi-secure-link] NOTIFY_STAGE injiziert und wie jede andere signiert und weitergeleitet wird. Die Stage ist daher terminal und hat kein NEXT_STAGE.

Eine Nachricht mit mehreren schlüssellosen Empfängern erzeugt eine gespeicherte Nachricht je Empfänger, jede mit eigenem Token, eigener PIN und eigenem Chiffrat, sodass die PIN eines Empfängers nie die Kopie eines anderen öffnet und keinem von ihnen die Empfängerliste offenbart wird.

85.1.38.1.4. Konfiguration¶

Der [stage-<name>]-Abschnitt der Stage trägt nur PROGRAM. Alles Übrige liegt im globalen Abschnitt [pepsi-secure-link] (siehe pepsi.conf(5)), und zwar bewusst: Das Ablauffenster, die PIN-Länge und die Sperre sind keine Verhaltensstellschrauben, die ein Korrespondent per E-Mail über pepsi-stage-edit-settings(1) bearbeiten dürfte, und ein globaler Abschnitt liegt außerhalb der Reichweite der Überschreibungsschicht je Adresse.

85.1.38.1.5. Beispiel¶

[stage-encrypt]
PROGRAM = pepsi-stage-encrypt
ENCRYPT = required
SECURE_LINK_STAGE = secure-link
NEXT_STAGE = srs

[stage-secure-link]
PROGRAM = pepsi-stage-secure-link

[pepsi-secure-link]
BASE_URL = https://secure.example.org
NOTIFY_STAGE = srs
# PEPPER is written to secrets.d/pepsi-secure-link.secret by pepsi-setup.

85.1.38.1.6. Wiederholungen¶

Ein Stage-Rumpf kann für denselben Warteschlangendatensatz mehr als einmal laufen: ein Worker, der nach seinen Seiteneffekten, aber vor dem Commit stirbt, ein Neustart von pepsi-dispatch(1), der einen running-Datensatz erneut beansprucht, ein erneutes Einreihen durch den Operator und ein Fehlschlag mittendrin, der wiederholt wird (siehe Fehler). Die Schleife über die Empfänger ist nicht atomar — ein Fehlschlag beim k-ten Empfänger lässt jeden Empfänger davor bereits gespeichert und benachrichtigt zurück —, wohl aber jeder einzelne Empfänger: Die gespeicherte Kopie und ihre Benachrichtigungen werden gemeinsam durch einen Aufruf der SQL-Funktion secure_message_store festgeschrieben oder gar nicht.

Das Token der sicheren Nachricht wird deshalb aus dem Warteschlangendatensatz abgeleitet, als geschlüsselter Hash aus dem Token des Datensatzes und der Position des Empfängers unter dem PEPPER der Installation, statt zufällig gezogen zu werden. Ein wiederholter Durchlauf berechnet dasselbe Token erneut, findet den pepsi.secure_message-Datensatz dieses Empfängers bereits vor, vermerkt eine Warnung im Journal und lässt ihn unangetastet: keine zweite Kopie, kein zweiter Link an den Empfänger und keine zweite PIN an den Absender. Das Token ist geschlüsselt und nicht bloß gehasht, weil es die Link-URL ist — alles, was ein Außenstehender nachrechnen könnte, wäre ein Link, den er erraten könnte.

Nur das Token wird abgeleitet. Die PIN bleibt bei jedem Durchlauf zufällig und wird nirgends gespeichert; das ist die Eigenschaft, die eine gestohlene Datenbank und selbst einen gestohlenen Server nutzlos macht (siehe pepsi-secure-link(1)); eine PIN, die aus dem Pfeffer und dem Token des Datensatzes reproduzierbar wäre, wäre eine, die der Operator nachrechnen könnte. Deshalb müssen die Kopie und ihre Ankündigung ein einziger Commit sein: Eine ohne ihre Benachrichtigungen gespeicherte Kopie trüge eine PIN, die nirgends mehr existiert, und keine Wiederholung könnte sie ankündigen. So aber ist eine gespeicherte Kopie immer eine angekündigte, und eine Wiederholung, die sie vorfindet, hat für diesen Empfänger nichts mehr zu tun.

Das Einzige, was eine Wiederholung wiederholen kann, ist PIN_DELIVERY = command: Der Befehl läuft vor dem Commit (sodass ein ausgefallenes Gateway nichts gespeichert zurücklässt), und schlägt der Commit danach fehl, sendet der nächste Durchlauf eine neue PIN; die frühere öffnet nichts, da unter ihr nichts gespeichert wurde.

85.1.38.1.7. Fehler¶

Alles, was fehlschlagen kann, geschieht, bevor der Warteschlangendatensatz gelöscht wird, und nichts, was fehlschlägt, schickt die Nachricht je weiter: Eine Nachricht, die diese Stage erreicht hat, ist definitionsgemäß eine, von der der Operator gesagt hat, dass sie nicht ungeschützt hinausgehen darf.

  • Ein [pepsi-secure-link]-Abschnitt, der sich nicht parsen lässt, kein BASE_URL oder PEPPER hat (oder einen Pfeffer, der sich nicht lesen lässt) oder kein NOTIFY_STAGE, lässt den Worker den Start verweigern (Exit 78): Der Dispatcher hält die Warteschlange an, bis die Konfiguration korrigiert ist, statt jede Nachricht einzeln fehlschlagen zu lassen.

  • Ein Fehler dieses Hosts — eine Benachrichtigungsvorlage, die sich nicht lesen lässt, PIN_DELIVERY = command, das nicht startet, fehlschlägt oder nicht innerhalb von 30 Sekunden fertig wird, die Datenbank — wird wiederholt, nach einer Minute und dann in sich verdoppelnden Abständen bis zu einer Stunde, bis die Nachricht länger als das MAX_LIFETIME der Stage (Standardwert 120 h) eingereiht war; dann geht sie an die BOUNCE_STAGE der Stage oder schlägt ohne eine solche fehl (siehe pepsi-dispatch(1)).

  • Eine Nachricht mit dem Null-Umschlagabsender schlägt sofort fehl: Es gäbe niemanden, dem man die PIN geben könnte.

85.1.38.1.8. Exit-Status¶

Der Worker endet mit 0 bei einem sauberen Ende der Eingabe und mit 78, wenn er den Start verweigert, weil [pepsi-secure-link] nicht verwendbar ist (siehe Fehler). Ein Fehlschlag je Nachricht wird über die Warteschlange gemeldet, nicht über den Exit-Status.

85.1.38.1.9. Siehe auch¶

pepsi-secure-link(1), pepsi-stage-encrypt(1), pepsi-httpd(1), pepsi-dispatch(1), pepsi.conf(5), pepsi.state(7)

Logo

Pepsi 0.0.0

Sprachen

  • English
  • Deutsch
  • français

Navigation

Inhalt

  • 1. Einführung
  • 2. Erste Schritte auf einem günstigen VPS
  • 3. Installation
  • 4. Debian-Pakete
  • 5. Der Assistent
  • 6. Konfiguration
  • 7. Pepsi betreiben
  • 8. Fehlersuche
  • 9. Unterstützte Funktionen
  • 10. SMTP-Protokollerweiterungen
  • 11. Schlüsselverwaltung
  • 12. Das Secure-Link-Ausweichportal
  • 13. Interoperabilität mit Clients
  • 14. Bedrohungsmodell
  • 15. Sicherheitsmodell
  • 16. Microsoft Exchange als Gateway
  • 17. Mailinglisten
  • 18. Archive
  • 19. Die REST-API von GNU Mailman 3
  • 20. Die administrative API
  • 21. Die Verwaltungskonsole
  • 22. Architektur
  • 23. Der Nachrichten-State
  • 24. Die Pipeline erweitern
  • 25. Testsuite
  • 26. Benchmark-Suite
  • 27. Leistung
  • 28. pepsi-ingress
  • 29. pepsi-dispatch
  • 30. pepsi-httpd
  • 31. pepsi-stage-arc
  • 32. pepsi-stage-srs
  • 33. pepsi-stage-encrypt
  • 34. pepsi-stage-decrypt
  • 35. pepsi-stage-dkim-sign
  • 36. pepsi-stage-bounce
  • 37. pepsi-stage-aliases
  • 38. pepsi-stage-relay-to-internet
  • 39. pepsi-stage-relay-to-smarthost
  • 40. pepsi-stage-relay-to-maildir
  • 41. pepsi-stage-dot-forward
  • 42. pepsi-stage-relay-to-lmtp
  • 43. pepsi-stage-discard
  • 44. pepsi-stage-anti-spam
  • 45. pepsi-stage-auto-pay
  • 46. pepsi-stage-check-whitelist
  • 47. pepsi-stage-auto-whitelist
  • 48. pepsi-stage-autocrypt-learn
  • 49. pepsi-stage-reencrypt
  • 50. pepsi-stage-detect-language
  • 51. pepsi-detect-language
  • 52. pepsi-stage-block-language
  • 53. pepsi-stage-vacation
  • 54. pepsi-stage-secretary
  • 55. pepsi-stage-edit-settings
  • 56. pepsi-stage-if
  • 57. pepsi-stage-milter
  • 58. pepsi-stage-route
  • 59. pepsi-stage-vks-confirm
  • 60. pepsi-stage-secure-link
  • 61. pepsi-setup
  • 62. pepsi-queue
  • 63. pepsi-status
  • 64. pepsi-sendmail
  • 65. pepsi-whitelist
  • 66. pepsi-keys
  • 67. pepsi-keydisc
  • 68. pepsi-settings
  • 69. pepsi-list
  • 70. pepsi-archive
  • 71. pepsi-stage-list
  • 72. pepsi-stage-list-post
  • 73. pepsi-stage-list-deliver
  • 74. pepsi-stage-list-command
  • 75. pepsi-stage-list-bounce
  • 76. pepsi-tlsrpt
  • 77. pepsi-secure-link
  • 78. pepsi-failure-bouncer
  • 79. pepsi-quota
  • 80. pepsi-helper-token-refresh
  • 81. pepsi-telemetry
  • 82. pepsi-telemetry-client
  • 83. pepsi-config
  • 84. Funktionsstabilität
  • 85. Handbuchseiten
    • 85.1. Befehle (Abschnitt 1)
    • 85.2. Konfigurationsdatei (Abschnitt 5)
    • 85.3. Nachrichten-State (Abschnitt 7)
  • 86. RFC-Index

Related Topics

  • Documentation overview
    • 85. Handbuchseiten
      • Previous: 85.1.37. pepsi-stage-vks-confirm
      • Next: 85.1.39. pepsi-setup

Schnellsuche

©2026, GNUnet e.V.. | Powered by Sphinx 8.1.3 & Alabaster 0.7.16 | Page source