web-dev-qa-db-fra.com

Protéger une clé privée en la répartissant sur plusieurs endroits

Est-il sûr de diviser un fichier de clé privée et de le placer à différents emplacements? Je veux dire, quelqu'un peut-il vraiment faire quelque chose avec seulement une partie d'une clé?

35
madjack

Le simple fractionnement du fichier n'aura pas l'effet souhaité (comme l'explique A.Hersean dans leur réponse ).

Je pense que ce que vous cherchez est des algorithmes " partage secret ", notamment algorithme de partage secret de Shamir (merci @ heinrich5991), où le secret est divisé en N morceaux et donné à différentes personnes pour la garde. Pour reconstruire le secret, toutes les N pièces (ou dans certaines variantes, seulement k des pièces) doivent être réunies. L'attaquant ne gagne aucune information à moins qu'il n'ait toutes les pièces.

Bien qu'utilisé dans de nombreuses applications, je ne pense pas qu'il soit disponible dans openssl ou CAPI. Il existe de nombreuses implémentations open source robustes - voir cette question , mais vous devrez faire quelques devoirs pour décider si vous faites confiance à l'implémentation pour ne pas être back-doored.


Il y a aussi le concept connexe de "chiffrement multipartite"; où vous cryptez le secret avec des clés publiques de plusieurs personnes, puis toutes doivent participer au décryptage. Voici une SO marchez à ce sujet:

Cryptage et décryptage impliquant 3 parties

Vous pouvez faire une version pauvre de cela en utilisant uniquement l'implémentation RSA que vous avez déjà en chaînant le cryptage RSA:

RSA(key1, RSA(key2, RSA(key3, secret) ) )

Si vous voulez que 3 personnes chiffrent, mais seulement 2 d'entre elles doivent être présentes pour déchiffrer, vous pouvez stocker 3 versions du texte chiffré:

RSA(key1, RSA(key2, secret) )
RSA(key2, RSA(key3, secret) )
RSA(key1, RSA(key3, secret) )
51
Mike Ounsworth

Une clé privée ou secrète n'est pas destinée à être coupée. Par exemple, si quelqu'un saisit la moitié d'une clé symétrique de 128 bits, la force de la clé ne serait pas divisée par 2, mais elle serait réduite de 18446744073709551616 (= 2⁶⁴). La partie restante de la clé pourrait être cassée très rapidement. Il en va de même pour la clé asymétrique (utilisée par les autorités de certification), mais les calculs sont plus complexes.

Alors ne le fais pas. Cela augmentera la complexité de votre solution tout en réduisant sa sécurité, car vous auriez au moins deux emplacements à sécuriser au lieu d'un seul.

38
A. Hersean