Recryptage par proxy et cryptage homomorphique

L’utilisation et la confidentialité des données sont souvent en conflit. Par exemple, si nous partagions tous ouvertement nos données sur la santé avec les chercheurs, cela accélérerait les travaux sur les nouvelles technologies et remèdes pour la santé. Mais nous avons à juste titre peur de ce qu’un acteur malveillant pourrait faire avec nos données brutes sur la santé. C’est là que le domaine de la cryptographie peut venir à la rescousse. Recryptage par proxy et cryptage homomorphe sont des outils qui nous permettront de garder notre gâteau et de le manger aussi, en ce qui concerne l’utilisation et la confidentialité des données.

Le rechiffrement par proxy permet à un propriétaire de données de crypter ses données une fois, puis de les partager en toute sécurité avec les acheteurs, aussi souvent qu’il le souhaite, en utilisant les services d’un tiers. Le cryptage homomorphe permet à un acheteur de données d’exécuter des calculs sur des données cryptées stockées et calculées par des tiers non approuvés, et d’obtenir des résultats ou des informations sur ces données, sans révéler les données d’un individu sous une forme non cryptée.

Ces techniques servent de blocs de construction à des systèmes cryptographiques plus complexes (par exemple Unlynx développé par l’EPFL, inspiration théorique de nos travaux actuels). Ainsi notre plan est le suivant 1) Créez des bibliothèques simples à utiliser et pratiques pour les primitives de cryptographie avancées 2) ces bibliothèques aideront les développeurs à créer et à combiner des primitives avancées pour créer des systèmes cryptographiques complexes qui permettront un partage de données plus sécurisé 3) Un partage de données plus sûr et plus utile permettra de multiplier par 10 la vitesse de la recherche sur des problèmes importants comme la recherche sur le cancer et le diabète 4) sauver le monde :-).

Pour commencer, nous avons développé une version alpha d’une preuve de concept bibliothèque . Le code ci-dessous utilise cette bibliothèque pour offrir un exemple de la façon dont nous appliquons ces technologies pour permettre un flux de données sécurisé et pratique des propriétaires aux utilisateurs.

Recryptage par proxy

Le rechiffrement par proxy est un processus dans lequel un tiers, appelé proxy, modifie un texte chiffré chiffré par une partie de manière à ce qu’il puisse être déchiffré par une seconde partie.

Sur la plate-forme de Nebula, le proxy agira en tant que dépositaire des données génomiques cryptées et gérera l’accès à ces données par les acheteurs au nom du propriétaire. Bien que le proxy ne puisse pas accéder aux données brutes sous-jacentes, le proxy est en mesure (avec l’autorisation du propriétaire) de modifier les données chiffrées afin que l’utilisateur puisse les déchiffrer ultérieurement. Le propriétaire des données est ainsi en mesure de déléguer cette tâche au proxy sans jamais partager d’informations en clair avec le proxy. Une autre conséquence de cette délégation est que ni le propriétaire ni le destinataire des données n’ont besoin d’être en ligne.

Dans notre exemple, supposons que le proxy est un ensemble de serveurs qui agit comme une autorité collective décentralisée. Voyons maintenant un exemple de recryptage par proxy où Alice, propriétaire de données, partage des données génomiques avec Bob, un utilisateur de données, via le proxy.

Commençons par installer la bibliothèque mentionnée ci-dessus.

Nous pouvons maintenant importer le package nebula.

Maintenant, parcourons le processus de partage. La première étape est pour Alice de crypter ses données. Nous allons générer une clé symétrique pour qu’elle soit utilisée par ChaCha20 + Poly1305 .

(<umbral.point.Point at 0x10389fe10>, b'\x10\x91Y\xb1*\x8c\xf0\x7f@=\xefx\xe9\xf6\x12\xf3W\xbd\xdel\xc4\x06{\xae\x05%\x1b\x89U\xf9eN\xe5e\x1a\xe71xn\xac@v\xf4')

Le proxy d’autorité collective a sa propre clé publique, qui est la somme des clés publiques de ses serveurs constituants.

Alice prend maintenant la clé de chiffrement qu’elle a utilisée sur ses données et la crypte avec la clé publique de l’autorité collective. Notez que puisque nous utilisons cryptographie à courbe elliptique les deux textes chiffrés qui Cryptage ElGamal produit sont des points sur la courbe elliptique choisie. Ce que vous voyez dans la sortie ci-dessous sont les coordonnées des deux points sous forme (x, y).

((35632791306511153190425382918654119432212363349182003014749353343128802126727, 64242079364444117954338938658093117507689717419524224721788857406414950009581), (97847103734799578346073884785318736156070617710068604497289838935308031857554, 100772267217308028038724925681024365362775942293927562577198462564518506731626))

