85.1.38. pepsi-stage-secure-link¶

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

Section du manuel:

1

85.1.38.1.1. Nom¶

pepsi-stage-secure-link - l’étape de repli par lien sécurisé du pipeline Pepsi.

85.1.38.1.2. Synopsis¶

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

85.1.38.1.3. Description¶

pepsi-stage-secure-link est un programme d’étape exécuté par pepsi-dispatch(1) comme un worker persistant lisant les identifiants de message sur l’entrée standard.

C’est l’autre bout de [stage-encrypt] ON_NO_KEY = secure-link. Lorsque pepsi-stage-encrypt(1) doit chiffrer un message et que le destinataire ne publie aucune clé utilisable, il achemine le message ici plutôt que de l’envoyer en clair ou de le faire rebondir. Cette étape retire alors le message entièrement du fil :

  1. elle engendre un PIN, dérive le jeton d’URL de la ligne de file (voir Réessais) et une clé de contenu à partir du PIN et du poivre côté serveur, et scelle le message entier sous cette clé ;

  2. en une seule transaction, elle ne stocke que le texte chiffré AEAD dans pepsi.secure_message et met en file un courrier de notification au destinataire portant le lien et — sous la valeur par défaut PIN_DELIVERY = sender — un second courrier à l’expéditeur portant le PIN, pour que l’expéditeur le relaie par téléphone ou par message texte ;

  3. elle supprime la ligne de file.

La ligne est supprimée plutôt qu’avancée, car l’avancer transmettrait le texte clair au destinataire même qui ne doit pas recevoir de texte clair. La continuation du message est la notification, un message sortant ordinaire injecté à [pepsi-secure-link] NOTIFY_STAGE, signé et relayé comme tout autre. L’étape est donc terminale et n’a pas de NEXT_STAGE.

Un message comportant plusieurs destinataires sans clé produit un message stocké par destinataire, chacun avec son propre jeton, son propre PIN et son propre texte chiffré, de sorte que le PIN d’un destinataire n’ouvre jamais la copie d’un autre et que la liste des destinataires n’est divulguée à aucun d’eux.

85.1.38.1.4. Configuration¶

La section [stage-<name>] de l’étape ne porte que PROGRAM. Tout le reste réside dans la section globale [pepsi-secure-link] (voir pepsi.conf(5)), délibérément : la fenêtre d’expiration, la longueur du PIN et le verrouillage ne sont pas des réglages de comportement qu’un correspondant pourrait modifier par e-mail via pepsi-stage-edit-settings(1), et une section globale est hors de portée de la couche de redéfinition par adresse.

85.1.38.1.5. Exemple¶

