Le premier Smart Contract institutionnel au monde

En un clic, le gendarme diffuse sur internet la trace infalsifiable du document comptable qu'il vient d'éditer. Dans les secondes qui suivent, des milliers d'ordinateurs à travers le monde exécutent une même suite d'opérations élémentaires, vérifiant l'identité de l'auteur de la trace et validant la trace elle-même. Ces ordinateurs comparent entre eux le résultat obtenu et inscrivent la trace dans un registre dont ils gardent chacun une copie, protégée de toute tentative d'altérations malveillantes ou d'erreurs des autres membres du réseau.

Des mois plus tard, alors qu'il rend compte à l'organisme de contrôle de l'utilisation des fonds qui lui ont été confiés, ce même gendarme pointe vers la trace qui dort, inaltérable, dans le registre mille fois vérifié et dupliqué. Cette trace prouve indubitablement que la comptabilité qu'il présente est bien celle qu'il avait établie à l'époque. Toute comptabilité créative visant à masquer a posteriori une malversation ou une erreur lui est devenue impossible, il ne peut que présenter une comptabilité conforme à la trace.

Le coût de cette traçabilité infalsifiable et transparente ? Moins de trois dixièmes de centimes par enregistrement.

C'est grâce à un smart contract déployé en production ce vendredi 6 septembre 2019 sur la blockchain Tezos que le C3N, l'unité nationale de lutte contre la cybercriminalité de la Gendarmerie, peut désormais notariser les justification des dépenses effectuées dans le cadre d'une subvention fournie par Europol.

Cette preuve de concept ouvre la voie à un changement de paradigme comptable, à la fluidification de la réponse logistique aux besoins opérationnels et à d'autres applications de la blockchain (intégrité de la preuve numérique, chaîne de responsabilité, etc) aux enquêtes cyber.

Ce déploiement est à notre connaissance la première utilisation opérationnelle au monde d'un smart contract par une entité gouvernementale.

1 Révolution comptable, soulagement opérationnel

1.1 Le modèle actuel de l'autorisation préalable

Selon le modèle habituel, pour déclencher une dépense un gendarme doit formuler sa demande à travers un logiciel obsolète. Il doit ensuite faire valider sa demande, via ce logiciel obsolète, par toute la chaîne hiérarchique jusqu'à atteindre un militaire autorisé à autoriser sa demande. En pratique, un Colonel ou un Général, même pour des montants minimes.

Le service idoine va ensuite s'assurer que le fournisseur est référencé et gérer la séquence complexe habituelle: devis, bon de commande, livraison, facture, paiement. Du moins en théorie. En pratique le gendarme va devoir relancer plusieurs fois le service idoine et faire une partie du travail à sa place (typiquement transmettre le devis et les informations nécessaires au référencement et gérer les relations avec les fournisseurs, qui peuvent devenir houleuses en cas de retards de paiment, hélas trop fréquents).

Lorsque les montants dépassent un certain seuil, il faut alors faire intervenir le mécanisme des marchés publics, et tout espoir d'accomplir la moindre avancée opérationnelle est perdu pendant plusieurs mois.

BaseAchat_annotated.png

Figure 1: Exemple de besoin opérationnel non satisfait à cause du modèle d'autorisation préalable

1.2 Le nouveau modèle du contrôle a posteriori

Dans le nouveau modèle, on attribue aux gendarmes concernés selon leur grade et leur fonction les moyens d'accomplir leur mission, ou à défaut une part des moyens disponibles. Cette attribution a lieu sous la forme d'un moyen de paiement personnel, sécurisé et bloqué: les dépenses sont tracées, impossible de dépenser les sous du voisin, et impossible de dépasser le plafond de dépenses autorisées.

A chaque évènement de paiement, le gendarme rajoute une ligne au tableau des comptes et enregistre le ou les documents justifiant la dépense.

Le logiciel calcule alors une trace infalsifiable de ces modifications. Si ne fût-ce qu'un bit changeait, toute la trace serait modifiée. Lors du téléversement des modifications, cette trace est mise à jour dans le registre public et partagé. Toute l'opération, du choix du préstataire jusqu'à la diffusion de la trace, n'a pris que quelques minutes et n'a coûté que quelques centimes en frais de gestion et d'infrastructure.

