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 |
Legal Hold¶
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 | ✅ |