La problématique du "batch signing"
Dans le monde électronique actuel, il est difficile d'imaginer des transactions sécurisées où aucun adversaire ou attaquant ne vienne les perturber. Le scénario réaliste est le cas typique d'un message électronique envoyé entre un émetteur et un receveur. Ce message va passer par tout un tas de routeurs dont certains seront contrôlés par des personnes malintentionnées. Ces routeurs pourront potentiellement altérer le message en transit si ce dernier n'est pas protégé avec un mécanisme d'intégrité. Par exemple, si Alice envoie un message non-protégé à Bob lui donnant rendez-vous à 19h dans un café, alors Oscar peut simplement intercepter le message et changer l'heure du rendez-vous, empêchant ainsi les deux amis de se rencontrer.
Un des mécanismes les plus connus pour assurer l'intégrité d'un message est la signature électronique. Le blog du 8 mars 2016 de mon collègue Bert Vanhalst explique déjà les opportunités et obstacles de la signature électronique. La figure ci-dessous dépeint comment le schéma de signature fonctionne. Reprenons l'exemple d'Alice qui souhaite envoyer un message ("data" dans la figure ci-dessous) à Bob. Pour ce faire, Alice a tout d'abord besoin d'une paire de clés publique/privée et d'un certificat électronique contenant la clé publique d'Alice et attestant que la paire de clés d'Alice est authentique.
Alice signe son message de la façon suivante :
- Tout d'abord, elle applique une fonction de hachage à son message et obtient ainsi un hash du message.
- Ensuite, elle chiffre le hash avec sa clé clé privée (connue d'elle seule) et obtient la signature de son message.
- Enfin, elle attache la signature et son certificat au message, et envoie le tout (i.e. "digitally signed data" dans la figure ci-dessous) à Bob.
Lorsque Bob reçoit le "digitally signed data", il vérifie la signature de la façon suivante :
- D'un côté, il applique la fonction de hachage sur le message en clair d'Alice (i.e. "data"), et obtient un hash que nous nommeront H1.
- De l'autre côté, il vérifie la signature d'Alice en déchiffrant la signature avec la clé publique d'Alice (qui se trouve dans le certificat joint), et il recouvre le hash contenu dans la signature.
- Enfin, il vérifie si ce hash est égal à H1. Si tel est le cas, alors la signature est vérifiée, ce qui veut dire que le message original envoyé par Alice a gardé son intégrité.
Nous ne détaillerons pas dans ce blog ni les certificats électroniques, ni les fonctions de hachage. Pour plus d'information à ce sujet, le lecteur intéressé trouvera de plus amples informations ici pour les certificats électroniques et ici pour les fonctions de hachage.
En Belgique, tout citoyen a la possibilité de signer électroniquement des messages ou documents grâce à sa carte d'identité électronique, ou eID. En effet, l'eID est une carte à puce qui intègre tous les standards technologiques de cryptographie à clé publique (i.e. Public-Key Infrastructure (PKI) en anglais). Chaque eID possède donc une paire de clés publique/privée et un certificat électronique qui identifie et authentifie de façon unique chaque citoyen.
Lorsqu'un citoyen souhaite signer un document, il rentre simplement son code PIN et la démarche expliquée dans la figure ci-dessus s'applique. S'il souhaite signer 100 documents (méthode appelée "signature en lot", ou "batch signing" en anglais), il doit taper 100 fois son code PIN. Ceci n'est clairement pas ergonomique. Malheureusement à l'heure actuelle, la seule autre solution facilitant le processus du citoyen est d'utiliser un logiciel qui met tout bonnement en cache le code PIN tapé et qui réutilise ce cache pour signer automatiquement les 100 documents. Ceci n'est clairement pas acceptable en terme de sécurité. En effet, l'utilisateur perd la maîtrise du code PIN, et plusieurs scénarios catastrophes sont imaginables. Par exemple, un logiciel malveillant pourrait s'en servir pour signer des documents autres que les 100 documents désignés par le citoyen. Ou bien le cache contenant le code PIN pourrait être volé et utilisé à mauvais escient. Il n'existe à l'heure actuelle aucun standard pour le batch signing où le citoyen ne doit rentrer qu'une seule fois son code PIN tout en en gardant sa maîtrise.