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

Hachage de mot de passe et dérivation de clé : transformez les secrets en charabia sécurisé, optez pour Crypto 8

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 10:01:02159parcourir

Password Hashing and Key Derivation: Turning Secrets into Secure Gibberish, Go 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 !

Hachage de mot de passe : rendre les mots de passe illisibles (même pour nous !)

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 : le smoothie classique avec mot de passe

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 : le smoothie le plus récent et le plus sophistiqué

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
}

Dérivation de clé : transformer les mots de passe en clés cryptographiques

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 : le créateur de clés classique

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 : l'usine à clés

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)
}

Les règles d'or du hachage de mots de passe et de la dérivation de clés

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 :

  1. 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.

  2. 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.

  3. 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.

  4. 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 !

  5. 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.

  6. 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.

  7. 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 !

Quelle est la prochaine étape ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn