Répondre

0

Édition: Ceci est incorrect (voir le commentaire de Daniel).

Vous pouvez modifier n'importe quel algorithme pour autoriser deux clés en générant une clé de session, en utilisant cela pour chiffrer la charge utile, puis en utilisant les deux clés pour chiffrer la clé de session.

Par exemple, si Ak est la clé admin, Uk est la clé de l'utilisateur, Sk est une clé de session aléatoire et e(k, p) est une fonction de chiffrement symétrique, vous utilisez:

ciphertext = e(Ak, Sk) . e(Uk, Sk) . e(Sk, p) 
+0

Votre proposition ne possède pas la propriété souhaitée que les utilisateurs peuvent uniquement déchiffrer. Puisque les utilisateurs peuvent déchiffrer 'Sk', ils peuvent utiliser' Sk' pour chiffrer une charge utile différente 'p'' et construire un nouveau texte chiffré à partir de cela. –

+0

D'oh! Tu as très raison. Merci. Je vais laisser ma réponse ici comme un avertissement de comment ne pas le faire. –

2

Vous pouvez faire cela avec RSA en utilisant la clé privée pour le cryptage (comme si vous signeriez). Le tuple (d,n) serait la clé d'administration (normalement appelée clé privée), (e,n) serait la clé de l'utilisateur (normalement appelée clé publique). La clé d'administration est utilisée pour le chiffrement, la clé d'utilisateur pour le déchiffrement. Seul l'administrateur est en possession de la clé d'administration, tandis que l'utilisateur et l'administrateur connaissent la clé de l'utilisateur. Maintenant, seul l'administrateur peut crypter, alors que l'utilisateur ne peut que déchiffrer.

Notez que j'ai délibérément choisi l'exposant d pour la clé d'administration de chiffrement et non vice-versa, car e est généralement choisi pour être très petit pour une meilleure performance, et si vous faites cela avec la clé d'administration au lieu de la clé utilisateur, le système serait brisé.

Notez que si vous construisez un système hybride pour cela, la propriété de déchiffrement désirée se casse, car l'utilisateur peut également accéder à la clé de session symétrique et modifier le message. J'imagine que vous voudrez peut-être que la propriété decrypt-only réalise effectivement l'authentification de quantités potentiellement importantes de données cryptées (c'est-à-dire que l'utilisateur sache que les données doivent provenir de l'administrateur et qu'elles n'ont pas été falsifiées). Si oui, ce dont vous avez réellement besoin, c'est d'un système plus complexe avec une signature numérique appropriée (fournissant une authentification) et une forme de cryptage pour la confidentialité, par ex. hybride utilisant un chiffrement symétrique pour le chiffrement en masse et par ex. RSA pour le cryptage de la clé symétrique.

Cependant, vous devriez être très prudent lors de la conception de systèmes cryptographiques comme ceci, il y a un lot de choses qui peuvent mal se passer et compromettre complètement la sécurité de votre système. Demander un avis d'expert.

Questions connexes