Programación: Cómo se almacenan las contraseñas de forma segura en los gestores de contraseñas

La seguridad de las contraseñas es una preocupación importante para cualquier usuario de Internet. Los gestores de contraseñas son herramientas útiles que nos permiten almacenar y gestionar de forma segura nuestras contraseñas. Pero, ¿cómo se almacenan realmente estas contraseñas para garantizar su seguridad? En este artículo, exploraremos cómo funcionan los gestores de contraseñas y cómo se almacenan las contraseñas de forma segura en ellos.

¿Qué es un gestor de contraseñas?

Un gestor de contraseñas es una herramienta que nos permite almacenar de forma segura nuestras contraseñas y otra información confidencial, como números de tarjetas de crédito y direcciones. Los gestores de contraseñas suelen cifrar esta información para protegerla de accesos no autorizados.

Cómo se almacenan las contraseñas de forma segura:

Cifrado de contraseñas:

    • Las contraseñas se cifran utilizando algoritmos de cifrado seguros, como AES (Advanced Encryption Standard).
    • El texto cifrado resultante se almacena en la base de datos del gestor de contraseñas.

    Initialization Vector (IV):

      • Se utiliza un IV (Initialization Vector) aleatorio para cifrar cada contraseña.
      • El IV se agrega a los datos antes de cifrarlos y se utiliza para garantizar que el mismo mensaje cifrado con la misma clave no produzca el mismo texto cifrado cada vez que se cifra.

      Clave maestra:

        • Se utiliza una clave maestra para cifrar y descifrar todas las contraseñas almacenadas.
        • La clave maestra puede ser una contraseña que el usuario elige o una clave generada automáticamente.

        Ejemplo de implementación en Python (encriptado y desencriptado)

        import hashlib
        from Crypto.Cipher import AES
        from Crypto.Util.Padding import pad, unpad
        import os 
        
        
        # Función para cifrar la contraseña 
        
        def encrypt_password(password, master_key): 
         # Generar un IV aleatorio 
         iv = os.urandom(16) 
         # IV de 16 bytes para AES 
         # Crear un objeto AES con la clave y el IV 
         cipher = AES.new(master_key, AES.MODE_CBC, iv) 
         # Cifrar la contraseña con el IV 
         ct_bytes = cipher.encrypt(pad(password.encode(), AES.block_size))
         return iv, ct_bytes
        
        # Función para descifrar la contraseña 
        def decrypt_password(iv, ct_bytes, master_key): 
         # Crear un objeto AES con la clave y el IV 
         cipher = AES.new(master_key, AES.MODE_CBC, iv) 
         # Descifrar la contraseña 
         pt = cipher.decrypt(ct_bytes)
         return unpad(pt, AES.block_size).decode() 
        
        
        
        # Contraseña del usuario 
        print("""
        *********************
        GESTOR DE CONTRASEÑAS
        *********************
        """)
        
        # Clave maestra del usuario (por ejemplo, derivada de su PIN o huella dactilar) 
        mi_clave_maestra = input("Introduce la clave maestra de tu gestor de contraseñas: ").encode()
        password = input("Introduce tu nueva contraseña para guardar en el gestor: ")
        
        master_key = hashlib.sha256(mi_clave_maestra).digest() 
        print("Tu clave maestra cifrada: ",master_key)
        
        # Cifrar la contraseña 
        iv, ct_bytes = encrypt_password(password, master_key) 
        
        # Almacenar la contraseña cifrada y el IV en la base de datos 
        stored_password = ct_bytes 
        stored_iv = iv 
        print("Contraseña cifrada y almacenada en la base de datos.")
        #TODO: Guardar en la base de datos
        print("(TODO: Guardar en la base de datos)")
        
        
        # Recuperar la contraseña cifrada y el IV de la base de datos 
        # TODO: Recuperar la contraseña cifrada y el IV de la base de datos
        print("(TODO: Recuperar la contraseña cifrada y el IV de la base de datos)")
        print("Recuperando contraseña cifrada y IV de la base de datos...")
        # Descifrar la contraseña utilizando la clave maestra 
        retrieved_password = decrypt_password(stored_iv, stored_password, master_key) 
        print("Contraseña recuperada:", retrieved_password)
        
        

        Conclusión:

        Los gestores de contraseñas utilizan técnicas avanzadas de cifrado y almacenamiento seguro para proteger las contraseñas de los usuarios. Gracias al cifrado de contraseñas, el uso de Initialization Vectors (IV) y la clave maestra, las contraseñas almacenadas en un gestor de contraseñas están protegidas de accesos no autorizados y garantizan la seguridad y la privacidad de los usuarios.

        Deja un comentario