Horodatage
Présentation du fonctionnement de l'horodatage
Afin de prouver l'intégrité des dossiers, chaque jour, demarches-simplifiees.fr fait une photo de tous les dossiers modifiés. On envoie ensuite l'empreinte de cette photo a un tiers de confiance qualifié qui nous renvoie un jeton d'horodatage déclarant :
« Moi, Tiers de Confiance, je certifie que demarches-simplifiees.fr m'a envoyé cette empreinte à cette date ».
Le jeton d'horodatage est inaltérable et son auteur peut être identifié. On est donc sûr que l'empreinte de la photo a bien été signée à telle date.
Si on veut vérifier qu'un dossier n'a pas été altéré depuis son traitement :
- on prend la prend la photo qui correspond à la dernière modification du dossier
- on s'assure que le dossier n'a pas changé depuis cette photo
- finalement on vérifie l'intégrité de la photo en calculant son empreinte et en la comparant à l'empreinte enregistré dans le jeton d'horodatage
Voir https://fr.wikipedia.org/wiki/Fonction_de_hachage. En simplifié c'est une opération mathématique qui à partir d'un fichier fournit toujours le même grand nombre (empreinte) de sorte que :
- pour 2 fichiers différents il y a toujours 2 empreintes différentes
- il n'est pas possible de reconstruire le fichier à partir de son empreinte
À chaque changement d'état du dossier, demarches-simplifiees.fr crée un fichier contenant
- le numéro de dossier
- la date
- l'action
- la valeur des champs du dossier
procedure-xxx/dossier-yyy/horodatage/operation-zzz-date.json
{
"operation": "accepter",
"dossier_id": 1017534,
"author": {
"id": "Instructeur#741",
"email": "[email protected]"
},
"subject": {
"id": "RG9zc2llci0xMDE3NTM0",
"number": 1017534,
"archived": false,
"state": "accepte",
"dateDerniereModification": "2021-06-11T15:50:52+02:00",
"datePassageEnConstruction": "2019-10-28T10:07:04+01:00",
"datePassageEnInstruction": "2019-10-28T10:08:10+01:00",
"dateTraitement": "2021-06-11T15:50:52+02:00",
"instructeurs": [
{
"email": "[email protected]"
}
],
"groupeInstructeur": {
"label": "défaut"
},
"champs": [
{
"id": "Q2hhbXAtNDA5MDA=",
"label": "un premier champ",
"stringValue": ""
}
],
"annotations": [],
"avis": [],
"demandeur": {
"civilite": "M",
"nom": "Nom",
"prenom": "Prénom",
"dateDeNaissance": "2019-10-22"
},
"motivation": "",
"motivationAttachment": null,
"revision": {
"id": "UHJvY2VkdXJlUmV2aXNpb24tMTMzOA=="
}
},
"automatic_operation": false,
"executed_at": "2021-06-11T15:50:52+02:00"
}
L'empreinte de ce fichier est
b193534bd4e8f2f32841e6010286ed98be6dc8e24f89dbd7fae0d5e4496cbcc2
Toute les nuits, demarches-simplifiees.fr crée un fichier avec toutes les empreintes des opérations de la journée. Il se présente sous le nom demarches-simplifiees-operations-date.json
procedure-xxx/bills/horodatage/demarches-simplifiees-operations-date.json
{
"1296796": "b193534bd4e8f2f32841e6010286ed98be6dc8e24f89dbd7fae0d5e4496cbcc2",
"1283268": "8718c89dcf5eff30099b40b8b144c2b3efb51156e9e4263645250723d78cb6ae"
...
}
On retrouve ici l'empreinte de notre opération.
demarches-simplifiees.fr fait horodater ce fichier par un service d'horodatage qualifié par l'ANSSI. Le jeton d'horodatage retourné est présent ici :
procedure-xxx/bills/horodatage/demarches-simplifiees-signature-date.der
Pour un dossier donné :
- vérifier visuellement la cohérence entre la version pdf et le dernier fichier opération de dossier
- puis lancer le script suivant pour vérifier l'horodatage du fichier
command.sh dossier/horodatage/operation
#! /bin/bash
set -o errexit
set -o pipefail
set -o nounset
if [ $# -eq 0 ]
then
echo "usage: ./command.sh operation_file"
exit 1
fi
OPERATION_FILE="${1:-}"
echo -e "\nChecking $OPERATION_FILE\n"
HASH=$(sha256sum $OPERATION_FILE | cut -d ' ' -f1)
echo "HASH: $HASH"
# find matching files
BILL=$(grep -l $HASH bills/horodatage/*)
echo "Bill: $BILL"
DATE=$(echo $BILL| sed 's/.*demarches-simplifiees-operations-//' | sed 's/-.....json//')
TOKEN=$(find . -iname "*signature*$DATE*")
echo -e "Token: $TOKEN\n"
# retrieve provider certificates
mkdir -p store
cd store
## Certigna
curl -sLO http://autorite.certigna.fr/ACcertigna.crt
curl -sLO http://autorite.certigna.fr/entityca.crt
## Universign
curl -sLO https://www.universign.com/documents/certificates/root-ca.pem
curl -sLO https://www.universign.com/documents/certificates/tsa-root-2019.pem
curl -sLO https://www.universign.com/documents/certificates/tsa-root-2015.pem
cd ../
# final verification
openssl ts -verify -CAfile <(cat store/*) -data $BILL -in $TOKEN -token_in
Certains horodatages émis par Universign ne sont pas compatibles avec openssl,
rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding
Ils doivent les vérifier eux-même en attendant de mettre à disposition une API. Contactez nous si besoin.Astuce pour inspecter le contenu d'un jeton :
openssl asn1parse -in token -inform der
Dernière mise à jour 3mo ago