web-dev-qa-db-fra.com

Comment livrer un message crypté à plusieurs destinataires sans clés révélatrices

Disons que j'ai généré une clé privée et publique. Je crée un message et le crypté avec la clé publique. Je livre ce message crypté et une clé privée à plusieurs destinataires.

Pourquoi voudrais-je faire ça?

Je veux être capable de livrer un message qui ne peut être que déchiffré. Je ne veux pas que quiconque puisse crypter un message factice et livrer cela à tous les destinataires avec eux en supposant que c'était de moi.

Je pense que je suis sur la bonne voie en utilisant RSA - mais j'en ai besoin de tout cela en sens inverse.

De plus, si je donne aux gens la clé privée et que je garde la clé publique en sécurité, ai-je raison de croire qu'il est possible de générer une nouvelle clé publique utilisant la clé privée elle-même?

Prenons un exemple de mon problème.

Je crée un message crypté à l'aide de ma clé publique:

ajjfjdksdjkdfjfjdjfd

L'utilisateur final décrypte celui-ci en utilisant la clé privée pour:

green:1234:table

Tout va bien jusqu'à présent. Le message ci-dessus et être authentifié très essentiellement vérifié pour les trois chaînes dans un :.

Toutefois, comme ces messages cryptés pouvaient provenir de sources non soignées, je souhaite qu'il est impossible que toute source non approuvée soit capable de créer ces messages puisqu'ils connaissent le format simple. Je ne veux pas que la clé que je fournisse soit suffisante pour qu'ils puissent renverser l'ingénieur de la clé publique.

Je trouve qu'il est difficile d'expliquer, j'espère que cela peut être répondu.

5
Chris Denman

Je pense que vous avez gotté une cryptographie publique de remparté, ici.

  1. Vous ne donnez pas une clé privée. Période. Ils s'appellent "privé" pour une raison.

  2. Vous n'envoyez pas un message crypté sur le même canal, encore moins en même temps que vous envoyez la seule touche nécessaire pour la déchiffrer. Qui vaincent complètement le but du cryptage en premier lieu.

  3. Une paire de clés n'est utile que pour l'authentification (c'est-à-dire la signature numérique) si la clé publique a été vérifiée par le (s) destinataire (ou une tierce partie fiduciée) avant utilisation.

Alors, comment vous livrez-vous un message crypté et signé à plusieurs parties sans leur permettre de vous imiter en retour? La réponse réside dans # 1: ( pas deux personnes détiennent la même clé privée.

Si vous êtes le seul avec une copie de votre clé de signature privée, personne ne peut vous repousser. Vous signer simplement le message avec votre clé de signature privée avant que tout cryptage soit effectué. Les destinataires utilisent ensuite votre clé de signature publique pour vérifier l'authenticité du message après leur déchiffrer.

La partie de cryptage est une matière complètement différente. Et pour cela, vous avez quelques options.

  1. Pas de cryptage. Il suffit de signer et de livrer. L'authenticité est protégée indépendamment, mais cette méthode n'offre aucune confidentialité.

  2. chiffrer avec une clé pré-partagée (PSK). Accencis sur Pré-partagé - Celui-ci ne pas être expédié avec le message. Il devrait être partagé parmi le groupe avant-main, de préférence hors bande. Le PSK est utilisé pour le cryptage/décryptage uniquement. Votre clé de signature est ce qui fournit une authenticité.

  3. chiffrer individuellement avec des clés publiques. Prenez le message signé et effectuez une copie pour chaque destinataire. Ensuite, cryptez chaque copie avec la clé publique d'un destinataire et envoyez-la. Les destinataires utiliseront leurs clés privées pour déchiffrer le message.

  4. tilisez des touches privées comme touches de cryptage clé (Kek) pour une clé partagée. En fonction de la taille du message, cela peut être plus rapide que # 3 tout en conservant les avantages du cryptage de clé publique. Vous générez une clé aléatoire et uniforme, une clé partagée. Utilisez cela pour chiffrer le message signé. Faites une copie de la clé partagée pour chaque destinataire. Cryptez chaque copie de la clé avec la clé publique d'un destinataire. Enregistrez toutes les clés cryptées avec le message crypté et envoyez une copie de ce même paquet à chaque destinataire. Chaque destinataire utilisera sa clé privée pour tenter de déchiffrer chaque copie de la clé partagée jusqu'à ce qu'ils trouvent leur copie, puis ils utiliseront cela pour déchiffrer le message.

Encore une fois, la principale chose qui protège l'authenticité et l'origine vérifiable du message ici est le fait que seulement vous avoir une copie du Touche privée utilisée pour la signer. Au-delà de cela, à des fins d'authentification seulement, peu importe la manière dont ou même si le message est réellement crypté. À la fin de chacun de ces processus, lorsque les destinataires ont une copie ClearText du message signé, votre publique La clé de signature est ce qu'ils utiliseront pour vérifier son origine et son intégrité.

14
Iszi

Chris veut envoyer un message à Alice et Bob.

Chris ne veut pas Dave envoyer un message à Alice et Bob et prétendant être de Chris.

Ainsi, il doit y avoir un moyen d'alice et de Bob de pouvoir distinguer un message authentique de Chris, et une imitation de Dave. Comme, quelque chose comme une signature de Chris. Cette méthode existe et s'appelle (de manière appropriée) A Signature .

Conceptuellement, vous voulez que Chris puisse faire quelque chose (envoyer un message qui sera accepté par Alice et Bob) que non-Chris (en particulier Dave) ne peut pas faire - il doit donc y avoir une valeur secrète que Chris sait mais pas Dave , parce que, en cryptographie, la connaissance est le pouvoir. De plus, cette valeur secrète ne doit pas ne pas fuir dans le processus et, en particulier, vous ne voulez pas qu'Alice et Bob puisse l'apprendre (sinon, Alice pourrait alors essayer de davifier Bob, c'est-à-dire envoyer à Bob un message comme si elle était Chris) .

Donc, une valeur secrète sur le côté de l'expéditeur, pour une action vérifiable du côté récepteur, sans fuite du secret lui-même. C'est exactement le concept de signatures numériques.

Cela détient quelles que soient toute notion de cryptage. C'est une discussion complètement orthogonale.

2
Tom Leek

Vous n'avez pas besoin de révéler des clés, c'est le point principal d'un système de cryptage de clé publique.

Dans ce message de la liste GNUPG, ils expliquent un moyen de créer un message de destinataire multiple.

Basé sur elle, vous pouvez créer quelque chose comme ceci:

  1. Générer une clé symétrique aléatoire S1

  2. Cryptez tout le message avec S1, créant le CYPHERText C1

  3. Chiffrer S1 Avec chaque clé publique pour les destinataires, générer D1, D2, ..., Dn

  4. Générer un hachage sécurisé de S1, création H1

  5. Générez le message comme suit:

-- BEGIN CYPHERTEXT --
C1
-- END CIPHERTEXT --
-- BEGIN HASH --
H1
-- END HASH --
-- BEGIN KEYS --
D1
D2
D3
-- END KEYS--

Envoyez le message à tout le monde. Ils vont déchiffrer d1 to DN Pour générer S1. En comparant le résultat avec le hachage sur le message, ils sauront quand ils ont obtenu la clé symétrique.

Avec la clé symétrique à la main, ils peuvent décrypter de manière indépendante le message, sans se connaître les touches.

Pour créer un message authentique, ajoutez une signature à l'ensemble du message et personne ne pourra créer un message qui pose comme vous, à moins d'avoir votre clé privée.

1
ThoriumBR