Différence fondamentale entre les algorithmes de hachage et de chiffrement

509

Je vois beaucoup de confusion entre les hachages et les algorithmes de chiffrement et j'aimerais entendre d'autres conseils d'experts sur:

  1. Quand utiliser les hachages vs les cryptages

  2. Qu'est-ce qui rend un algorithme de hachage ou de chiffrement différent (d'un niveau théorique / mathématique), c'est-à-dire ce qui rend les hachages irréversibles (sans l'aide d'un arc-en-ciel)

Voici quelques questions SO similaires qui n'ont pas été aussi détaillées que je le cherchais:

Quelle est la différence entre l'obfuscation, le hachage et le chiffrement?
Différence entre le chiffrement et le hachage

Kenny Cason
la source
28
Je peux prévoir que c'est la question à laquelle renvoyer les gens lorsqu'ils confondent les termes. :)
Adam Paynter
18
le hachage est à sens unique (ne peut pas être annulé), le cryptage est à double sens (peut être décrypté)
bestsss
Les hachages sont également utiles pour indexer de grandes structures et des objets, par exemple des fichiers. Voir table de hachage .
HABO
22
Le hachage est comme un hachoir à viande. Vous pouvez transformer une vache en hamburger, mais pas l'inverse.
Neil McGuigan
J'ai remarqué que ma question avait été modifiée. J'avais toujours connu les différences de haut niveau entre les deux, mais j'étais plus curieux à propos des différences de bas niveau / mathématiques. :) Quoi qu'il en soit, beaucoup de bon contenu pour SO! Merci beaucoup!
Kenny Cason

Réponses:

738

Eh bien, vous pouvez le chercher sur Wikipedia ... Mais puisque vous voulez une explication, je ferai de mon mieux ici:

Fonctions de hachage

Ils fournissent un mappage entre une entrée de longueur arbitraire et une sortie (généralement) de longueur fixe (ou de plus petite longueur). Il peut s'agir d'un simple crc32, à une fonction de hachage cryptographique complète telle que MD5 ou SHA1 / 2/256/512. Le fait est qu'il y a une cartographie à sens unique en cours. C'est toujours un mappage plusieurs: 1 (ce qui signifie qu'il y aura toujours des collisions) car chaque fonction produit une sortie plus petite qu'elle ne peut en entrer (si vous alimentez chaque fichier 1 Mo possible dans MD5, vous obtiendrez une tonne de collisions).

La raison pour laquelle ils sont difficiles (ou impossibles en pratique) à inverser est la façon dont ils fonctionnent en interne. La plupart des fonctions de hachage cryptographiques parcourent plusieurs fois l'ensemble d'entrée pour produire la sortie. Donc, si nous regardons chaque bloc d'entrée de longueur fixe (qui dépend de l'algorithme), la fonction de hachage appellera cela l'état actuel. Il itérera ensuite sur l'état et le changera en un nouveau et l'utilisera comme rétroaction en lui-même (MD5 le fait 64 fois pour chaque bloc de données de 512 bits). Il combine ensuite en quelque sorte les états résultants de toutes ces itérations pour former le hachage résultant.

