title: Chiffrement par attributs
text: # Chiffrement par attributs
  
  Le chiffrement par attributs (en anglais : attribute-based encryption ou ABE) est une primitive de chiffrement asymétrique dans lequel la clé de chiffrement d’un utilisateur dépend d’attributs qui lui sont propres, par exemple: sa position dans une entreprise ou sa nationalité. Dans ce type de chiffrement, le déchiffrement du message secret n’est possible que si les attributs de la clé du destinataire correspondent aux attributs du message chiffré. Le chiffrement par attributs permet la mise en place de contrôle d'accès à base de rôles.
  
  Le concept de chiffrement par attributs a été proposé la première fois par Amit Sahai et Brent Waters et plus tard repris par Vipul Goyal, Omkant Pandey, Amit Sahai et Brent Waters. Depuis 2007, plusieurs chercheurs ont proposé des schémas de chiffrement par attributs utilisant plusieurs autorités pour générer les clés privées des $utilisateurs^,^,^,^,^,.$
  
  ## Principes
  
  Le chiffrement par attributs est une généralisation des schémas de chiffrement asymétriques. Dans un schéma chiffrement asymétrique, un message est chiffré pour un destinataire particulier par le biais de sa clé publique.
  
  Dans le cas du chiffrement par attributs, l’identité du destinataire est vue comme un ensemble d’attributs. On peut envisager le chiffrement par attributs de deux manières : par politique d’accès sur le message chiffré ou politique d’accès sur la clé. Dans tous les cas, une nouvelle autorité est nécessaire pour générer les clés de déchiffrement, à l'aide d'une clé maîtresse, qui appartient soit à un tiers de confiance, soit à l'émetteur des messages chiffrés.
  
  ### Description
  
  La formalisation de Boneh, Sahai et Waters sera utilisée ici. Un chiffrement par attributs est la donnée de quatre algorithmes efficaces : (Initialiser, Dériver, Chiffrer, Déchiffrer), se comportant comme suit.
  
  * Initialiser, va prendre en entrée un paramètre de sécurité écrit en unaire et va délivrer une clé publique pk et une clé maîtresse msk.
  * Dériver, qui étant donné un ensemble d'attributs ${\mathcal {A}}$ et la clé maîtresse msk, va générer une clé secrète pour cet ensemble d'attributs ${\mathsf {sk}}_{\mathcal {A}}$
  * Chiffrer, qui partant d'un message M et d'une politique φ (par exemple une formule booléenne), va produire un chiffré $C_φ.$
  * Déchiffrer, qui à partir d'une clé secrète ${\mathsf {sk}}_{\mathcal {A}}$, et d'un message chiffré $C_φ$ sort ou bien un message, ou bien une erreur « ⊥ ».
  
  Associés à ces algorithmes, nous avons différentes notions de sécurité, la première étant celle d'un schéma de chiffrement classique, construite sur une notion d'indistinguabilité, qui traduit le fait qu'il est difficile de dériver un bit d'information sur le message initial, en faisant varier la puissance de l'attaquant.
  
  Le modèle décrit ci-dessus est à politique d'accès sur les messages chiffrés, puisque l'algorithme qui prend en compte la politique est Chiffrer et non Dériver, pour passer à un modèle pour une politique d'accès sur clés, Chiffrer prend désormais un ensemble d'attributs, et Dériver une politique d'accès. Finalement, Déchiffrer n'est censé renvoyer le message initial que si $\varphi ({\mathcal {A}})$ est vérifiée, cela reste inchangé.
  
  ### Politique d’accès sur le message chiffré
  
  La politique d’accès sur le message chiffré (en anglais : Ciphertext-policy attribute based encryption (CP-ABE)) consiste à définir une politique d’accès dans le message lui-même. Un utilisateur doit être capable de déchiffrer un message si les attributs associés à son identité correspondent à la politique d’accès définie pour le message. Cette politique d’accès est par exemple un ensemble de conjonctions, disjonctions d’attributs ou la règle de seuil qui se décrit comme « au moins $k$ attributs parmi $n$ » et est associé au message.
  
  **Exemple**
  
  Si l’ensemble des attributs est défini par : ${\mathcal {A}}\triangleq \{A,B,C,D\}$ , un message est envoyé avec la politique $(A\land C)\lor D$, un utilisateur qui possède l’attribut $D$ peut déchiffrer le message, alors qu’un utilisateur qui possède les attributs $\{A,B\}$ ne le peut pas.
  
  ### Politique d’accès sur la clé
  
  La politique d’accès sur la clé (en anglais : Key-policy attribute based encryption (KP-ABE)) est le pendant de la politique d’accès sur le message chiffré. Dans ce cas, la politique d’accès est directement lié à la clé secrète.
  
  **Exemple**
  
  En reprenant les notations précédentes, l’ensemble des attributs est défini par : ${\mathcal {A}}\triangleq \{A,B,C,D\}$, dans ce cas un utilisateur possède une clé avec la politique $(A\land C)\lor D$. Il est capable de déchiffrer un message chiffré avec les attributs $\{A,C\}$, mais pas avec les attributs $\{A,B\}$.
  
  ### Résistance aux collusions
  
  Un aspect essentiel de la sécurité du chiffrement par attributs est la résistance aux collusions, c'est-à-dire que des utilisateurs ne doivent pas être capable de mettre en commun leurs clés secrètes pour déchiffrer des messages qu’aucun d’entre eux n’est capable de déchiffrer seul. Par exemple, pour le message envoyé avec la politique $(A\land C)\lor D$, un utilisateur possédant l’attribut $A$ et un utilisateur possédant l’attribut $C$ ne peuvent pas mettre en commun leurs informations pour déchiffrer le message.
  
  ## Usage
  
  Le chiffrement par attributs est un mécanisme récent et n’est pas encore largement répandu, mais de nombreuses applications sont possibles. Il peut être utilisé pour le chiffrement des journaux systèmes : au lieu de chiffrer un message pour chaque destinataire, le message est chiffré avec certains attributs ce qui réduit la quantité de clés à utiliser.
  
  Le chiffrement par attributs est aussi utile dans un contexte pair-à-pair où il n’y a pas de serveur central pour gérer les politiques d’accès.
  
  ## Défis
  
  Les recherches actuelles autour du chiffrement par attribut s'axent autour de deux objectifs d'optimisation :
  
  * Améliorer l’efficacité, c'est-à-dire le temps et la mémoire nécessaires pour chiffrer/déchiffrer/déléguer. Les méthodes actuelles utilisant soit des couplages, soit des réseaux euclidiens, ne sont pas à l'heure actuelle aussi efficaces que les chiffrement sur les courbes elliptiques par exemple.
  * Améliorer l’expressivité, c'est-à-dire la classe de complexité des attributs. Informellement, il est plus difficile de réaliser (à efficacité équivalente) un chiffrement qui prend en compte une plus large diversité d'attributs possibles.
  * La révocation d'attributs, en effet, les privilèges des utilisateurs évoluent dans le temps, un utilisateur peut gagner des attributs et en perdre d'autres. La difficulté de mettre à jour les clés des utilisateurs est liée au fait qu'un même attribut peut être partagé par plusieurs utilisateurs en même temps, c'est difficile de le révoquer pour un utilisateur en particulier sans affecter les autres utilisateurs partageant ce même attribut. Plusieurs solutions sont proposées dans la $littérature^,^,^,.$
  