Aller au contenu

PD-81 - Specification canonique contractuelle

Statut: CONTRACTUELLE - FAIT LOI
Version: 1.0.0
Perimetre: EPIC PD-189 (Cryptographie, preuves et acces legaux)

1. Objectif

Definir le contrat fonctionnel, securitaire et probatoire du module Legal PRE de ProbatioVault, permettant un acces judiciaire exceptionnel, temporaire, borne et tracable a des documents chiffres, sans introduire de backdoor permanente ni degrader le modele zero-knowledge global.

Le module PD-81 orchestre obligatoirement, dans cet ordre logique: 1. la reception et la validation d'un mandat judiciaire eIDAS, 2. la double validation interne 2-of-2 (adaptation PD-82), 3. l'activation d'un acces temporaire via PRE (extension PD-41), 4. la tracabilite probatoire complete (PD-37, PD-38, PD-39), 5. la destruction cryptographique verifiable des mecanismes temporaires.

2. Perimetre / Hors perimetre

2.1 Perimetre inclus

Sont dans le perimetre contractuel: - Validation d'un mandat judiciaire signe electroniquement (eIDAS) avec verification de signature, chaine de certificats, validite temporelle, et statut de revocation (CRL/OCSP) via TSP reel. - Extraction puis controle contractuel du perimetre du mandat (liste de documentId, fenetre temporelle, identite emettrice). - Reutilisation du mecanisme PD-82 avec adaptation des roles (DPO, LegalOfficer) et du contexte (LEGAL_PRE_MANDATE). - Activation PRE uniquement apres etat ACTIVATED de la double validation. - Extension de PD-41 avec generateLegalReKey(), revokeReKey(), getLegalAccessStatus(). - Generation de ReKey legales strictement temporaires, bornees au mandat, marquees isLegal=true, rattachees a mandateId, et stockees dans un espace isole des ReKey standards. - Consultation en lecture seule sur le perimetre documentaire autorise. - Journalisation append-only des evenements, signature HSM, hash SHA3-256, horodatage TSA RFC 3161, ancrage periodique, preuve composite auditable. - Destruction cryptographique verifiable a expiration TTL, fin de consultation, ou revocation explicite.

2.2 Hors perimetre

Sont explicitement hors perimetre: - PRE standard hors cas legal (partages adultes, delegations B2B). - Portail front-end autorite judiciaire. - API machine-to-machine judiciaire (phase future). - Gouvernance PKI complete des autorites (on suppose des identites exploitables via TSP). - Notifications utilisateur (l'evenement est journalise; l'emission de notification est hors perimetre). - Resistance post-quantique. - Appreciation juridique finale par un juge/autorite exterieure.

2.3 Informations manquantes (bloquantes ou a preciser)

Les informations suivantes ne sont pas specifiees dans l'expression de besoin et doivent etre explicitees pour une conformite contractuelle complete: 1. Liste normative des roles autorises a porter DPO et LegalOfficer (fonctions, delegations, incompatibilites, suppleances). 2. Source de verite de l'identite juridique interne (annuaire, registre RH, IAM) et niveau d'assurance d'identite requis. 3. Valeurs derogatoires de rate limiting si l'environnement ne retient pas le profil contractuel par defaut (10/min/ReKey, plage [1..60]). [CORRECTION v2] 4. Capacite/cadence operationnelle des batchs d'ancrage si une contrainte plus stricte que le delai maximal contractuel de 24h est imposee. [CORRECTION v2] 5. Valeurs derogatoires eventuelles de destructionDeadline au-dela de la valeur contractuelle par defaut (1 heure). [CORRECTION v3] 6. Politique de retention des preuves composites et journaux probatoires. 7. Taxonomie des types de mandat et valeurs de TTL de double validation associees. [CORRECTION v2]

En l'absence de ces parametres, les exigences correspondantes sont contraignantes sur le principe, mais leurs seuils chiffres sont a completer avant recette finale.