Chaque serveur de l’autorité collective déchiffre partiellement, puis re-crypte la clé d’Alice pour Bob.

  1. Pour déchiffrer partiellement la clé d’Alice, chaque serveur utilise sa clé privée
  2. Pour rechiffrer partiellement la clé d’Alice pour Bob, chaque serveur utilise la clé publique de Bob
((77420738395268270953686214496801457604160876120513979866307802146750959593560, 54288930850798967899941066319180759019666461705141800680259295043110704970240), (43931260115404950504844368880031328989231014591201216806426924428987149667105, 90907867688890000833998990379245369153741769092073562236593684729778667077837))

Bob reçoit puis décrypte la clé d’Alice à l’aide de sa clé privée, puis utilise la clé d’Alice pour décrypter les données d’origine.

True
b'My genomic data'

Imaginez juste un génome complet ici au lieu de juste cette chaîne!

Cryptage homomorphe

Le cryptage ElGamal est additivement homomorphique , ce qui signifie que le résultat de la somme des textes chiffrés reflète le résultat qui serait obtenu en additionnant les textes en clair correspondants. Pour cette raison, si nous déchiffrons une somme chiffrée, le résultat sera la somme des textes en clair. Le cryptage homomorphe permet à une partie intéressée d’émettre une requête pour des informations agrégées et d’obtenir la réponse appropriée, mais sans voir les points de données sous-jacents. (Cela suppose que d’autres contraintes sont remplies, comme spécifié ici .)

Vous trouverez ci-dessous un exemple en trois étapes montrant comment notre autorité collective / mandataire pourrait répondre à une question de Bob concernant le nombre de personnes avec un variant de gène particulier dans notre ensemble de données.

  1. L’autorité effectue le calcul nécessaire sur les données chiffrées de l’ensemble de données.
  2. L’autorité prend ce résultat global (les personnes sont marquées 1 pour avoir la variante et 0 pour ne pas l’avoir) et le re-crypte avec la clé publique de Bob.
  3. Bob déchiffre le résultat agrégé avec sa clé privée et a maintenant la somme correcte mais aucune visibilité des points de données individuels.

Récapitulation des données chiffrées

Ci-dessous, nous «simulons» 1000 personnes fournissant des informations génomiques à la plateforme. Au total, 448 personnes ont cette variante de gène particulière. Les données de chaque personne sont cryptées et stockées en toute sécurité.

Number of people with variante du gène: 488 ((21226922480075498561329291252368547521899161064631964196023720750821691033728, 22373176000434530074330330136750061845273006440607485558527039957320386973412), (73527396063873421512162165532068395819931745318640280343429662961367630577212, 38439465994848418879243894553165852646308170673055923181635051985961737087067))

L’AC re-crypte la somme chiffrée pour Bob

Bob va de l’avant et demande des informations sur la fréquence des variantes génétiques dans la population. L’autorité de certification le résume et rechiffre les données à Bob. Notez que les coordonnées (x, y) du chiffre rechiffré ne sont pas égales aux coordonnées du chiffre original ci-dessus.

((26066336990521229606715532856762274058860058654632118019680516577894483977430, 111016076743629331281471026942315236039952684121365861080441162051376755931177), (74777752915141648361212288792719003318012040162755253888817602184232651456038, 79121323403285772024091404265686004833455157263244527767410139385386809682035))

Bob décrypte la somme

(488, 488)

Bob est en mesure d’avoir un aperçu des données dans leur ensemble sans avoir un aperçu des informations d’un propriétaire individuel. Cela permet aux propriétaires de données qui ne souhaitent pas révéler leurs données de continuer à contribuer à la plate-forme.

Notez que le rechiffrement par proxy a joué un rôle clé en rendant cela pratique pour Bob. Étant donné que chaque propriétaire de données était délégué au proxy, Bob n’avait besoin d’émettre qu’une seule requête. Sans le proxy, il devrait émettre une requête pour chaque point de données qu’il souhaite.

Le recryptage par proxy et le cryptage homomorphique aident Nebula à sécuriser les données des utilisateurs, à fournir un accès pratique aux données pour les acheteurs de données et à permettre aux acheteurs de données de générer des informations sans compromettre la confidentialité individuelle.

Appel à l’action

Chez Nebula Genomics, nous pensons que les problèmes de confidentialité sont un obstacle majeur au partage de données biomédicales. Cela entrave la recherche médicale et le développement de nouveaux traitements. Nous ne pouvons pas résoudre ce défi seuls.

Si vous êtes intéressé par le code, n’hésitez pas à jouer avec la bibliothèque, mais soyez prudent: cette implémentation particulière n’a pas fait l’objet d’un audit de sécurité et est actuellement à usage éducatif uniquement 🙂

Si vous souhaitez en savoir plus sur Nebula Genomics en particulier, assurez-vous de Suivez-nous sur Twitter pour rester à jour.