[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. Réessais¶

Le corps d’une étape peut s’exécuter plus d’une fois pour la même ligne de file : un worker qui meurt après ses effets de bord mais avant la validation, un redémarrage de pepsi-dispatch(1) qui reprend une ligne running, une remise en file par l’opérateur, et un échec en cours de route, qui est réessayé (voir Échec). La boucle par destinataire n’est pas atomique — un échec au k-ième destinataire laisse déjà stockés et notifiés tous les destinataires qui le précèdent — mais chaque destinataire l’est : la copie stockée et ses notifications sont validées ensemble, par un seul appel de la fonction SQL secure_message_store, ou pas du tout.

Le jeton du message sécurisé est donc dérivé de la ligne de file, comme un condensat à clé du jeton de la ligne et de la position du destinataire sous le PEPPER du déploiement, plutôt que tiré au hasard. Une passe répétée recalcule le même jeton, trouve la ligne pepsi.secure_message de ce destinataire déjà présente, journalise un avertissement et n’y touche pas : pas de seconde copie, pas de second lien vers le destinataire et pas de second PIN vers l’expéditeur. Le jeton est à clé plutôt que simplement haché parce qu’il est l’URL du lien — tout ce qu’un tiers pourrait recalculer serait un lien qu’il pourrait deviner.

Seul le jeton est dérivé. Le PIN reste aléatoire à chaque passe et n’est stocké nulle part, propriété qui rend inutiles une base de données volée et même un serveur volé (voir pepsi-secure-link(1)) ; un PIN reproductible à partir du poivre et du jeton de la ligne serait un PIN que l’opérateur pourrait recalculer. C’est pourquoi la copie et son annonce doivent former une seule validation : une copie stockée sans ses notifications porterait un PIN qui n’existe plus nulle part, et aucun réessai ne pourrait l’annoncer. En l’état, une copie stockée est toujours une copie annoncée, et un réessai qui la trouve n’a plus rien à faire pour ce destinataire.

La seule chose qu’un réessai peut répéter est PIN_DELIVERY = command : la commande s’exécute avant la validation (de sorte qu’une passerelle hors service ne laisse rien de stocké), et si la validation échoue ensuite, la passe suivante envoie un nouveau PIN ; le précédent n’ouvre rien, puisque rien n’a été stocké sous lui.

85.1.38.1.7. Échec¶

Tout ce qui peut échouer est fait avant la suppression de la ligne de file, et rien de ce qui échoue n’envoie jamais le message plus loin : un message qui a atteint cette étape est par définition un message dont l’opérateur a dit qu’il ne doit pas sortir sans protection.

  • Une section [pepsi-secure-link] qui ne s’analyse pas, qui n’a pas de BASE_URL ou de PEPPER (ou un poivre qui ne peut être lu), ou pas de NOTIFY_STAGE fait refuser au worker de démarrer (code 78) : le dispatcher retient la file jusqu’à ce que la configuration soit corrigée, au lieu que chaque message échoue de son côté.

  • Une défaillance de cet hôte — un modèle de notification qui ne peut être lu, PIN_DELIVERY = command qui ne démarre pas, échoue ou ne se termine pas en 30 secondes, la base de données — est réessayée, après une minute puis à des intervalles doublant jusqu’à une heure, jusqu’à ce que le message soit en file depuis plus longtemps que le MAX_LIFETIME de l’étape (par défaut 120 h) ; il part alors vers le BOUNCE_STAGE de l’étape, ou est mis en échec en l’absence de celui-ci (voir pepsi-dispatch(1)).

  • Un message dont l’expéditeur d’enveloppe est nul est mis en échec immédiatement : il n’y aurait personne à qui donner le PIN.

85.1.38.1.8. Code de sortie¶

Le worker se termine avec 0 sur une fin d’entrée propre, et avec 78 lorsqu’il refuse de démarrer parce que [pepsi-secure-link] n’est pas utilisable (voir Échec). Un échec par message est signalé via la file, non par le code de sortie.

85.1.38.1.9. Voir aussi¶

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

Langues

  • English
  • Deutsch
  • français

Navigation

Sommaire

  • 1. Introduction
  • 2. Démarrage sur un VPS bon marché
  • 3. Installation
  • 4. Paquets Debian
  • 5. L’assistant
  • 6. Configuration
  • 7. Exploiter Pepsi
  • 8. Dépannage
  • 9. Fonctionnalités prises en charge
  • 10. Extensions du protocole SMTP
  • 11. Gestion des clés
  • 12. Le portail de repli par lien sécurisé
  • 13. Interopérabilité des clients
  • 14. Modèle de menace
  • 15. Modèle de sécurité
  • 16. Microsoft Exchange comme passerelle
  • 17. Listes de diffusion
  • 18. Archives
  • 19. L’API REST de GNU Mailman 3
  • 20. L’API d’administration
  • 21. La console d’administration
  • 22. Architecture
  • 23. L’état du message
  • 24. Étendre le pipeline
  • 25. Suite de tests
  • 26. Suite de benchmarks
  • 27. Performance
  • 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. Stabilité des fonctionnalités
  • 85. Pages de manuel
    • 85.1. Commandes (section 1)
    • 85.2. Fichier de configuration (section 5)
    • 85.3. État du message (section 7)
  • 86. Index des RFC

Related Topics

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

Recherche rapide

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