Maison > Article > développement back-end > Hachage de mot de passe et dérivation de clé : transformez les secrets en charabia sécurisé, optez pour Crypto 8
Salut, champion de crypto ! Prêt à plonger dans le monde du hachage de mots de passe et de la dérivation de clés ? Considérez-les comme votre recette secrète pour transformer les mots de passe et les clés en charabia sécurisé et illisible. Voyons comment Go nous aide à créer de la magie cryptographique !
Tout d’abord, parlons du hachage de mot de passe. C'est comme passer des mots de passe dans un mélangeur cryptographique : ce qui en sort ne ressemble en rien à ce qui est entré, et c'est exactement ce que nous voulons !
Bcrypt est comme le smoothie classique du hachage de mot de passe : essayé, testé et toujours délicieux. Voici comment l'utiliser :
import ( "fmt" "golang.org/x/crypto/bcrypt" ) func main() { password := []byte("iLoveCrypto123") // Let's blend this password! hashedPassword, err := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) if err != nil { panic("Our cryptographic blender broke!") } fmt.Printf("Our password smoothie: %x\n", hashedPassword) // Now, let's see if we can recognize our original password err = bcrypt.CompareHashAndPassword(hashedPassword, password) if err != nil { fmt.Println("Nope, that's not our password!") } else { fmt.Println("Yep, that's our password alright!") } }
Argon2 est comme le nouveau smoothie avec tous les superaliments : il est conçu pour être très résistant aux techniques modernes de piratage de mots de passe. Voici comment l'utiliser :
import ( "crypto/rand" "encoding/base64" "fmt" "golang.org/x/crypto/argon2" ) func main() { password := []byte("iLoveCryptoEvenMore456") // First, let's add some salt to our smoothie salt := make([]byte, 16) if _, err := rand.Read(salt); err != nil { panic("Our salt shaker is empty!") } // Now, let's blend our password timeCost := uint32(1) memoryCost := uint32(64 * 1024) threads := uint8(4) keyLength := uint32(32) hash := argon2.IDKey(password, salt, timeCost, memoryCost, threads, keyLength) // Let's encode our smoothie and salt for storage encodedHash := base64.RawStdEncoding.EncodeToString(hash) encodedSalt := base64.RawStdEncoding.EncodeToString(salt) fmt.Printf("Our fancy password smoothie: %s\n", encodedHash) fmt.Printf("Our salt: %s\n", encodedSalt) // To verify, we'd need to decode the salt, reblend with the same recipe, and compare }
Parlons maintenant de la dérivation de clé. C'est comme transformer un simple mot de passe en une clé complexe qui peut déverrouiller nos trésors cryptographiques.
PBKDF2 est comme une vieille machine à tailler les clés fiable. Il prend votre mot de passe et le transforme en une nouvelle clé brillante. Voici comment :
import ( "crypto/rand" "crypto/sha256" "encoding/base64" "fmt" "golang.org/x/crypto/pbkdf2" ) func main() { password := []byte("OpenSesame123") // Let's add some randomness to our key-making process salt := make([]byte, 16) if _, err := rand.Read(salt); err != nil { panic("Our randomness generator broke!") } // Time to make our key iterations := 100000 keyLength := 32 key := pbkdf2.Key(password, salt, iterations, keyLength, sha256.New) // Let's encode our new key and salt encodedKey := base64.RawStdEncoding.EncodeToString(key) encodedSalt := base64.RawStdEncoding.EncodeToString(salt) fmt.Printf("Our shiny new key: %s\n", encodedKey) fmt.Printf("The salt we used: %s\n", encodedSalt) }
HKDF est comme une usine de clés magique qui peut produire plusieurs clés à partir d'un seul secret. C'est parfait lorsque vous avez besoin de plusieurs clés à des fins différentes. Voici comment l'utiliser :
import ( "crypto/sha256" "encoding/base64" "fmt" "golang.org/x/crypto/hkdf" "io" ) func main() { secret := []byte("MySuper SecretValue") salt := []byte("SaltySalt") info := []byte("KeyForEncryption") // Let's start up our key factory keyFactory := hkdf.New(sha256.New, secret, salt, info) // Now, let's produce two 32-byte keys key1 := make([]byte, 32) key2 := make([]byte, 32) if _, err := io.ReadFull(keyFactory, key1); err != nil { panic("Our key factory had a malfunction!") } if _, err := io.ReadFull(keyFactory, key2); err != nil { panic("Our key factory is tired and can't make another key!") } // Let's encode our new keys encodedKey1 := base64.RawStdEncoding.EncodeToString(key1) encodedKey2 := base64.RawStdEncoding.EncodeToString(key2) fmt.Printf("Our first key: %s\n", encodedKey1) fmt.Printf("Our second key: %s\n", encodedKey2) }
Maintenant que vous êtes passé maître dans l'art de transformer des secrets en charabia sécurisé, voici quelques règles d'or à garder à l'esprit :
Utilisez le bon outil pour le travail : Pour les mots de passe, utilisez bcrypt ou Argon2. Pour la dérivation de clé, utilisez PBKDF2 ou HKDF.
Sel au goût : Utilisez toujours un sel unique et aléatoire pour chaque mot de passe ou clé. C'est comme ajouter un ingrédient secret qui rend chaque hash unique.
Ajustez votre recette : choisissez les facteurs de travail appropriés (itérations, coût de la mémoire) en fonction de vos besoins de sécurité et de vos capacités matérielles. C'est comme ajuster le temps et la température de cuisson.
Gardez votre recette secrète : Générez et stockez en toute sécurité vos sels et autres paramètres. Ne laissez personne jeter un œil à vos ingrédients secrets !
Ne jamais servir brut : ne stockez jamais de mots de passe en texte brut ou de clés de cryptage. Servez-les toujours bien hachés ou dérivés.
Le timing est primordial : utilisez les fonctions de comparaison à temps constant lors de la vérification des mots de passe. C'est comme s'assurer de toujours prendre le même temps pour vérifier un mot de passe, qu'il soit bon ou mauvais.
Suivez les tendances : examinez et mettez régulièrement à jour les algorithmes et paramètres que vous avez choisis. La cryptographie est comme la mode : ce qui est sécurisé aujourd'hui ne le sera peut-être pas demain !
Félicitations ! Vous venez de maîtriser l’art de transformer des secrets en charabia sécurisé. Ces techniques sont cruciales pour assurer la sécurité des mots de passe et des clés dans vos applications.
N'oubliez pas que dans le monde de la cryptographie, comprendre ces bases est crucial. C'est comme apprendre les recettes fondamentales de la cuisine : une fois que vous les maîtrisez, vous pouvez créer toutes sortes de plats cryptographiques sécurisés et délicieux !
Alors, que diriez-vous d'essayer de mettre en œuvre un système d'authentification utilisateur sécurisé à l'aide de bcrypt ? Ou peut-être créer un outil de cryptage de fichiers en utilisant des clés dérivées de HKDF ? Le monde du stockage sécurisé des mots de passe et de la gestion des clés est à portée de main ! Bon codage, chef crypto !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!