Question

Quels sont les fondamentaux pour réaliser le chiffrement de données avec exactement deux touches (qui pourrait être basée sur mot de passe), mais n'ayant qu'un (un) des deux clés pour décrypter les données?

Par exemple, les données sont cryptées avec un mot de passe utilisateur et son mot de passe, et ensuite, il ou de son entreprise peut déchiffrer les données.Aucun d'entre eux savent que l'autre mot de passe.Une seule copie des données chiffrées sont stockées.

Je ne veux pas de clés publique/privée.Probablement par l'intermédiaire de cryptographie à clé symétrique et peut-être qu'il s'agit de quelque chose comme XORing les touches à utiliser pour le chiffrement.

Mise à jour:Je tiens également à trouver une solution qui ne nécessite pas de stockage de clés à tous.

Était-ce utile?

La solution

La façon dont cela est habituellement fait est de générer une clé symétrique pour chiffrer les données.Ensuite, vous chiffrer la clé symétrique de chaque bénéficiaire de la clé ou le mot de passe pour qu'ils puissent décrypter sur leur propre.S/MIME (en fait, la Syntaxe de Message Cryptographique sur lequel S/MIME est basé) utilise cette technique.

De cette façon, vous n'avez qu'à stocker une copie du message chiffré, mais de multiples copies de la clé.

Autres conseils

En général, ce que vous avez à faire est de chiffrer les données avec une clé générée de manière aléatoire, puis ajouter les versions de cette clé aléatoire qui ont été chiffrés avec toutes les clés connus.Donc n'importe qui avec une clé valide pouvez découvrir la "vraie" clé utilisée pour chiffrer les données.

Si je vous ai bien compris, vous avez certaines des données que vous êtes prêt à chiffrer et de distribuer la clé de chiffrement découpé en n 'textes'.(Dans votre cas, 2 pièces)

Pour que vous pouvez utiliser la XOR fonction de fractionnement, voici comment ça fonctionne:Vous fournir le nombre requis de pièces - n, et la clé secrète – K.Pour générer n pièces de votre clé, vous avez besoin pour créer des (n – 1) nombres aléatoires:R1, R2, R3, ..., Rn−1.Pour cela, vous pouvez utiliser un SecureRandom générateur de nombre, ce qui va nous empêcher de doublons.Ensuite, vous exercez une fonction XOR sur ces Rn-1 pièces, et votre clé - K:
Rn = R1 ⊕ R2 ⊕ R3 ⊕ ...⊕ Rn−1 ⊕ K

Maintenant que vous avez votre n pièces:R1, R2, R3, ..., Rn-1, Rn et vous risquez de détruire la K.Ces pièces peuvent se propager dans votre code ou envoyés aux utilisateurs.

Pour remonter la clé, nous utilisons l'opération XOR sur notre Rn pièces:
K = R1 ⊕ R2 ⊕ R3 ⊕ ...⊕ Rn−1 ⊕ Rn

Avec la fonction XOR (⊕) chaque pièce est intrinsèquement important dans la reconstruction de la clé, si tous les bits dans l'une des pièces sont modifiés, la clé n'est pas récupérable.

Pour plus d'infos et le code, vous pouvez prendre un coup d'oeil à l'Android Utilitaire que j'ai écrit à cet effet:
Projet GitHub: https://github.com/aivarsda/Secret-Key-Split-Util

Vous pouvez également essayer la Clé Secrète Splitter démo app qui utilise l'Utilitaire :
GooglePlay: https://play.google.com/store/apps/details?id=com.aivarsda.keysplitter

Je pense que j'ai pensé à une solution qui devrait fonctionner:

D = data to encrypt
h1 = hash(userpassword)
h2 = hash(companyPassword)
k = h1 concat h2

E = function to encrypt
//C is the encrypted data
C = E_h1(h2) concat E_h2(h1) concat E_k(D)

Puis une ou l'autre personne peut déchiffrer le hachage de l'autre personne, et puis de les combiner pour déchiffrer le reste des données.

Il est peut-être une meilleure solution que ce bien?

Dans le cas général, un secret (dans cette application, une clé de décryptage pour les données), peut être divisé en actions, de sorte que certaines seuil de nombre de ces actions est nécessaire pour récupérer le secret.Ceci est connu comme le secret de partage de n actions et un seuil de t, a (t,n)-seuil de régime.

On peut se faire soit par la création d'un polynôme d'ordre t-1, en indiquant le secret que le premier coefficient, et en choisissant le reste des coefficients au hasard.Alors, n aléatoire de points sur cette courbe sont sélectionnés et deviennent des actions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top