Maintenant, si vous voulez décoder le hachage, vous devez d'abord comprendre comment diviser le hachage donné en ses états itérés (1 possibilité pour des entrées plus petites que la taille d'un bloc de données, beaucoup pour des entrées plus grandes). Ensuite, vous devez inverser l'itération pour chaque état. Maintenant, pour expliquer pourquoi il est très difficile, imaginez essayer de déduire aet bde la formule suivante: 10 = a + b. Il existe 10 combinaisons positives de aetb cela peut fonctionner. Maintenant, passez en revue plusieurs fois:tmp = a + b; a = b; b = tmp. Pour 64 itérations, vous auriez plus de 10 ^ 64 possibilités d'essayer. Et ce n'est qu'un simple ajout où un état est préservé d'itération en itération. Les fonctions de hachage réelles effectuent beaucoup plus d'une opération (MD5 effectue environ 15 opérations sur 4 variables d'état). Et puisque la prochaine itération dépend de l'état de la précédente et que la précédente est détruite lors de la création de l'état actuel, il est presque impossible de déterminer l'état d'entrée qui a conduit à un état de sortie donné (pour chaque itération pas moins). Combinez cela, avec le grand nombre de possibilités impliquées, et le décodage même un MD5 prendra une quantité presque infinie (mais pas infinie) de ressources. Tellement de ressources que ça '

Fonctions de cryptage

Ils fournissent un mappage 1: 1 entre une entrée et une sortie de longueur arbitraire. Et ils sont toujours réversibles. La chose importante à noter est qu'elle est réversible à l'aide d'une méthode. Et c'est toujours 1: 1 pour une clé donnée. Maintenant, il existe plusieurs entrées: des paires de clés qui peuvent générer la même sortie (en fait, il y en a généralement, selon la fonction de cryptage). De bonnes données chiffrées ne se distinguent pas du bruit aléatoire. Ceci est différent d'une bonne sortie de hachage qui est toujours d'un format cohérent.

Cas d'utilisation

Utilisez une fonction de hachage lorsque vous souhaitez comparer une valeur mais ne pouvez pas stocker la représentation simple (pour un certain nombre de raisons). Les mots de passe devraient très bien s'adapter à ce cas d'utilisation car vous ne voulez pas les stocker en texte brut pour des raisons de sécurité (et ne devriez pas). Mais que se passe-t-il si vous souhaitez vérifier un système de fichiers pour les fichiers de musique piratés? Il serait impossible de stocker 3 Mo par fichier musical. Donc, à la place, prenez le hachage du fichier et stockez-le (md5 stockerait 16 octets au lieu de 3 Mo). De cette façon, il vous suffit de hacher chaque fichier et de le comparer à la base de données stockée de hachages (cela ne fonctionne pas aussi bien dans la pratique en raison du ré-encodage, du changement des en-têtes de fichier, etc., mais c'est un exemple de cas d'utilisation).

Utilisez une fonction de hachage lorsque vous vérifiez la validité des données d'entrée. C'est pour cela qu'ils sont conçus. Si vous avez 2 entrées et que vous souhaitez vérifier si elles sont identiques, exécutez les deux via une fonction de hachage. La probabilité d'une collision est astronomiquement faible pour les petites tailles d'entrée (en supposant une bonne fonction de hachage). C'est pourquoi il est recommandé pour les mots de passe. Pour les mots de passe jusqu'à 32 caractères, md5 a 4 fois l'espace de sortie. SHA1 a 6 fois l'espace de sortie (environ). SHA512 a environ 16 fois l'espace de sortie. Vous ne vous souciez pas vraiment ce que le mot de passe était , vous vous souciez si c'est le même que celui qui a été stocké. C'est pourquoi vous devez utiliser des hachages pour les mots de passe.

Utilisez le cryptage chaque fois que vous avez besoin de récupérer les données d'entrée. Remarquez le mot besoin . Si vous stockez des numéros de carte de crédit, vous devez les récupérer à un moment donné, mais vous ne voulez pas les stocker en texte brut. Au lieu de cela, stockez la version cryptée et conservez la clé aussi sûre que possible.

Les fonctions de hachage sont également idéales pour signer des données. Par exemple, si vous utilisez HMAC, vous signez une donnée en prenant un hachage des données concaténées avec une valeur connue mais non transmise (une valeur secrète). Ainsi, vous envoyez le texte brut et le hachage HMAC. Ensuite, le récepteur hache simplement les données soumises avec la valeur connue et vérifie si elles correspondent au HMAC transmis. Si c'est la même chose, vous savez qu'elle n'a pas été falsifiée par une partie sans la valeur secrète. Ceci est couramment utilisé dans les systèmes de cookies sécurisés par les cadres HTTP, ainsi que dans la transmission de messages de données sur HTTP où vous voulez une certaine assurance d'intégrité dans les données.

Une note sur les hachages pour les mots de passe:

Une caractéristique clé des fonctions de hachage cryptographique est qu'elles doivent être très rapides à créer et très difficiles / lentes à inverser (à tel point que c'est pratiquement impossible). Cela pose un problème avec les mots de passe. Si vous stockez sha512(password), vous ne faites rien pour vous prémunir contre les tables arc-en-ciel ou les attaques par force brute. N'oubliez pas que la fonction de hachage a été conçue pour la vitesse. Il est donc trivial pour un attaquant de simplement exécuter un dictionnaire via la fonction de hachage et de tester chaque résultat.

L'ajout d'un sel aide les choses car il ajoute un peu de données inconnues au hachage. Ainsi, au lieu de trouver tout ce qui correspond md5(foo), ils doivent trouver quelque chose qui, lorsqu'il est ajouté au sel connu, produit md5(foo.salt)(ce qui est beaucoup plus difficile à faire). Mais cela ne résout toujours pas le problème de vitesse car s'ils connaissent le sel, il suffit de parcourir le dictionnaire.