Il est dès lors possible de contrôler les dépenses a posteriori. Un contrôle systématique, comme dans le modèle actuel, reste possible. Néanmoins, il n'est probablement pas souhaitable. Le contrôle d'un échantillon réduit mais représentatif est suffisant à la maîtrise des risques et au contrôle de la légitimité et de la conformité des dépenses.

Grâce à la subvention d'Europol, la dépense bloquée depuis 4 mois dans le processus normal d'approbation préalable est effectuée en quelques minutes, et sa justification inscrite dans le registre infalsifiable.

GitKraken_annotated.png

Figure 2: Dans le nouveau modèle, la comptabilité est mise à jour en quelques instants et la trace diffusée au public

2 Transparence et secret

La transparence est la pierre angulaire de la démocratie. Le Peuple doit pouvoir contrôler ou faire contrôler par ses représentants la dépense publique.

Cependant, le secret de l'enquête ne peut être violé. Que ce soit pour protéger l'enquête elle-même, ou la vie privée des citoyens qui en sont l'objet. Les activités opérationnelles des forces de sécurité ont besoin d'être protégées par le secret.

Comment conjuguer le besoin du secret avec la nécessité de la transparence ? Le smart-contract mis en place par le C3N ne diffuse que les traces de la comptabilité. Si les traces sont cryptographiquement liées au contenu de la compatibilité au point même que changer un seul chiffre change toute la trace, cela ne signifie pas qu'il est possible de remonter de la trace vers le contenu, bien au contraire.

Par exemple, à l'heure d'écriture de ces lignes, la dernière trace diffusée sur le smart contract est 7596a56e8e4bf7eae481b3f1e6f000d1ff0bf258. Impossible à quiconque de remonter sur le fichiers ayant généré cette trace. En revanche le public peut exiger, en temps utile, de voir les fichiers (et tout leur historique) dont la trace est 7596a56e8e4bf7eae481b3f1e6f000d1ff0bf258. Cette trace est la seule chose qui est publique, elle ne met donc pas en danger les activités opérationnelles du C3N, mais étant publique elle oblige le C3N à une rigueur parfaite dans la tenue des comptes, et à préparer la justification des dépenses, comme l'on est en droit de l'attendre de toute unité dépensant l'argent public.

3 La confiance dans le code

La permanence et l'intégrité des registres comptables habituels est garantie par la fiabilité de l'agent (souvent assermenté) qui les renseigne et les manipule.

Grâce à ce nouveau système, la confiance dans le registre ne dépend pas de comportements individuels par nature susceptibles aux erreurs (ou pire). Elle repose dans le fait que plusieurs milliers de machines, détenues par des agents n'ayant aucune raison de comploter ensemble pour falsifier le registre, dans un réseau ouvert à tous, vont toutes faire fonctionner le smart contract, et ne vont entériner la transaction que lorsque le consensus sur la bonne exécution du code est atteint. Le tout pour moins d'un centime d'euro ! C'est une nouvelle source d'erreur et de coût qu'on élimine.

Le smart contract a été codé de manière à maintenir une liste des personnes autorisées à diffuser une nouvelle trace ou à changer la liste des personnes autorisées. Il vérifie également que la personne qui diffuse une nouvelle trace connaît la trace actuelle. Toute transaction ne répondant pas à ces deux critères seront rejetées par le code.

Le code du smart contract est extrêmement simple, et donc facile à vérifier. Comme son exécution conforme est garantie par la multiplicité des acteurs du registre, le public peut avoir toute confiance dans le système et savoir que la trace stockée dans le registre est bien la dernière trace à jour diffusée par les enquêteurs du C3N.

4 Le choix de Tezos

Il existe de multiples blockchains: Bitcoin, Ethereum, Zcash, Monero, Tezos…

J'ai choisi Tezos pour ce projet pour des raisons techniques. La première, fondamentale, est qu'il faut que la blockchain soit en mesure d'interpréter un langage suffisamment complexe pour permettre l'écriture de smart contracts. Cela élimine par exemple le Bitcoin, dont le langage d'écriture des transactions ne permet que des opérations trop simple pour y coder une logique complexe. Il n'est pas "Turing-Complet".