3. Definitions

  • Mandat judiciaire: acte electronique signe (eIDAS) autorisant un acces legal borne a un perimetre et une duree.
  • TSP: Trust Service Provider utilise pour verifier signature qualifiee, certificats, et statut de revocation.
  • Legal PRE: mode d'orchestration PRE specifique a PD-81, distinct du PRE standard.
  • ReKey legale: artefact de re-chiffrement temporaire associe a un mandat, marque isLegal=true, scope borne.
  • TTL: duree de validite d'une ReKey legale; borne dure maximale de 30 jours calendaires.
  • Perimetre mandat: ensemble ferme de documentId explicitement autorises.
  • Double validation 2-of-2: workflow PD-82 adapte, necessitant deux validations distinctes (DPO + LegalOfficer), avec mapping PD-82 DPO -> PARENT et LegalOfficer -> AUTHORITY et etats intermediaires PENDING_DPO/PENDING_LEGAL_OFFICER/PENDING_BOTH avant ACTIVATED. [CORRECTION v2]
  • TTL de double validation (validationTtl): fenetre contractuelle par defaut de 7 jours calendaires; parametre configurable dans l'intervalle [1 heure, 30 jours], sans depasser la validite du mandat. [CORRECTION v2]
  • Activation: transition d'etat autorisant l'usage des ReKey legales apres validations completes.
  • Revocation: annulation avant terme d'une ReKey legale; effet immediat attendu avec invalidation dans la meme transaction ou sous 5 secondes maximum. [CORRECTION v2]
  • Destruction cryptographique verifiable: suppression logique et invalidation irreversibles d'une ReKey legale, tracees probatoirement.
  • Delai de destruction (destructionDeadline): borne contractuelle maximale entre l'entree dans un etat terminal (REVOKED/EXPIRED/COMPLETED) et l'atteinte de l'etat DESTROYED; valeur par defaut: 1 heure; parametre configurable dans l'intervalle [1 minute, 24 heures]. [CORRECTION v3]
  • Preuve composite: paquet verifiable hors plateforme reliant mandat, validations, operations PRE, signatures HSM, hash, timestamp TSA, et preuve d'ancrage.
  • Audit a posteriori utilisateur: capacite du titulaire du coffre a verifier l'existence, la chaine d'evenements et l'integrite de l'operation.
  • Fin de consultation (END_OF_CONSULTATION): condition de cloture declenchee par action explicite de l'autorite judiciaire consultante (Bob) OU par epuisement du nombre de consultations autorisees explicitement par le mandat; a defaut de plafond explicite dans le mandat, seule l'action explicite est valide. [CORRECTION v2]
  • Bob (contexte Legal PRE): autorite judiciaire consultante destinataire du rechiffrement legal; bobPublicKey est la cle publique de cette autorite. [CORRECTION v2]
  • Source et verification de bobPublicKey: la cle provient du mandat eIDAS (ou de son annexe signee referencee) et DOIT etre verifiee via chaine de certificats/CRL/OCSP par TSP, puis rapprochee d'une identite judiciaire autorisee dans IAM. [CORRECTION v2]
  • Rate limiting legal PRE: valeur contractuelle par defaut de 10 consultations/minute par legalReKeyId, parametre configurable dans [1..60] consultations/minute. [CORRECTION v2]
  • Frequence d'ancrage probatoire: ancrage au batch periodique avec delai maximal contractuel de 24 heures entre emission de l'evenement et ancrage observable. [CORRECTION v2]
  • Titulaire: proprietaire du coffre (ownerUserId) auquel appartiennent les documents vises par le mandat; l'habilitation audit est evaluee sur cette propriete IAM. [CORRECTION v2]
  • Fail-closed: en cas de doute ou d'erreur, l'acces est refuse par defaut.

4. Invariants (non negociables)

ID Regle contractuelle Justification
INV-81-01 Aucun acces legal ne persiste au-dela du TTL ou de la revocation; aucun mecanisme permanent d'acces n'est cree. Interdiction de backdoor permanente.
INV-81-02 Aucun acces n'est possible sans mandat valide eIDAS verifie via TSP reel au moment de l'instruction. Conformite judiciaire et non-repudiation.
INV-81-03 L'activation exige obligatoirement deux validations distinctes conformes PD-82 (DPO et LegalOfficer) et portees par deux userId IAM juridiquement distincts. Separation des pouvoirs, reduction du risque interne. [CORRECTION v2]
INV-81-04 Aucune cle persistante de document n'est exposee; seuls des artefacts temporaires de re-chiffrement sont admis. Preservation zero-knowledge.
INV-81-05 Le scope d'acces est strictement limite aux documentId du mandat; tout document hors liste est interdit. Principe de proportionnalite et minimisation.
INV-81-06 L'acces legal est strictement en lecture seule; aucune modification ni suppression de document WORM n'est autorisee. Integrite documentaire et WORM.
INV-81-07 Toute ReKey legale est destructible de facon verifiable a expiration, a fin de consultation, ou sur revocation. Limitation temporelle effective.
INV-81-08 Chaque etape probatoire est journalisee append-only, signee HSM, hashee SHA3-256, horodatee TSA, et rattachable a l'ancrage periodique (delai max 24h). Opposabilite et integrite de la preuve. [CORRECTION v2]
INV-81-09 Une preuve composite complete et verifiable hors plateforme doit etre produite pour chaque operation legal PRE finalisee. Auditabilite externe.
INV-81-10 Le mode Legal PRE est isole du PRE standard: stockage, traces, et etats separes. Cloisonnement de risque.
INV-81-11 En cas d'erreur de validation, incoherence d'etat, ou indisponibilite d'un composant critique de confiance (TSP/HSM/TSA), le systeme refuse l'acces (fail-closed). Robustesse securitaire.
INV-81-12 Le champ contextId est obligatoire sur toutes operations PRE legales et doit correspondre au contexte LEGAL_PRE_MANDATE. Coherence cryptographique et tracabilite.

