2010-11-02 19 views
14

Dites que j'ai des données et un mot de passe, et je veux crypter les données de telle manière qu'elles puissent seulement être récupérées avec le bon mot de passe.Comment le chiffrement basé sur un mot de passe fonctionne-t-il techniquement?

Comment cela fonctionne-t-il techniquement (c'est-à-dire comment implémenter ceci)? J'entends souvent les gens utiliser le transfert de bits pour le cryptage, mais comment basez-vous cela sur un mot de passe? Comment fonctionne le chiffrement par mot de passe?

Un exemple est Mac OS X FileVault

Merci.


Si vous donnez un code d'échantillon, de préférence en C, Objective-C ou pseudocode.

+6

Une réponse correcte et complète est d'environ 2 ans de cours de deuxième cycle en sciences humaines et mathématiques. De nombreux doctorats ont été écrits sur le cryptage ... –

+7

La seule chose que vous ne voulez probablement pas faire est de créer votre propre bibliothèque cryptographique, du moins si vous vous souciez réellement de la sécurité des données cryptées. Obtenir le cryptage correct est ** difficile **. –

Répondre

0

Un moyen facile, mais pas exactement sécurisé, est de faire tourner chaque octet d'un nombre déterminé par le mot de passe. Vous pouvez utiliser un code de hachage à partir d'une chaîne, ou compter le nombre de caractères, ou peu importe le nombre. Mais ce que vous pensez probablement, c'est le cryptage à clé publique. Voici un lien vers un document qui vous dira le calcul - vous devrez travailler vous-même sur les détails de la mise en œuvre, mais ce n'est pas si difficile une fois que vous aurez compris le calcul. http://mathaware.org/mam/06/Kaliski.pdf

+1

Le chiffrement symétrique fonctionnerait probablement aussi bien pour cela. –

18

Pour le cryptage (symétrique), vous avez besoin d'une clé secrète pour le cryptage et le décryptage.

Habituellement, le mot de passe que vous fournissez est utilisé comme source de cette clé. Pour diverses raisons de sécurité, le mot de passe n'est pas (et ne peut souvent pas, en raison des exigences du chiffrement utilisé) directement utilisé comme clé. Au lieu de cela, un key derivation function est utilisé pour générer la clé à partir du mot de passe. C'est pourquoi les mots de passe pour le cryptage doivent être longs et assez aléatoires: sinon la clé résultante ne proviendra que d'un très petit sous-ensemble de clés possibles, qui pourront alors toutes être essayées, forçant ainsi le cryptage.

Quant aux exemples de code, il existe plusieurs possibilités:

  • regard sur le code source d'une bibliothèque Crypto, tels que OpenSSL
  • regard sur le code source d'un programme qui met en œuvre le cryptage, par exemple GnuPG
  • google du code source d'exemple pour un simple algorithme de chiffrement, ou une fonction de dérivation de clé, et essayer de le comprendre

Cela dépend de ce que vous voulez apprendre.

+0

Voulez-vous dire, "Habituellement, le mot de passe que vous fournissez n'est ** pas ** utilisé comme cette clé." ? Les première et deuxième phrases de ce paragraphe semblent contradictoires. – Thanatos

+1

@Thanatos: Oups, ce n'était pas ce que je voulais dire. Merci de l'avoir signalé. fixé. – sleske

5

Vous aurez besoin de chercher d'autres ressources pour une explication profonde, que cette question est extrêmement large. En règle générale: vous utilisez un mot de passe comme un «germe» pour une clé de cryptage, comme l'a souligné sleske. Vous utilisez ensuite cette clé pour appliquer un algorithme de cryptage bidirectionnel (c'est-à-dire un algorithme qui peut être appliqué une fois pour crypter et à nouveau pour décrypter). Lorsque vous appliquez l'algorithme à une donnée, celle-ci devient cryptée de telle sorte que vous ne pouvez plus jamais récupérer les données sans utiliser la même clé, et vous ne pouvez pratiquement pas produire la même clé sans avoir le même mot de passe que une graine.

2

Si vous êtes intéressé par la cryptographie, lisez Applied Cryptography de Bruce Schneier. Excellente lecture, beaucoup d'exemples. Il passe par de nombreux types de cryptographie différents.

0

Le bloc de construction de base de la plupart des chiffrements par blocs est une construction appelée Feistel Network. C'est raisonnablement facile à comprendre.

Les chiffrements de flux sont encore plus simples - ils ne sont pour l'essentiel que des générateurs de nombres pseudo-aléatoires, mais avec des propriétés de sécurité importantes, où l'état interne initial est dérivé de la clé.

0

Le chiffrement basé sur le mot de passe EST symétrique. L'entrée se compose généralement d'un sel en plus du mot de passe. FooBabel a une application cool où vous pouvez jouer avec ce ... actuellement, ils codent dur le sel à un tableau de huit octets (zéro à sept) pour plus de simplicité. J'ai fait une demande pour voir qu'ils permettent aux utilisateurs d'entrer le sel. Quoi qu'il en soit, ici, il est - PBECrypto