Cette absence de complexité a des avantages certains, puisqu'elle permet d'avoir des garanties a priori sur toutes les transactions (comme par exemple donner la mémoire maximum qu'il faut pour les vérifier). Dès que l'on saute le pas de la Turing Completude, toutes ces garanties s'envolent et il devient impossible de dire, pour toutes les transactions en général, si l'on pourra les éxécuter sous certaines contraintes (de temps, de mémoire, etc.). C'est le Théorème de Rice.

Le deuxième candidat logique était donc Ethereum, dont le langage de transaction (Solidity) est Turing Complet. Malheureusement, le langage a été mal conçu et il est trop facile d'introduire des bugs dans les smart contracts.

Tezos corrige ces problèmes avec un langage "bas niveau", le Michelson. Ce langage est suffisamment complexe pour écrire des smart contracts, mais suffisamment simple et rigoureux pour qu'un smart contract puisse être analysé semi automatiquement par une machine. Cette analyse semi automatique (le système de types) élimine toute une classe de bugs qui pourrait se trouver dans le même contrat écrit en Solidity.

De plus, il est possible d'étudier mathématiquement le code d'un contrat particulier et de retrouver pour ce contrat précis les garanties que l'on a pour tous les contrats avec un langage non Turing complet. Cette preuve mathématique se fait à l'aide d'un assistant de preuve numérique, ce qui élimine beaucoup d'erreurs humaines.

Si Tezos et le Michelson se prêtent si bien à cette mécanique rigoureuse qui permet de contourner le Théorème de Rice, c'est parce que le code a été conçu par des ingénieurs et chercheurs dont une bonne partie est issue de la recherche française, à l'INRIA et à l'ENS, qui est à la pointe dans ce domaine depuis plusieurs décénnies avec des projets comme Coq et OCaml.

5 Implémentation pratique

Le code du smart contract et des scripts associés est disponible à l'adresse: https://gitlab.com/edouardklein/notarizedaccountability

Pour les lecteurs les plus techniques, l'explication de l'implémentation est la suivante: les enquêteurs poussent les fichiers de comptabilité dans un repo git, où le hook pre-receive se charge d'effectuer une transaction sur le smart contract, publiant ainsi le hash du dernier commit reçu. Un échec de la transaction entraîne un rejet du commit.

Le code du smart contract est reproduit ici:

# This contract will store the given string (a commit hash) and the list of addresses that are allowed to change the storage
# See test.sh for usage
parameter (pair (option %admin (list (address))) (pair (string %oldhash) (string %newhash)));
storage (pair (list %admin (address)) (string %hash));
code {
       # Flatten everything
       UNPPAPAIPAIR @newadmin @oldhash @newhash @storedadmin @storedhash;
       # Reorder and duplicate to oldhash storedhash storedadmin newadmin storedadmin newhash
       SWAP;
       DIIIP {SWAP}; DIIP {SWAP}; DIP {SWAP};
       DIIIP {SWAP}; DIIP {SWAP; DUP; DIP {SWAP}};
       ASSERT_CMPEQ;  # Only proceed if the sender knows of the latest hash
       # Compare all addresses in the admin list with the sender
       SENDER; SWAP;
       DIIP {PUSH @admin bool False};  # Push the answer in third position
       ITER {
              DIP {DUP};  # Duplicate the sender
              CMPEQ; # Compare with current list item
              SWAP; DIP {OR @admin};  # Or CMPEQ result with final answer so that any True value will remain
            };
       DROP;  # Drop the now useless sender
       ASSERT;  # Only proceed if the sender was in the admin list
       # Drop new admin if none, else drop old admin
       IF_NONE {} {DIP {DROP}};
       # Wrap up
       NIL operation;
       PAPAIR %op %admin %hash;
     };

6 Conclusion

Cette preuve de concept opérationnelle montre comment la blockchain peut amener plus de souplesse et de confiance dans le fonctionnement de l'administration, tout en réduisant les coûts. Pour les petites dépenses, elle ne présente aucun désavantage par rapport à la méthode actuelle et j'appelle à son application immédiate et généralisée. Il n'est peut-être pas souhaitable de détrôner immédiatement les marchés publics pour les grosses dépenses, bien que là aussi des smart contracts puissent aider à fluidifier les processus.

Author: Edouard Klein <edou -at- rdklein.fr>

Created: 2019-09-10 Tue 10:38

Validate