5. Flux nominaux

N1 - Reception et qualification du mandat

  1. Le systeme recoit une demande legal PRE contenant un mandat signe et les metadonnees requises.
  2. Le systeme verifie le format et l'integrite du mandat.
  3. Le systeme interroge le TSP et valide signature qualifiee, chaine de certificats, validite temporelle, CRL/OCSP.
  4. Le systeme extrait mandateId, emetteur, periode autorisee, liste documentId, puis resout chaque identifiant de mandat vers un documentId interne ProbatioVault. [CORRECTION v2]
  5. En cas de non-resolution d'au moins un identifiant, le systeme rejette la demande en fail-closed (ERR-81-06). [CORRECTION v2]
  6. Le systeme enregistre un evenement probatoire de qualification (append-only + HSM + hash + TSA).
  7. Le systeme ouvre un dossier de validation interne en etat PENDING_BOTH.

Post-condition N1: dossier legal PRE cree et eligible a la double validation.

N2 - Double validation interne 2-of-2 (adaptation PD-82)

  1. Le DPO realise la validation 1 signee, horodatee, identite juridique rattachee.
  2. Le LegalOfficer realise la validation 2 signee, horodatee, identite juridique rattachee.
  3. Le systeme applique les regles d'etat PD-82 adaptees au contexte LEGAL_PRE_MANDATE, avec mapping DPO -> PARENT, LegalOfficer -> AUTHORITY et etats intermediaires PENDING_DPO/PENDING_LEGAL_OFFICER/PENDING_BOTH. [CORRECTION v2]
  4. Si les deux validations sont presentes dans validationTtl (defaut 7 jours calendaires), etat final ACTIVATED. [CORRECTION v2]
  5. Le systeme journalise chaque transition d'etat de maniere probatoire.

Post-condition N2: dossier en etat ACTIVATED, sinon REJECTED/EXPIRED selon regles PD-82.

N3 - Activation et consultation legale bornee

  1. Sur dossier ACTIVATED, le systeme appelle activateLegalAccess, qui orchestre en interne generateLegalReKey() avec TTL legal et scope documentId du mandat (un seul appel API externe). [CORRECTION v2]
  2. La ReKey legale produite est marquee isLegal=true, liee a mandateId, et stockee dans l'espace isole legal.
  3. Les consultations sont autorisees uniquement sur documentId du mandat, en lecture seule.
  4. Le systeme applique le rate limiting contractuel anti-extraction massive (defaut 10 consultations/minute par legalReKeyId, configurable dans [1..60]). [CORRECTION v2]
  5. Chaque consultation journalise un evenement probatoire.

Post-condition N3: acces legal actif, borne dans le temps et le perimetre.

N4 - Cloture et destruction cryptographique

  1. La cloture intervient sur expiration TTL, fin de consultation, ou action explicite revokeReKey().
  2. Le systeme invalide immediatement la ReKey legale pour tout usage ulterieur (meme transaction ou delai max 5 secondes). [CORRECTION v2]
  3. Le systeme produit un evenement de destruction/revocation signe et horodate.
  4. Le statut d'acces passe a un statut terminal de cloture (REVOKED ou EXPIRED ou COMPLETED) puis a DESTROYED apres suppression physique/zeroisation verifiable de l'artefact de rechiffrement. [CORRECTION v2]
  5. Le systeme assemble la preuve composite complete et la rend disponible pour audit a posteriori.

Post-condition N4: aucun acces legal operationnel restant pour le mandat cloture.

5bis. Diagrammes Mermaid

D1 - Machine d'etats LegalValidationCase (adaptation PD-82)

Etats du dossier de validation interne. Ref: INV-81-03 (double validation 2-of-2 distincte), INV-81-02 (mandat eIDAS valide requis).

stateDiagram-v2
    [*] --> PENDING_BOTH : registerLegalMandate()\n[mandat eIDAS valide - INV-81-02]

    PENDING_BOTH --> PENDING_LEGAL_OFFICER : submitInternalValidation(DPO)\n[INV-81-03: userId distincts]
    PENDING_BOTH --> PENDING_DPO : submitInternalValidation(LegalOfficer)\n[INV-81-03: userId distincts]
    PENDING_BOTH --> EXPIRED : validationTtl ecoulee

    PENDING_LEGAL_OFFICER --> ACTIVATED : submitInternalValidation(LegalOfficer)\n[INV-81-03: 2-of-2 complete]
    PENDING_LEGAL_OFFICER --> EXPIRED : validationTtl ecoulee

    PENDING_DPO --> ACTIVATED : submitInternalValidation(DPO)\n[INV-81-03: 2-of-2 complete]
    PENDING_DPO --> EXPIRED : validationTtl ecoulee

    PENDING_BOTH --> REJECTED : mandat invalide / ERR-81-08
    PENDING_LEGAL_OFFICER --> REJECTED : ERR-81-08 meme userId
    PENDING_DPO --> REJECTED : ERR-81-08 meme userId

    ACTIVATED --> [*]
    EXPIRED --> [*]
    REJECTED --> [*]

