Aller au contenu

Preuves d'immutabilité WORM

Objectif

Garantir l'immutabilité des documents certifiés pendant leur période de rétention légale.

Mécanismes de protection

S3 Object Lock

Configuration WORM sur les buckets S3 :

resource "aws_s3_bucket" "documents" {
  bucket = "probatiovault-documents"

  object_lock_configuration {
    object_lock_enabled = "Enabled"
  }
}

resource "aws_s3_bucket_object_lock_configuration" "documents" {
  bucket = aws_s3_bucket.documents.id

  rule {
    default_retention {
      mode = "GOVERNANCE"  # ou COMPLIANCE pour rétention stricte
      days = 3650          # 10 ans
    }
  }
}

Modes de rétention

Mode Suppression Modification Usage
GOVERNANCE Admin avec permission Impossible Documents standard
COMPLIANCE Impossible Impossible Documents légaux

Verrouillage supplémentaire pour litiges :

aws s3api put-object-legal-hold \
  --bucket probatiovault-documents \
  --key document-id \
  --legal-hold Status=ON

Preuves d'intégrité

Hash SHA3-256

Chaque document est identifié par son hash unique : - Calculé côté client avant upload - Stocké en base de données - Vérifié à chaque accès

Signature horodatée

Preuve composite pour chaque document :

{
  "hash": "a7b9c3d4e5f6...",
  "algorithm": "SHA3-256",
  "signature": {
    "value": "base64...",
    "algorithm": "RSA-PSS-4096",
    "keyId": "hsm-key-001"
  },
  "timestamp": {
    "value": "base64...",
    "authority": "tsa.example.com",
    "datetime": "2024-01-15T10:30:00Z"
  }
}

Audit Trail

Événements tracés

Événement Données Rétention
Upload user_id, doc_id, hash, timestamp Permanent
Access user_id, doc_id, timestamp 5 ans
Share user_id, doc_id, recipient_id Permanent
Certification doc_id, signature, timestamp Permanent

Logs immutables

Logs d'audit stockés séparément avec leur propre protection WORM : - Bucket S3 dédié - Object Lock COMPLIANCE - Pas de suppression possible

Vérification

Vérification intégrité

# Télécharger document chiffré
aws s3 cp s3://bucket/doc-id ./doc.enc

# Déchiffrer (côté client)
decrypt(doc.enc, K_doc)  doc.clear

# Vérifier hash
sha3-256(doc.clear) == stored_hash

Vérification rétention

# Vérifier Object Lock
aws s3api get-object-retention \
  --bucket probatiovault-documents \
  --key document-id

# Résultat attendu
{
  "Retention": {
    "Mode": "GOVERNANCE",
    "RetainUntilDate": "2034-01-15T00:00:00Z"
  }
}

Conformité

Exigence Mécanisme Statut
Immutabilité S3 Object Lock
Intégrité SHA3-256 + signature
Horodatage TSA qualifié
Auditabilité Logs WORM
Rétention légale Object Lock + Legal Hold