# Verifiable Identity-based Encryption

Verifiable Identity-based Encryption (VIBE) est un chiffrement basé sur l'identité développé et breveté (aux États Unis, en Europe et en Chine) par la société VIBE Cybersecurity International LLC. Ce chiffrement est une version améliorée de celui de Boneh et Franklin, qui utilise une application bilinéaire nommée optimal ATE pairing agissant sur des courbes elliptiques. Ce type d'application a été analysé par l'organisme de standardisation américain NIST.
L'algorithme de VIBE (décrit dans le brevet) permet de vérifier rapidement la cohérence entre les paramètres publics et une clé secrète, augmentant la confiance entre les utilisateurs et les administrateurs du système. De plus, VIBE permet une authentification de l'envoyeur du message pour un coût de communication négligeable.
VIBE en particulier a été analysé par le maitre de conférences de l'Université de Limoges Olivier Blazy. Ce dernier y rédige sa propre preuve de sécurité, il explique aussi que le schéma VIBE possède des avantages indéniables : il est prouvé sûr, les chiffrés sont courts, le nombre de calculs lourds est réduit et la propriété intrinsèque de vérifiabilité augmente la confiance envers tous les acteurs du système.

## Description du protocole
### Setup

L'administrateur des clés du système (appelé Trusted Centre TC d'identité ${\textsf {Id}}_{TC}$), choisi une application bilinéaire et trois groupes sur une courbe elliptique compatible avec cette application (respectivement $e,{\mathcal {G}}_{1},{\mathcal {G}}_{2},{\mathcal {G}}_{T}$). Il choisit ensuite aléatoirement un entier $s\in {\mathcal {Z}}_{p}^{*}$ et fixe sa clé maître secrète: ${\textsf {msk}}=s$ ($p$ étant le cardinal du plus petit groupe choisi sur la courbe: ${\mathcal {G}}_{1}$).
4 fonctions de hachage sont choisies en vérifiant les conditions suivantes :
* ${\mathcal {H}}_{1}$ (respectivement ${\mathcal {H}}_{2}$) prend en entrée une chaîne binaire de taille arbitraire et retourne un élément du groupe ${\mathcal {G}}_{1}$ (respectivement ${\mathcal {G}}_{2}$).
* ${\mathcal {H}}_{3}$ prend en entrée une chaîne binaire de taille arbitraire et retourne un élément de ${\mathcal {Z}}_{p}^{*}$.
* ${\mathcal {H}}'$ prend en entrée un élément de ${\mathcal {G}}_{T}$ et retourne une chaîne binaire (cette dernière fonction de hachage peut être implémentée par SHA3 par exemple).
L'élément publique $Pub$ est calculée comme suit :
* $Pub=s\cdot {\mathcal {H}}_{1}({\textsf {id}}_{TC})$
Les paramètres publics sont ensuite publiés : ${\textsf {mpk}}=({\mathcal {G}}_{1},{\mathcal {G}}_{2},{\mathcal {G}}_{T},{\mathcal {H}}_{1},{\mathcal {H}}_{2},{\mathcal {H}}_{3},{\mathcal {H}}',e,Pub)$

### Extraction

La clé publique d'un utilisateur est son identité ${\textsf {id}}$, sa clé privée est calculée comme suit :
${\textsf {usk}}[{\textsf {id}}]=({\textsf {usk}}[{\textsf {id}}]_{1},{\textsf {usk}}[{\textsf {id}}]_{2})=(s^{-1}\cdot {\mathcal {H}}_{1}({\textsf {id}}),s^{-1}\cdot {\mathcal {H}}_{2}({\textsf {id}}))$

### Vérification des Paramètres Publics

La vérification rapide de la cohérence entre les paramètres publics et une clé secrète se fait en vérifiant l'égalité suivante :
$e(Pub,{\mathsf {usk}}[{\mathsf {id}}]_{2})==e({\mathcal {H}}_{1}({\mathsf {id}}_{TC}),{\mathcal {H}}_{2}({\mathsf {id}}))$

### Chiffrement

Le message $M$ pour le receveur d'identité ${\mathsf {id}}_{R}$ est chiffré en ${\mathsf {C}}=(U,V,Y)$ par l'envoyeur d'identité ${\mathsf {id}}_{S}$ en calculant les valeurs suivantes :
$r\leftarrow {\mathcal {H}}_{3}(M)$
$U=M\oplus {\mathcal {H}}'(e({\mathcal {H}}_{1}({\mathsf {id}}_{TC}),{\mathcal {H}}_{2}({\mathsf {id}}_{R}))^{r})$
$V=r\cdot Pub$
$Y={\mathcal {H}}'(e({\mathcal {H}}_{1}({\mathsf {id}}_{R}),{\mathsf {usk}}[{\mathsf {id}}_{S}]_{2})^{r})$
$Y$ est la valeur qui sert au receveur à authentifier l'envoyeur du message.

### Déchiffrement

Le message chiffré ${\mathsf {C}}=(U,V,Y)$ est déchiffré en un message clair $M$ par le receveur en calculant :
$M=U\oplus {\mathcal {H}}'(e(V,{\mathsf {usk}}[{\mathsf {id}}_{R}]_{2}))$
$r\leftarrow {\mathcal {H}}_{3}(M)$
L'authentification se fait en vérifiant l'égalité suivante : $Y=={\mathcal {H}}'(e({\mathsf {usk}}[{\mathsf {id}}_{R}]_{1},{\mathcal {H}}_{2}({\mathsf {id}}_{S}))^{r})$

## Sécurité

La sécurité du chiffrement basé sur l'identité VIBE repose sur une hypothèse classique de sécurité cryptographique proche du Problème Calculatoire de Diffie-Hellman. Ce problème se situe dans un contexte asymétrique, ce qui améliore la rapidité des algorithmes et la taille des objets mathématiques à manipuler.