D2 - Machine d'etats LegalReKey (cycle de vie)

Transitions contractuelles du statut ReKey legale. Ref: INV-81-01 (aucun acces au-dela TTL/revocation), INV-81-07 (destruction verifiable), INV-81-04 (artefacts temporaires uniquement).

stateDiagram-v2
    [*] --> ACTIVE : generateLegalReKey()\n[dossier ACTIVATED - INV-81-04]

    ACTIVE --> REVOKED : revokeReKey()\n[invalidation <= 5s - INV-81-01]
    ACTIVE --> EXPIRED : expiresAt atteint\n[INV-81-01: aucun acces post-TTL]
    ACTIVE --> COMPLETED : closeLegalAccess(END_OF_CONSULTATION)\n[INV-81-01]

    REVOKED --> DESTROYED : destruction cryptographique\n[<= destructionDeadline - INV-81-07]
    EXPIRED --> DESTROYED : destruction cryptographique\n[<= destructionDeadline - INV-81-07]
    COMPLETED --> DESTROYED : destruction cryptographique\n[<= destructionDeadline - INV-81-07]

    DESTROYED --> [*]

D3 - Sequence N1+N2 : Qualification mandat et double validation

Flux multi-service couvrant la reception du mandat (N1) et la double validation (N2). Ref: INV-81-02 (verification TSP), INV-81-03 (2-of-2), INV-81-08 (journalisation probatoire), INV-81-11 (fail-closed TSP/HSM/TSA).

sequenceDiagram
    participant Client
    participant Orchestrateur as PD-81 Orchestrateur
    participant TSP
    participant HSM
    participant TSA
    participant PD82 as PD-82 (Double Validation)
    participant AuditLog as Audit append-only

    Note over Client,AuditLog: N1 - Qualification du mandat

    Client->>Orchestrateur: registerLegalMandate(mandatePayload, contextId)
    Orchestrateur->>Orchestrateur: Verification format/integrite
    Orchestrateur->>TSP: Verifier signature eIDAS + chaine + CRL/OCSP
    alt TSP indisponible [INV-81-11]
        TSP-->>Orchestrateur: Erreur
        Orchestrateur-->>Client: ERR-81-15 fail-closed
    end
    TSP-->>Orchestrateur: Resultat validation
    alt Mandat invalide [INV-81-02]
        Orchestrateur-->>Client: ERR-81-01..05 rejet
    end
    Orchestrateur->>Orchestrateur: Extraction mandateId, scopeDocumentIds, periode
    Orchestrateur->>Orchestrateur: Resolution documentId internes
    Orchestrateur->>HSM: Signer evenement MANDATE_QUALIFIED (SHA3-256)
    HSM-->>Orchestrateur: hsmSignature [INV-81-08]
    Orchestrateur->>TSA: Horodater evenement (RFC 3161)
    TSA-->>Orchestrateur: tsaTokenRef [INV-81-08]
    Orchestrateur->>AuditLog: Ecrire MANDATE_QUALIFIED (append-only)
    Orchestrateur->>PD82: Ouvrir dossier (PENDING_BOTH, contextId=LEGAL_PRE_MANDATE)
    Orchestrateur-->>Client: LegalMandateResult (legalCaseId)

    Note over Client,AuditLog: N2 - Double validation 2-of-2

    Client->>Orchestrateur: submitInternalValidation(legalCaseId, DPO, identity1)
    Orchestrateur->>PD82: Validation 1 (DPO -> PARENT) [INV-81-03]
    PD82-->>Orchestrateur: PENDING_LEGAL_OFFICER
    Orchestrateur->>HSM: Signer VALIDATION_SUBMITTED
    Orchestrateur->>TSA: Horodater
    Orchestrateur->>AuditLog: Ecrire VALIDATION_SUBMITTED

    Client->>Orchestrateur: submitInternalValidation(legalCaseId, LegalOfficer, identity2)
    Orchestrateur->>Orchestrateur: Verifier identity2 != identity1 [INV-81-03]
    Orchestrateur->>PD82: Validation 2 (LegalOfficer -> AUTHORITY)
    PD82-->>Orchestrateur: ACTIVATED
    Orchestrateur->>HSM: Signer VALIDATION_ACTIVATED
    Orchestrateur->>TSA: Horodater
    Orchestrateur->>AuditLog: Ecrire VALIDATION_ACTIVATED
    Orchestrateur-->>Client: ValidationStateResult (ACTIVATED)

D4 - Sequence N3+N4 : Activation PRE legale, consultation et destruction

Flux multi-service couvrant l'activation (N3) et la cloture (N4). Ref: INV-81-04 (pas de cle persistante), INV-81-05 (scope strict), INV-81-06 (lecture seule), INV-81-07 (destruction verifiable), INV-81-10 (isolation), INV-81-12 (contextId obligatoire).