Il y a donc des moyens de gérer cela. Une méthode populaire est appelée renforcement des touches (ou étirement des touches). Fondamentalement, vous répétez plusieurs fois un hachage (des milliers généralement). Cela fait deux choses. Tout d'abord, cela ralentit considérablement l'exécution de l'algorithme de hachage. Deuxièmement, s'il est implémenté correctement (en passant l'entrée et le sel à chaque itération), cela augmente réellement l'entropie (espace disponible) pour la sortie, ce qui réduit les risques de collisions. Une implémentation triviale est:

var hash = password + salt;
for (var i = 0; i < 5000; i++) {
    hash = sha512(hash + password + salt);
}

Il existe d'autres implémentations plus standard telles que PBKDF2 , BCrypt . Mais cette technique est utilisée par de nombreux systèmes liés à la sécurité (tels que PGP, WPA, Apache et OpenSSL).

En bout de ligne, ce hash(password)n'est pas assez bon. hash(password + salt)c'est mieux, mais toujours pas assez bon ... Utilisez un mécanisme de hachage étiré pour produire vos hachages de mot de passe ...

Une autre note sur l'étirement trivial

Ne réinjectez en aucun cas la sortie d'un hachage directement dans la fonction de hachage :

hash = sha512(password + salt); 
for (i = 0; i < 1000; i++) {
    hash = sha512(hash); // <-- Do NOT do this!
}

La raison en est liée aux collisions. N'oubliez pas que toutes les fonctions de hachage ont des collisions car l'espace de sortie possible (le nombre de sorties possibles) est plus petit que l'espace d'entrée. Pour voir pourquoi, regardons ce qui se passe. Pour préfacer cela, supposons qu'il y a un risque de collision de 0,001% sha1()(il est beaucoup plus faible en réalité, mais à des fins de démonstration).

hash1 = sha1(password + salt);

Maintenant, hash1a une probabilité de collision de 0,001%. Mais quand nous faisons le suivant hash2 = sha1(hash1);, toutes les collisions de hash1deviennent automatiquement des collisions dehash2 . Alors maintenant, nous avons le taux de hash1 à 0,001%, et le deuxième sha1()appel ajoute à cela. Alors maintenant, hash2a une probabilité de collision de 0,002%. C'est deux fois plus de chances! Chaque itération ajoutera une autre 0.001%chance de collision au résultat. Ainsi, avec 1000 itérations, le risque de collision est passé de 0,001% à 1%. Maintenant, la dégradation est linéaire et les probabilités réelles sont beaucoup plus petites, mais l'effet est le même (une estimation du risque de collision unique avec md5est d'environ 1 / (2 128 ) ou 1 / (3x10 38). Bien que cela semble petit, grâce à l'attaque d'anniversaire, ce n'est pas vraiment aussi petit qu'il y paraît).

Au lieu de cela, en ré-ajoutant le sel et le mot de passe à chaque fois, vous réintroduisez des données dans la fonction de hachage. Ainsi, les collisions d'un round particulier ne sont plus des collisions du round suivant. Donc:

hash = sha512(password + salt);
for (i = 0; i < 1000; i++) {
    hash = sha512(hash + password + salt);
}

A les mêmes chances de collision que la sha512fonction native . C'est ce que tu veux. Utilisez-le à la place.

ircmaxell
la source
30
Dommage que les programmeurs de LinkedIn n'aient pas lu cela avant d'avoir stocké les mots de passe sous forme de hachages SHA1 non salés ... money.cnn.com/2012/06/06/technology/linkedin-password-hack/…
Eric J.
2
@Pacerier: il met également un peu l'accent sur le hachage. Il rentre en détail spécifiquement sur le hachage de mot de passe ...
ircmaxell
1
Je ne comprends pas comment cela peut être un mappage 1 à 1 s'il peut y avoir plusieurs clés entraînant la même sortie. Pour DES, la longueur de clé est de 56 bits et les tailles de bloc sont de 64 bits. Par conséquent, n'y a-t-il pas 256 clés différentes qui peuvent correspondre au même bloc de sortie?
mrQWERTY
1
@ Renren29 oui. Vous avez raison. En pratique, l'ensemble du chiffre n'est ni surjectif ni injectif. Cependant, pour une clé donnée, elle est surjective (chaque texte brut a exactement un texte chiffré) mais pas nécessairement injectif (tous les textes chiffrés possibles n'ont pas de mappage). C'est pourquoi j'ai dit que c'est toujours 1: 1 pour une clé donnée . S'il n'y avait pas plusieurs clés pouvant sortir sur le même bloc de sortie, alors le chiffre ne serait pas utile car le texte chiffré vous dirait quelque chose sur la clé (sans le savoir).
ircmaxell
7
Très bonne réponse. Mon seul problème est que la dégradation de l'étirement trivial ne peut pas être linéaire ou qu'elle finirait par passer à 100%. Je pense que dans votre exemple avec 0,001%, la deuxième étape devrait être 0,001 + (1 - 0,001) * .001 ou 0,001999.
AlexDev
160

Une fonction de hachage pourrait être considérée comme la cuisson d'une miche de pain. Vous commencez avec des entrées (farine, eau, levure, etc ...) et après avoir appliqué la fonction de hachage (mélange + cuisson), vous vous retrouvez avec une sortie: une miche de pain.

Il est extrêmement difficile d'aller dans l'autre sens - vous ne pouvez pas vraiment séparer le pain en farine, eau, levure - une partie de cela a été perdue pendant le processus de cuisson, et vous ne pouvez jamais dire exactement combien d'eau, de farine ou de levure a été utilisée pour un pain particulier, car cette information a été détruite par la fonction de hachage (alias le four).

De nombreuses variantes différentes d'intrants produiront théoriquement des pains identiques (par exemple, 2 tasses d'eau et 1 cuillère à soupe de levure produisent exactement le même pain que 2,1 tasses d'eau et 0,9 cuillère à soupe de levure), mais étant donné l'une de ces pains, vous ne pouvez pas dire exactement quelle combinaison d'intrants l'a produite.

Le cryptage, d'autre part, pourrait être considéré comme un coffre-fort. Tout ce que vous y mettez revient, tant que vous possédez la clé avec laquelle il a été verrouillé en premier lieu. C'est une opération symétrique. Étant donné une clé et une entrée, vous obtenez une certaine sortie. Compte tenu de cette sortie et de la même clé, vous récupérerez l'entrée d'origine. C'est une cartographie 1: 1.

Marc B
la source
2
Sauf que vous ne pouvez pas facilement montrer qu'un hamburger particulier provient entièrement d'une vache particulière, qui est une propriété fondamentale d'un hachage, c'est donc une idée amusante mais une terrible analogie.
user467257
1
@caf lol en effet et un classique à ça. Cependant, la vache arrive rarement sur le marché, c'est le "taureau" qui le fait ;-) Vache: lait. Taureau: viande.
Funk Forty Niner
1
Cette histoire derrière elle semble super savoureuse.
sitilge
44

Utilisez des hachages lorsque vous ne voulez pas pouvoir récupérer l'entrée d'origine, utilisez le cryptage lorsque vous le faites.

Les hachages prennent une entrée et la transforment en quelques bits (généralement considérés comme un nombre, comme un entier 32 bits, un entier 64 bits, etc.). La même entrée produira toujours le même hachage, mais vous perdez PRINCIPALEMENT des informations dans le processus de sorte que vous ne pouvez pas reproduire de manière fiable l'entrée d'origine (il y a cependant quelques mises en garde à cela).

Le cryptage préserve principalement toutes les informations que vous mettez dans la fonction de cryptage, ce qui rend difficile (idéalement impossible) pour quiconque de revenir à l'entrée d'origine sans posséder de clé spécifique.

Exemple simple de hachage

Voici un exemple trivial pour vous aider à comprendre pourquoi le hachage ne peut pas (dans le cas général) récupérer l'entrée d'origine. Supposons que je crée un hachage 1 bit. Ma fonction de hachage prend une chaîne de bits en entrée et définit le hachage à 1 s'il y a un nombre pair de bits définis dans la chaîne d'entrée, sinon 0 s'il y avait un nombre impair.

Exemple:

Input    Hash
0010     0
0011     1
0110     1
1000     0

Notez qu'il existe de nombreuses valeurs d'entrée qui aboutissent à un hachage de 0, et beaucoup qui aboutissent à un hachage de 1. Si vous savez que le hachage est 0, vous ne pouvez pas savoir avec certitude quelle était l'entrée d'origine.

Soit dit en passant, ce hachage 1 bit n'est pas exactement conçu ... jetez un œil au bit de parité .

Exemple simple de cryptage

Vous pouvez crypter du texte en utilisant une simple substitution de lettre, par exemple, si l'entrée est A, vous écrivez B. Si l'entrée est B, vous écrivez C. Jusqu'à la fin de l'alphabet, où si l'entrée est Z, vous réécrire A.

Input   Encrypted
CAT     DBU
ZOO     APP

Tout comme l'exemple de hachage simple, ce type de cryptage a été utilisé historiquement .

Eric J.
la source
Il convient de noter que le «chiffrement» fait familièrement référence au chiffrement fort et ne doit pas être confondu avec un chiffrement faible tel que le chiffrement César dans l'exemple ci-dessus.
Télécopie du
@Fax Oui, mais ce qui constitue un cryptage fort a été une barre mobile à travers les âges. La machine allemande Enigma de la Seconde Guerre mondiale était presque impossible à casser (il y a un grand film à ce sujet). Aujourd'hui, votre montre intelligente pourrait facilement la casser. DES était autrefois considéré comme fort, tout comme MD5. Le cryptage fort d'aujourd'hui menace de devenir la proie facile des techniques informatiques quantiques dans un avenir prévisible.
Eric J.
Bien sûr, et c'est toujours une bonne idée de vérifier les dates des articles et des articles qui donnent des conseils sur la cryptographie. Cela étant dit, je suis presque sûr que le chiffre de César a été considéré comme faible même en 2011.
Fax
39

Présentation de base des techniques de hachage et de chiffrement / déchiffrement.

Hachage:

Si vous hachez tout le texte brut à nouveau , vous ne pouvez pas obtenir le même texte brut du texte haché . C'est simplement un processus à sens unique.

hachage


Cryptage et décryptage:

Si vous cryptez tout le texte brut avec une clé à nouveau , vous pouvez obtenir même le texte brut en faisant le déchiffrement sur le texte chiffré avec la touche même (symetric) / diffrent (asymentric).

chiffrement et déchiffrement


MISE À JOUR: Pour répondre aux points mentionnés dans la question éditée.

1. Quand utiliser les hachages vs les cryptages

Le hachage est utile si vous souhaitez envoyer un fichier à quelqu'un. Mais vous avez peur que quelqu'un d'autre intercepte le fichier et le modifie. Ainsi, le destinataire peut s'assurer qu'il s'agit du bon fichier si vous publiez la valeur de hachage publiquement. De cette façon, le destinataire peut calculer la valeur de hachage du fichier reçu et vérifier qu'elle correspond à la valeur de hachage.

Le cryptage est bon si vous dites avoir un message à envoyer à quelqu'un. Vous cryptez le message avec une clé et le destinataire déchiffre avec la même clé (ou peut-être même une autre) pour récupérer le message d'origine. crédits


2. Qu'est-ce qui rend un algorithme de hachage ou de chiffrement différent (d'un niveau théorique / mathématique), c'est-à-dire ce qui rend les hachages irréversibles (sans l'aide d'un arc-en-ciel)

Le hachage est une opération qui perd des informations mais pas le chiffrement . Regardons la différence de manière mathématique simple pour notre compréhension facile , bien sûr, les deux ont une opération mathématique beaucoup plus compliquée avec des répétitions impliquées

Cryptage / décryptage (réversible):

Ajout :

4 + 3 = 7  

Cela peut être inversé en prenant la somme et en soustrayant l'un des addends

7 - 3 = 4     

Multiplication :

4 * 5 = 20  

Cela peut être inversé en prenant le produit et en le divisant par l'un des facteurs

20 / 4 = 5    

Donc, ici, nous pourrions supposer que l'un des addends / facteurs est une clé de description et le résultat (7,20) est un texte crypté.


Hachage (non réversible):

Division Modulo :

22 % 7 = 1   

Cela ne peut pas être inversé car vous ne pouvez effectuer aucune opération sur le quotient et le dividende pour reconstituer le diviseur (ou vice versa).

Pouvez-vous trouver une opération pour remplir où le «?» est?

1  ?  7 = 22  
1  ?  22 = 7

Les fonctions de hachage ont donc la même qualité mathématique que la division modulo et perd les informations.

crédits

mrsrinivas
la source
26

Mon seul paquebot ... généralement, l'intervieweur voulait la réponse ci-dessous.

Le hachage est une façon. Vous ne pouvez pas convertir vos données / chaîne à partir d'un code de hachage.

Le cryptage est bidirectionnel - vous pouvez décrypter à nouveau la chaîne cryptée si vous avez la clé avec vous.

Shiv Mohan
la source
Hey! Ça fait deux lignes.
Mark Storer
17

Une fonction de hachage transforme une quantité de texte de taille variable en un texte de taille fixe.

Hacher

Source: https://en.wikipedia.org/wiki/Hash_function


Fonctions de hachage en PHP

Un hachage transforme une chaîne en une chaîne hachée. Voir ci-dessous.

HACHER:

$str = 'My age is 29';
$hash = hash('sha1', $str);
echo $hash; // OUTPUT: 4d675d9fbefc74a38c89e005f9d776c75d92623e

Les mots de passe sont généralement stockés dans leur représentation hachée à la place sous forme de texte lisible. Lorsqu'un utilisateur final souhaite accéder à une application protégée par un mot de passe, un mot de passe doit être donné lors de l'authentification. Lorsque l'utilisateur soumet son mot de passe, le système d'authentification valide reçoit le mot de passe et hache ce mot de passe donné. Ce hachage de mot de passe est comparé au hachage connu du système. L'accès est accordé en cas d'égalité.

DEHASH:

SHA1 est un hachage unidirectionnel. Ce qui signifie que vous ne pouvez pas détacher le hachage.

Cependant, vous pouvez forcer le hachage par force brute. Veuillez consulter: https://hashkiller.co.uk/sha1-decrypter.aspx .

MD5, est un autre hachage. Un déchaumeur MD5 est disponible sur ce site Web: https://www.md5online.org/ .

Pour entraver les attaques par force brute sur les hachages, un sel peut être donné. En php, vous pouvez utiliser password_hash()pour créer un hachage de mot de passe. La fonction password_hash()crée automatiquement un sel. Pour vérifier un mot de passe sur un hachage de mot de passe (avec un sel), utilisez password_verify().

// Invoke this little script 3 times, and it will give you everytime a new hash
$password = '1234';  
$hash = password_hash($password, PASSWORD_DEFAULT);  

echo $hash; 
// OUTPUT 

$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu 

$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u 

$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW

Un mot de passe peut être représenté par plus d'un hachage. Lorsque vous vérifiez le mot de passe avec différents hachages de mot de passe à l'aide de password_verify(), le mot de passe sera accepté comme mot de passe valide.

$password = '1234';  

$hash = '$2y$10$ADxKiJW/Jn2DZNwpigWZ1ePwQ4il7V0ZB4iPeKj11n.iaDtLrC8bu';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$H8jRnHDOMsHFMEZdT4Mk4uI4DCW7/YRKjfdcmV3MiA/WdzEvou71u';  
var_dump( password_verify($password, $hash) );  

$hash = '$2y$10$qhyfIT25jpR63vCGvRbEoewACQZXQJ5glttlb01DmR4ota4L25jaW';  
var_dump( password_verify($password, $hash) );

// OUTPUT 

boolean true 

boolean true 

boolean true




Une fonction de chiffrement transforme un texte en un texte chiffré absurde en utilisant une clé de chiffrement, et vice versa. entrez la description de l'image ici

Source: https://en.wikipedia.org/wiki/Encryption


Cryptage en PHP

Plongeons-nous dans du code PHP qui gère le chiffrement.

--- L'extension Mcrypt ---

CRYPTER:

$cipher = MCRYPT_RIJNDAEL_128;
$key = 'A_KEY';
$data = 'My age is 29';
$mode = MCRYPT_MODE_ECB;

$encryptedData = mcrypt_encrypt($cipher, $key , $data , $mode);
var_dump($encryptedData);

//OUTPUT:
string '„Ùòyªq³¿ì¼üÀpå' (length=16)

DÉCRYPT:

$decryptedData = mcrypt_decrypt($cipher, $key , $encryptedData, $mode);
$decryptedData = rtrim($decryptedData, "\0\4"); // Remove the nulls and EOTs at the END
var_dump($decryptedData);

//OUTPUT:
string 'My age is 29' (length=12)

--- L'extension OpenSSL ---

L'extension Mcrypt a été dépréciée en 7.1. et supprimé dans php 7.2. L'extension OpenSSL doit être utilisée dans php 7. Voir les extraits de code ci-dessous:

$key = 'A_KEY';
$data = 'My age is 29';

// ENCRYPT
$encryptedData = openssl_encrypt($data , 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($encryptedData);

// DECRYPT    
$decryptedData = openssl_decrypt($encryptedData, 'AES-128-CBC', $key, 0, 'IV_init_vector01');
var_dump($decryptedData);

//OUTPUT
string '4RJ8+18YkEd7Xk+tAMLz5Q==' (length=24)
string 'My age is 29' (length=12)
julien
la source
Notez que PHP mcrypt est désormais obsolète (j'ai peut-être quelque chose à voir avec cela) et que SHA-1, MD5 et ECB sont tous considérés comme non sécurisés. A_KEYn'est pas une clé AES / Rijndael-128; c'est un mot de passe, pas un allié clé.
Maarten Bodewes
@MaartenBodewes Oui c'est vrai. OpenSSL est la mode maintenant. php.net/manual/en/book.openssl.php
Julian
10

Cryptage symétrique:

Le cryptage symétrique peut également être appelé cryptage à clé partagée ou cryptage secret partagé. Dans le cryptage symétrique, une seule clé est utilisée à la fois pour crypter et décrypter le trafic.

entrez la description de l'image ici

Cryptage asymétrique:

Le cryptage asymétrique est également appelé cryptographie à clé publique. Le chiffrement asymétrique diffère du chiffrement symétrique principalement en ce que deux clés sont utilisées: une pour le chiffrement et une pour le déchiffrement. L'algorithme de chiffrement asymétrique le plus courant estRSA .

Par rapport au chiffrement symétrique, le chiffrement asymétrique impose une charge de calcul élevée et a tendance à être beaucoup plus lent. Ainsi, il n'est généralement pas utilisé pour protéger les données de charge utile. Au lieu de cela, sa principale force est sa capacité à établir un canal sécurisé sur un support non sécurisé (par exemple, Internet). Ceci est accompli par l'échange de clés publiques, qui ne peuvent être utilisées que pour crypter des données. La clé privée complémentaire, qui n'est jamais partagée, est utilisée pour le déchiffrement.

entrez la description de l'image ici

Hachage:

Enfin, le hachage est une forme de sécurité cryptographique qui diffère du cryptage. Alors que le chiffrement est un processus en deux étapes utilisé pour d'abord chiffrer puis déchiffrer un message, le hachage condense un message en une valeur irréversible de longueur fixe, ou hachage. Deux des algorithmes de hachage les plus courants observés en réseau sont MD5et SHA-1.

entrez la description de l'image ici

En savoir plus ici: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/

Vahid Farahmandian
la source
Désolé, je suis un spécialiste de la sécurité, mais pouvez-vous expliquer davantage la signification de "généralement utilisé pour protéger les données utiles"?
Abdul
2
Le cryptage @Abdul Asymmetric a une charge de calcul élevée, il n'est donc pas utilisé pour protéger les données qui sont envoyées sur un réseau sous forme de paquets (charge utile). Au lieu de cela, il est utilisé pour établir une connexion réseau sécurisée en utilisant l'échange de clés publiques pour protéger les données.
Chanceux
5
  1. Utilisez des hachages lorsque vous avez seulement besoin d'aller dans un sens. Par exemple, pour les mots de passe dans un système, vous utilisez le hachage car vous ne vérifierez que la valeur entrée par un utilisateur, après le hachage, correspond à la valeur dans votre référentiel. Avec le cryptage, vous pouvez aller de deux façons.

  2. les algorithmes de hachage et les algorithmes de chiffrement ne sont que des algorithmes mathématiques. Donc, à cet égard, ils ne sont pas différents - ce ne sont que des formules mathématiques. En ce qui concerne la sémantique, cependant, il existe une très grande distinction entre le hachage (unidirectionnel) et le cryptage (bidirectionnel). Pourquoi les hachages sont-ils irréversibles? Parce qu'ils sont conçus pour être comme ça, parce que parfois vous voulez une opération à sens unique.

hvgotcodes
la source
4

Les algorithmes de chiffrement et de hachage fonctionnent de manière similaire. Dans chaque cas, il faut créer une confusion et une diffusion entre les bits. En résumé, la confusion crée une relation complexe entre la clé et le texte chiffré, et la diffusion répand les informations de chaque bit autour.

De nombreuses fonctions de hachage utilisent en fait des algorithmes de chiffrement (ou des primitives d'algorithmes de chiffrement. Par exemple, le candidat SHA-3 Skein utilise Threefish comme méthode sous-jacente pour traiter chaque bloc. La différence est qu'au lieu de conserver chaque bloc de texte chiffré, ils sont destructifs, fusionné de manière déterministe à une longueur fixe

Justin Morgan
la source
4

en ce qui concerne la sécurité de la transmission de données, c'est-à-dire la communication bidirectionnelle, vous utilisez le cryptage. Tout cryptage nécessite une clé

en matière d'autorisation, vous utilisez le hachage. Il n'y a pas de clé dans le hachage

Le hachage prend n'importe quelle quantité de données (binaire ou texte) et crée un hachage de longueur constante représentant une somme de contrôle pour les données. Par exemple, le hachage peut être de 16 octets. Différents algorithmes de hachage produisent des hachages de tailles différentes. Vous ne pouvez évidemment pas recréer les données d'origine à partir du hachage, mais vous pouvez hacher à nouveau les données pour voir si la même valeur de hachage est générée. Les mots de passe unidirectionnels basés sur Unix fonctionnent de cette façon. Le mot de passe est stocké en tant que valeur de hachage et pour vous connecter à un système, le mot de passe que vous tapez est haché et la valeur de hachage est comparée au hachage du vrai mot de passe. S'ils correspondent, vous devez avoir tapé le bon mot de passe

pourquoi le hachage est-il irréversible:

Le hachage n'est pas réversible car le mappage entrée-hachage n'est pas 1-à-1. Le fait d'avoir deux entrées mappées à la même valeur de hachage est généralement appelé «collision de hachage». Pour des raisons de sécurité, l'une des propriétés d'une "bonne" fonction de hachage est que les collisions sont rares dans la pratique.

ayush
la source
1
"Le hachage n'est pas réversible car le mappage entrée-hachage n'est pas 1-à-1", merci, je pense que c'est un facteur très important quand il s'agit de différencier les hachages des cryptages! :)
Kenny Cason
Cela ne distingue pas clairement les fonctions de hachage normales, les fonctions de hachage cryptographiques et les hachages de mot de passe. Ils ont tous des propriétés différentes.
Maarten Bodewes
-2

La cryptographie traite des nombres et des chaînes. Fondamentalement, chaque chose numérique dans l'univers entier est un nombre. Quand je dis des nombres, c'est 0 et 1. Vous savez ce que c'est, binaire. Les images que vous voyez à l'écran, la musique que vous écoutez avec vos écouteurs, tout est binaire. Mais nos oreilles et nos yeux ne comprendront pas les binaires non? Seul le cerveau pouvait comprendre cela, et même s'il pouvait comprendre les binaires, il ne pouvait pas en profiter. Nous convertissons donc les fichiers binaires dans des formats compréhensibles par l'homme tels que mp3, jpg, etc. Appelons le processus Encoding . Il s'agit d'un processus bidirectionnel et peut être facilement décodé dans sa forme d'origine.

Hachage

Le hachage est une autre technique de cryptographie dans laquelle les données une fois converties sous une autre forme ne peuvent jamais être récupérées. Dans le terme de Layman, il n'y a pas de processus appelé de-hachage . Il existe de nombreuses fonctions de hachage pour effectuer le travail, telles que sha-512, md5, etc.

Si la valeur d'origine ne peut pas être récupérée, alors où l'utilisons-nous? Mots de passe! Lorsque vous configurez un mot de passe pour votre mobile ou PC, un hachage de votre mot de passe est créé et stocké dans un endroit sécurisé. Lorsque vous effectuez une tentative de connexion la prochaine fois, la chaîne entrée est à nouveau hachée avec le même algorithme (fonction de hachage) et la sortie est mise en correspondance avec la valeur stockée. Si c'est la même chose, vous êtes connecté. Sinon, vous êtes expulsé.

Crédits: wikimedia En appliquant un hachage au mot de passe, nous pouvons garantir qu'un attaquant n'obtiendra jamais notre mot de passe même s'il vole le fichier de mot de passe stocké. L'attaquant aura le hachage du mot de passe. Il peut probablement trouver une liste des mots de passe les plus couramment utilisés et appliquer sha-512 à chacun d'eux et le comparer avec la valeur en main. Cela s'appelle l' attaque par dictionnaire . Mais combien de temps ferait-il cela? Si votre mot de passe est suffisamment aléatoire, pensez-vous que cette méthode de craquage fonctionnerait? Tous les mots de passe dans les bases de données de Facebook, Google et Amazon sont hachés, ou du moins ils sont censés l'être.

Ensuite, il y a le cryptage

Le chiffrement se situe entre le hachage et l'encodage. L'encodage est un processus à double sens et ne doit pas être utilisé pour assurer la sécurité. Le cryptage est également un processus bidirectionnel, mais les données originales peuvent être récupérées si et seulement si la clé de cryptage est connue. Si vous ne savez pas comment fonctionne le cryptage, ne vous inquiétez pas, nous discuterons des bases ici. Ce serait suffisant pour comprendre les bases de SSL. Il existe donc deux types de cryptage, à savoir le cryptage symétrique et asymétrique.

Cryptage à clé symétrique

J'essaie de garder les choses aussi simples que possible. Alors, comprenons le cryptage symétrique au moyen d'un algorithme de décalage. Cet algorithme est utilisé pour crypter les alphabets en déplaçant les lettres vers la gauche ou la droite. Prenons une chaîne CRYPTO et considérons un nombre +3. Ensuite, le format crypté de CRYPTO sera FUBSWR. Cela signifie que chaque lettre est décalée vers la droite de 3 endroits. Ici, le mot CRYPTO est appelé Plaintext , la sortie FUBSWR est appelée Ciphertext , la valeur +3 est appelée la clé de cryptage (clé symétrique) et l'ensemble du processus est a chiffre. Il s'agit de l'un des algorithmes de cryptage à clé symétrique les plus anciens et les plus basiques, et sa première utilisation a été signalée à l'époque de Jules César. Ainsi, il a été nommé d'après lui et c'est le célèbre César Cipher . Quiconque connaît la clé de cryptage et peut appliquer l'inverse de l'algorithme de César et récupérer le Plaintext original. Par conséquent, il est appelé un cryptage symétrique .

Cryptage à clé asymétrique

Nous savons que, dans le cryptage symétrique, la même clé est utilisée pour le cryptage et le décryptage. Une fois cette clé volée, toutes les données ont disparu. C'est un risque énorme et nous avons besoin d'une technique plus complexe. En 1976, Whitfield Diffie et Martin Hellman ont publié pour la première fois le concept de chiffrement asymétrique et l'algorithme était connu sous le nom d' échange de clés Diffie – Hellman . Puis en 1978, Ron Rivest, Adi Shamir et Leonard Adleman du MIT ont publié l' algorithme RSA . Ceux-ci peuvent être considérés comme le fondement de la cryptographie asymétrique.

Par rapport au cryptage symétrique, dans le cryptage asymétrique , il y aura deux clés au lieu d'une. L'une s'appelle la clé publique et l'autre est la clé privée . Théoriquement, lors de l'initiation, nous pouvons générer le Public-Privépaire de clés pour notre machine. La clé privée doit être conservée en lieu sûr et ne doit jamais être partagée avec qui que ce soit. La clé publique, comme son nom l'indique, peut être partagée avec toute personne qui souhaite vous envoyer du texte crypté. Désormais, ceux qui ont votre clé publique peuvent crypter les données secrètes avec. Si la paire de clés a été générée à l'aide de l'algorithme RSA, elle doit utiliser le même algorithme lors du cryptage des données. Habituellement, l'algorithme sera spécifié dans la clé publique. Les données chiffrées ne peuvent être déchiffrées qu'avec la clé privée qui vous appartient.

Source: SSL / TLS pour les nuls partie 1: Ciphersuite, Hashing, Encryption | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )

Ornithorynque anonyme
la source
-3

Cryptage Le but du cryptage est de transformer les données afin de les garder secrètes. Par exemple (envoyer à quelqu'un un texte secret qu'il ne doit lire que, envoyer des mots de passe via Internet).

Au lieu de concentrer la convivialité, l'objectif est de garantir que les données envoyées peuvent être envoyées secrètement et ne peuvent être vues que par l'utilisateur que vous avez envoyé.

Il crypte les données dans un autre format de transformation en un modèle unique, il peut être crypté avec la clé secrète et les utilisateurs qui ont la clé secrète peuvent voir le message en réversible le processus. Par exemple (AES, BLOWFISH, RSA)

Le chiffrement peut simplement ressembler à ceci FhQp6U4N28GITVGjdt37hZN

Hashing In techniquement, nous pouvons le dire comme prenant une entrée arbitraire et produisant une chaîne de longueur fixe.

La chose la plus importante dans ces derniers est que vous ne pouvez pas passer de la sortie à l'entrée. Le processus consiste à prendre une entrée et à la hacher, puis à l'envoyer avec la clé privée de l'expéditeur une fois que le destinataire a reçu, il peut la valider avec la clé publique de l'expéditeur.

Si le hachage est incorrect et ne correspond pas au hachage, nous ne pouvons voir aucune des informations. Par exemple (MD5, SHA .....)

neevan
la source