Authentification à Zéro Connaissance & Biométrie

Dans cette article nous étudions quelques bonnes caractéristiques que devrait avoir un système d’authentification basé sur des données biométriques.

Partager un secret

Très souvent l’authentification repose sur le partage d’un secret connu par l’accédant et du système qui le protège : l’accédé.
Le système classique basé sur le mot de passe suppose que celui qui accède (accédant) et celui qui vérifie l’accès (accédé), connaissent le mot de passe. Fondamentalement, le système est anonyme, je suis alors identifié comme étant le porteur du secret. Le secret ne me caractérise pas. Le fait de posséder la clé d’une serrure ne prouve pas que je suis légitime à ouvrir la porte.

Identifier / authentifier

Il se pose alors le problème de l’identification. Le facteur biométrique retenu sera-t’il le secret ou le moyen d’identification ?
Par exemple un système d’accès reposant sur l’empreinte palmaire doit disposer d’un clavier, pour que l’accédant donne son code d’identification en même temps qu’il partage les dimensions de sa main. Mais finalement qu’est-ce qui est secret : la main ou le code ? La donnée biométrique est-elle le secret ou l’identification ?

Dans les deux cas c’est une information privée qu’il faut partager avec un tiers, ce qui n’est pas souhaitable pour une donnée biométrique.

Keep the Secret secret

Comment faire dans ce cas pour que l’accédant puisse déposer un secret chez l’accédé sans que ce dernier ne le connaissance, mais qu’il puisse tout de même faire confiance à l’accédant sur la base de cette information ? Pas facile 😉

C’est là qu’intervient le ZKIP (Zero Knowledge Interactive Proof) ou Preuve à divulgation nulle. Mais comment cela fonctionne ?

Prenons un exemple:

Admettons que je dépose un mot de passe chez l’accédé fait de chiffres et de lettres et que ce dernier ne connaisse uniquement les positions des lettres et des chiffres mais pas leur valeur. Cette myopie ne lui permet pas de voir la totalité du secret. Par contre, il peut proposer à l’accédant des challenges du type:

  • A la position X qu’est-ce qui se trouve ? Sous entendu une lettre ou un chiffre.

L’accédant peut alors lui répondre car il connaît le secret. Si ce dernier n’est pas en possession du secret, il finira par faire des erreurs permettant à l’accédé de détecter une tentative d’intrusion. La preuve est donc obtenue de manière statistique. Le secret doit avoir une entropie suffisante pour garantir un calcul efficient de la preuve.

Dans le secret d’un coffre-fort

Revenons à notre problème de biométrie. Admettons qu’il existe des caractéristiques uniques et stables comme la longueur du nez, l’écart entre les yeux, la taille d’une phalange…etc. Toutes ces longueurs et dimensions doivent être captées d’une manière simple et chiffrée avec un algorithme de type homomorphe.

Qu’est ce que cette dernière invention ! C’est simple avec ce type de chiffrement vous pouvez appliquer une opération simple sur la partie chiffrée, sans pour autant avoir besoin de déchiffrer et chiffrer de nouveau. Par exemple RSA est homomorphe à la multiplication:

La formule de chiffrement de RSA pour un nombre x: ϵ(x)=x^e mod m 
si on multiplie deux messages chiffrés on obtient:
 ϵ(x1)*ϵ(x2)
 =(x1^e mod m) * (x2^e mod m) 
 =(x1^e * x2^e)mod m
 =(x1*x2)^e mod m
 =ϵ(x1*x2)
cqfd le produit des nombres chiffrés est égal au chiffre du produit des nombres

Comment mettons nous cela en pratique afin d’avoir une authentification sur des données biométriques sans les communiquer et tout en leur faisant confiance ?

C’est assez simple : je chiffre toute mes données avec RSA et remet le tout, plus la clé publique, à l’accédé. Quand, en tant qu’accédant, je sollicite un accès, le système me propose des challenges en multipliant une de mes dimensions biométriques par un facteur chiffré avec ma clé publique. Pour retrouver ce facteur, je déchiffre le nombre transmis avec ma clé privée, et par une simple division entre la valeur initiale et celle générée, je répondrai au challenge.

action opération
Accédé chiffre un facteur f et le multiplie avec une données biométrique chiffrée d1
d1 * ϵ(f) avec d1 = ϵ(x1)
Accédant déchiffre le challenge et trouve une valeur x
x = x1 * f
Accédant calcule le facteur depuis ma valeur de la dimension et le retourne à l’accédé
x / x1 = f

Pour renforcer ce système je pourrais utiliser autant de clés RSA que d’accédés et aussi appliquer un salage sur les valeurs de mes dimensions biométriques.

Ne vous précipitez pas pour mettre un brevet sur cette méthode, elle est très imparfaite ;-).

  • En premier vous pouvez par essai / erreur retrouver toutes les dimensions biométriques en chiffrant les valeurs et en comparant avec le dépôt (d’où le salage mais alors mes dimensions sont altérés);
  • En second il faut que les dimensions ne puissent pas être déduites d’une simple photo, car ce n’est plus un secret dans ce cas.

Donc pour résumer, il faut:

  • Un relevé de dimensions biométriques secrètes
  • Un chiffrement homomorphe riche et robuste
  • Un protocole de challenge sur les dimensions biométriques


Stéphane
Architecte Sécurité

  • Google Plus
  • LinkedIn
  • Viadeo