sequenceDiagram
    participant Client
    participant Orchestrateur as PD-81 Orchestrateur
    participant PD41 as PD-41 (PRE legal)
    participant HSM
    participant TSA
    participant AuditLog as Audit append-only
    participant Storage as Storage legal isole

    Note over Client,Storage: N3 - Activation et consultation

    Client->>Orchestrateur: activateLegalAccess(legalCaseId)
    Orchestrateur->>Orchestrateur: Verifier etat ACTIVATED + mandat valide
    Orchestrateur->>PD41: generateLegalReKey(alicePK, bobPK,<br/>LEGAL_PRE_MANDATE, constraints) [INV-81-12]
    PD41->>PD41: Generer ReKey (isLegal=true, TTL<=30j) [INV-81-04]
    PD41->>Storage: Stocker ReKey domaine legal isole [INV-81-10]
    PD41-->>Orchestrateur: LegalReKey (ACTIVE)
    Orchestrateur->>HSM: Signer LEGAL_ACCESS_ACTIVATED
    Orchestrateur->>TSA: Horodater [INV-81-08]
    Orchestrateur->>AuditLog: Ecrire LEGAL_ACCESS_ACTIVATED
    Orchestrateur-->>Client: LegalAccessActivationResult

    loop Consultations (rate limit: 10/min/reKey)
        Client->>Orchestrateur: consulter(legalReKeyId, documentId)
        Orchestrateur->>Orchestrateur: Verifier documentId in scopeDocumentIds [INV-81-05]
        Orchestrateur->>Orchestrateur: Verifier lecture seule [INV-81-06]
        Orchestrateur->>Orchestrateur: Verifier rate limit
        Orchestrateur->>PD41: Re-chiffrer document via ReKey
        PD41-->>Orchestrateur: Document re-chiffre pour Bob
        Orchestrateur->>HSM: Signer LEGAL_DOCUMENT_ACCESSED
        Orchestrateur->>AuditLog: Ecrire LEGAL_DOCUMENT_ACCESSED
        Orchestrateur-->>Client: Document (lecture seule)
    end

    Note over Client,Storage: N4 - Cloture et destruction

    alt Revocation explicite
        Client->>Orchestrateur: closeLegalAccess(legalReKeyId, REVOKE)
    else Expiration TTL
        Orchestrateur->>Orchestrateur: expiresAt atteint [INV-81-01]
    else Fin de consultation
        Client->>Orchestrateur: closeLegalAccess(legalReKeyId, END_OF_CONSULTATION)
    end

    Orchestrateur->>PD41: revokeReKey(legalReKeyId) [invalidation <= 5s]
    PD41->>Storage: Invalider ReKey [INV-81-01]
    PD41-->>Orchestrateur: RevocationResult (REVOKED|EXPIRED|COMPLETED)
    Orchestrateur->>HSM: Signer LEGAL_ACCESS_CLOSED / LEGAL_REKEY_REVOKED
    Orchestrateur->>TSA: Horodater
    Orchestrateur->>AuditLog: Ecrire evenement cloture

    Note over Orchestrateur,Storage: Destruction (<= destructionDeadline)

    Orchestrateur->>Storage: Suppression physique / zeroisation ReKey [INV-81-07]
    Storage-->>Orchestrateur: Confirmation destruction
    Orchestrateur->>HSM: Signer LEGAL_REKEY_DESTROYED
    Orchestrateur->>TSA: Horodater
    Orchestrateur->>AuditLog: Ecrire LEGAL_REKEY_DESTROYED
    Orchestrateur->>Orchestrateur: Assembler preuve composite [INV-81-09]
    Orchestrateur-->>Client: LegalAccessClosureResult (DESTROYED)

6. Cas d'erreur

