Bonjour,
Vous trouverez ci-après une proposition technique de sécurisation du QR code afin que ce dernier soit authentifiable dans une optique de minimisation des travaux.
Nldr : Je pars du principe que vous servez une simple page HTML que vous n'avez pas forcément de backend implémenté.
[ Propositions techniques ]
Afin de rendre le QR-code authentifiable par les FSI, : Il s'agit d'inclure un élément "authentifiable" dans le QR code ou dans le formulaire puis de le protéger contre la forge et le rejeux.
[ Utilisateur ]
[Front]
0_ Préalablement à la génération d'une attestation, un dispositif de type captcha est mise en place. La résolution du captcha doit être bloquante dans le processus de génération de l'attestation.
1_ Lors de la génération de l'attestation, le client émet une REQUEST de type GET vers une API "/token" du ministère. Le token ainsi crée est une variable inclue dans le pdf/QR code lors de la génération de l'attestation.
[Back]
0_ L'API de génération de token dispose d'une protection CSRF-CORS, et n'accepte de requêtes ne provenant que du domaine de l'application.
1_ Le token est un timestamp signé par une clef privée propre à l'API. Selon
const PrivateKey = require ('./privatekey')
var stamp = new.Date()
var signed = crypto_function(PrivateKey, stamp)
stamproute.get('/token', function(req,res){
res.json({"stamp":stamp, "signed":signed});
});
2_ La clef publique est mise à disposition sur ce répertoire, intégré à l'application des FSI, et mise à disposition via l'api sous la forme d'une requête GET /verif?jeton={jeton}. Selon
const PublicKey= publickey
stamproute.get('/verif', function(req,res){
param = req.parem
var verif = false
verif = crypto_function(Publickey,token)
if ( verif == true ){
res.status(200)
res.json({"verif":true})
return
}
res.json({"verif":verif})
});
[ FSI ]
1_ Lors de la lecture du QR code, je dispose soit de la clef public dans mon application, soit une requête est envoyée afin de vérifier l'authenticité du jeton.
///
Nous avons donc une sécurisation légère de la provenance de l'application sans traitement de données personnels.
ps : Si possible il faudrait que les champs du formulaire soient identifiés selon une source aléatoire depuis le navigateur pour éviter la génération automatique depuis un script "chromium" par exemple.