ID Condition detectee Reponse attendue
ERR-81-01 Mandat absent ou format invalide Rejet immediat, aucun dossier active, evenement probatoire d'echec.
ERR-81-02 Signature eIDAS invalide ou certificat non qualifie Rejet fail-closed, motif explicite, aucune activation possible.
ERR-81-03 Chaine de certificats incomplete/invalide Rejet fail-closed, aucune creation de ReKey.
ERR-81-04 Certificat revoque (CRL/OCSP) Rejet fail-closed, evenement de securite critique.
ERR-81-05 Fenetre temporelle du mandat echue ou non encore valide Rejet fail-closed.
ERR-81-06 Perimetre mandat vide ou incoherent (documentId dupliques/invalides) ou non resoluble vers les documentId internes Rejet de la demande, aucune activation. [CORRECTION v2]
ERR-81-07 Tentative d'activation sans etat ACTIVATED PD-82 Refus strict, alerte d'incoherence d'etat.
ERR-81-08 Validateur 1 et validateur 2 de meme identite juridique (userId IAM identique), meme si le role differe Refus de la 2e validation, etat non activable. [CORRECTION v2]
ERR-81-09 TTL demande > 30 jours Rejet de generation ReKey legale.
ERR-81-10 Acces a un documentId hors mandat Refus strict, evenement de tentative hors perimetre.
ERR-81-11 Tentative de modification/suppression document en mode legal Refus strict, evenement de violation lecture seule.
ERR-81-12 ReKey legale expiree/revoquee/inconnue Refus strict de consultation.
ERR-81-13 Echec signature HSM d'un evenement probatoire Blocage de progression et refus d'activation/consultation concernee (fail-closed).
ERR-81-14 Echec horodatage TSA d'un evenement obligatoire Blocage de progression pour l'evenement obligatoire (fail-closed).
ERR-81-15 Service TSP indisponible Rejet temporaire fail-closed, operation non executable.
ERR-81-16 Incoherence entre mandateId de la ReKey et dossier legal Refus strict et alerte de securite.
ERR-81-17 Tentative de reutilisation post-destruction Refus strict, evenement de tentative de reutilisation.
ERR-81-18 Depassement du rate limiting (defaut 10 consultations/minute par legalReKeyId) Refus/temporisation selon politique contractuelle, evenement d'abus. [CORRECTION v2]

7. Modele de donnees

Les entites ci-dessous sont contractuelles. Les types concrets et la persistance sont hors implementation, mais les champs marques "obligatoire" DOIVENT exister.

7.1 Entite LegalMandate

  • mandateId (obligatoire, unique)
  • issuerIdentity (obligatoire, identite juridique emettrice)
  • issuerRole (obligatoire, ex: juge/magistrat)
  • signatureProfile (obligatoire, qualification eIDAS)
  • certificateChainRef (obligatoire)
  • revocationStatus (obligatoire)
  • validFrom (obligatoire)
  • validUntil (obligatoire)
  • scopeDocumentIds[] (obligatoire, non vide)
  • mandateHashSha3 (obligatoire)
  • receivedAt (obligatoire)
  • validationStatus (obligatoire: VALID/INVALID)

7.2 Entite LegalValidationCase

  • legalCaseId (obligatoire, unique)
  • mandateId (obligatoire, reference)
  • contextId (obligatoire, LEGAL_PRE_MANDATE)
  • state (obligatoire: etats PD-82 adaptes)
  • validationTtl (obligatoire, defaut 7 jours calendaires, configurable [1 heure..30 jours]) [CORRECTION v2]
  • validator1Identity (obligatoire si validation 1 faite)
  • validator1Role (obligatoire si validation 1 faite: DPO)
  • validator1Signature (obligatoire si validation 1 faite)
  • validator1At (obligatoire si validation 1 faite)
  • validator2Identity (obligatoire si validation 2 faite)
  • validator2Role (obligatoire si validation 2 faite: LegalOfficer)
  • validator2Signature (obligatoire si validation 2 faite)
  • validator2At (obligatoire si validation 2 faite)

7.3 Entite LegalReKey

  • legalReKeyId (obligatoire, unique)
  • mandateId (obligatoire)
  • legalCaseId (obligatoire)
  • isLegal (obligatoire, valeur vraie)
  • contextId (obligatoire)
  • scopeDocumentIds[] (obligatoire, identique au mandat)
  • ttlSeconds (obligatoire, <= borne contractuelle)
  • destructionDeadline (obligatoire, defaut 3600 secondes, configurable [60..86400]) [CORRECTION v3]
  • issuedAt (obligatoire)
  • expiresAt (obligatoire)
  • status (obligatoire: ACTIVE/REVOKED/EXPIRED/COMPLETED/DESTROYED) [CORRECTION v2]
  • storageDomain (obligatoire, valeur legale isolee)

Transitions contractuelles LegalReKey.status (cycle de vie): [CORRECTION v2] | Etat source | Declencheur | Etat cible | Contrainte | |---|---|---|---| | ACTIVE | revokeReKey() valide | REVOKED | Invalidation immediate (<= 5s). | | ACTIVE | Echeance expiresAt atteinte | EXPIRED | Refus de consultation post-TTL. | | ACTIVE | closeLegalAccess avec END_OF_CONSULTATION | COMPLETED | Cloture normale de consultation. | | REVOKED | Procedure de destruction cryptographique | DESTROYED | Suppression physique/zeroisation de l'artefact obligatoire, dans un delai maximal de destructionDeadline (defaut 1h). [CORRECTION v3] | | EXPIRED | Procedure de destruction cryptographique | DESTROYED | Suppression physique/zeroisation de l'artefact obligatoire, dans un delai maximal de destructionDeadline (defaut 1h). [CORRECTION v3] | | COMPLETED | Procedure de destruction cryptographique | DESTROYED | Suppression physique/zeroisation de l'artefact obligatoire, dans un delai maximal de destructionDeadline (defaut 1h). [CORRECTION v3] |

7.4 Entite LegalAccessEvent

  • eventId (obligatoire, unique)
  • eventType (obligatoire; probatoire si dans {MANDATE_QUALIFIED, VALIDATION_SUBMITTED, VALIDATION_ACTIVATED, LEGAL_ACCESS_ACTIVATED, LEGAL_DOCUMENT_ACCESSED, LEGAL_ACCESS_CLOSED, LEGAL_REKEY_REVOKED, LEGAL_REKEY_DESTROYED}, informatif sinon) [CORRECTION v2]
  • mandateId (obligatoire)
  • legalCaseId (obligatoire)
  • legalReKeyId (optionnel selon evenement)
  • actorIdentity (obligatoire)
  • actorRole (obligatoire)
  • eventAt (obligatoire)
  • eventPayloadHashSha3 (obligatoire)
  • hsmSignature (obligatoire)
  • tsaTokenRef (obligatoire pour evenement probatoire)
  • merkleLeafRef (obligatoire)
  • anchoringBatchRef (obligatoire des que ancre)

7.5 Entite LegalCompositeProof

  • proofId (obligatoire, unique)
  • mandateId (obligatoire)
  • proofVersion (obligatoire)
  • mandateEvidenceRef (obligatoire)
  • doubleValidationEvidenceRef (obligatoire)
  • rekeyLifecycleEvidenceRef (obligatoire)
  • auditLogEvidenceRef (obligatoire)
  • anchoringEvidenceRef (obligatoire)
  • generatedAt (obligatoire)
  • verificationMaterial (obligatoire, suffisant pour verification hors plateforme)

8. Criteres d'acceptation

ID Critere Testable
AC-81-01 Un mandat eIDAS valide est accepte uniquement si signature, chaine, temporalite et revocation sont valides via TSP reel. Oui
AC-81-02 Un mandat invalide (signature/chaine/CRL/OCSP) est rejete en fail-closed sans ReKey emise. Oui
AC-81-03 Sans double validation 2-of-2 adaptee (DPO + LegalOfficer), aucun passage a ACTIVATED n'est possible. Oui
AC-81-04 Avec double validation conforme dans le TTL de validation, le dossier atteint ACTIVATED. Oui
AC-81-05 generateLegalReKey() ne reussit que sur dossier ACTIVATED et genere une ReKey marquee isLegal=true avec mandateId. Oui
AC-81-06 Le TTL d'une ReKey legale superieur a 30 jours est refuse. Oui
AC-81-07 Toute tentative de consultation hors scopeDocumentIds est refusee et journalisee. Oui
AC-81-08 Toute tentative d'ecriture/suppression en mode legal est refusee. Oui
AC-81-09 A expiration TTL, la ReKey devient inutilisable et son statut passe a EXPIRED, puis DESTROYED apres destruction cryptographique. Oui [CORRECTION v2]
AC-81-10 revokeReKey() invalide immediatement la ReKey et interdit toute consultation ulterieure. Oui
AC-81-11 Chaque evenement probatoire obligatoire porte hash SHA3-256, signature HSM, horodatage TSA et reference d'ancrage. Oui
AC-81-12 Une preuve composite est generable pour chaque dossier finalise et verifiable hors plateforme. Oui
AC-81-13 Les ReKey legales sont stockees dans un domaine isole des ReKey standard. Oui
AC-81-14 L'utilisateur titulaire peut obtenir les artefacts d'audit a posteriori. Oui
AC-81-15 Conformite substantielle RGPD (proportionnalite/minimisation) sur la base d'une analyse juridique contextuelle. Non - hors perimetre (evaluation juridique externe)
AC-81-16 Opposabilite judiciaire effective en contentieux reel. Non - hors perimetre (decision juridictionnelle)

9. Interfaces

Les interfaces ci-dessous sont contractuelles. Les signatures sont definies au niveau service; aucun detail d'implementation n'est prescrit.

9.1 Orchestrateur PD-81

registerLegalMandate(input) -> LegalMandateResult

Pre-conditions: - input.mandatePayload present. - input.contextId present et egal a LEGAL_PRE_MANDATE.

Post-conditions: - Si validation eIDAS reussie: mandat enregistre avec validationStatus=VALID et dossier de validation cree (PENDING_BOTH). - Sinon: rejet explicite, aucun dossier activable.

submitInternalValidation(input) -> ValidationStateResult

Pre-conditions: - input.legalCaseId existant. - input.validatorRole dans {DPO, LegalOfficer}. - input.validatorIdentity juridique verifiable.

Post-conditions: - Transition d'etat conforme aux regles PD-82 adaptees. - Aucune activation si validations insuffisantes/non conformes.

activateLegalAccess(input) -> LegalAccessActivationResult

Pre-conditions: - Dossier en etat ACTIVATED (PD-82 adapte). - Mandat toujours valide temporellement. - Scope documentaire non vide.

Post-conditions: - Creation d'une ReKey legale via PD-41 etat ACTIVE. - L'appel orchestre en interne generateLegalReKey(...); aucun second appel API externe n'est requis pour le meme dossier. [CORRECTION v2] - Aucune activation hors des bornes mandat/TTL.

closeLegalAccess(input) -> LegalAccessClosureResult

Pre-conditions: - input.legalReKeyId connu. - Cause de cloture explicite (REVOKE, EXPIRE, END_OF_CONSULTATION).

Post-conditions: - ReKey non reutilisable. - Statut de cloture pose (REVOKED/EXPIRED/COMPLETED) puis transition DESTROYED apres destruction cryptographique verifiable. [CORRECTION v2] - Evenements probatoires de cloture produits.

getLegalAuditProof(input) -> LegalCompositeProof

Pre-conditions: - input.mandateId ou input.legalCaseId present. - Demandeur autorise a auditer, c.-a-d. titulaire (ownerUserId du coffre cible) ou role explicitement delegue dans IAM. [CORRECTION v2]

Post-conditions: - Retour d'une preuve composite coherente ou erreur explicite si dossier incomplet/non autorise.

generateLegalReKey(alicePublicKey, bobPublicKey, contextId, legalConstraints) -> LegalReKey

Pre-conditions: - contextId=LEGAL_PRE_MANDATE. - legalConstraints.mandateId present. - legalConstraints.isLegal=true. - legalConstraints.ttl <= borne dure contractuelle. - legalConstraints.scopeDocumentIds non vide. - bobPublicKey est fournie par le mandat eIDAS (ou annexe signee referencee) et associee a l'autorite judiciaire consultante (Bob). [CORRECTION v2] - L'authenticite de bobPublicKey est verifiee par TSP (signature/chaine/CRL/OCSP) puis par rapprochement IAM de l'identite judiciaire autorisee. [CORRECTION v2]

Post-conditions: - ReKey legale versionnee et validee par validate(). - ReKey stockee dans domaine legal isole.

revokeReKey(legalReKeyId, reason, actorIdentity) -> RevocationResult

Pre-conditions: - legalReKeyId existant et non terminal.

Post-conditions: - ReKey invalidee immediatement. - Evenement probatoire de revocation emis.

getLegalAccessStatus(legalReKeyId) -> LegalAccessStatus

Pre-conditions: - legalReKeyId present.

Post-conditions: - Retour d'un statut unique parmi ACTIVE, REVOKED, EXPIRED, COMPLETED, DESTROYED, UNKNOWN. [CORRECTION v2]

10. Contraintes non fonctionnelles

10.1 Securite et conformite

  • Mode fail-closed obligatoire sur tout composant de confiance indisponible ou incoherent (TSP, HSM, TSA).
  • Isolation stricte des donnees et artefacts legal PRE vs PRE standard.
  • Aucune exposition de secret cryptographique en logs/audit.
  • Respect du principe de minimisation: seules donnees necessaires au mandat et a la preuve sont traitees.
  • Compatibilite visee eIDAS 2.0, RGPD, NF Z42-013/ISO 14641, art. 1366 Code civil.
  • Verification juridique finale de conformite normative: hors perimetre technique testable.

10.2 Performance et disponibilite

  • Le module doit maintenir la coherence des etats sous concurrence et garantir l'atomicite probatoire des transitions critiques.
  • Le systeme doit supporter des consultations legales limitees par rate limiting contractuel sans degradation compromettant la preuve.
  • Les objectifs chiffres de latence et debit ne sont pas fournis: information manquante a contractualiser.
  • L'invalidation dite "immediate" d'une ReKey (revokeReKey/closeLegalAccess) doit etre effective dans la meme transaction ou en <= 5 secondes. [CORRECTION v2]
  • Pendant la fenetre d'invalidation (jusqu'a 5 secondes), les consultations en cours peuvent aboutir ; toute consultation initiee apres la confirmation de la revocation DOIT etre refusee. [CORRECTION v3]
  • La destruction effective (etat DESTROYED) doit intervenir dans un delai maximal de destructionDeadline (defaut 1 heure) apres l'entree dans un etat terminal. [CORRECTION v3]

10.3 Volumetrie et retention

  • Le module doit supporter un historique append-only complet de tous evenements legal PRE.
  • Retention des journaux et preuves composites: information manquante a contractualiser.
  • Frequence et capacite des batchs d'ancrage: cadence periodique avec delai maximal d'ancrage de 24 heures. [CORRECTION v2]

10.4 Observabilite probatoire

  • Chaque etape critique doit etre correlable de bout en bout (mandateId, legalCaseId, legalReKeyId).
  • Toute rupture de chaine probatoire doit etre detectee et faire echouer l'operation concernee.

10.5 Robustesse operationnelle

  • Toute commande de destruction/revocation doit etre idempotente.
  • Toute tentative de reutilisation d'un artefact legal terminal doit echouer explicitement.
  • Les transitions d'etat doivent etre deterministes et auditablement reproductibles.