Encriptar y desencriptar en Magento

por David Abad
Encriptar y desencriptar Magento

Cualquier información sensible debe almacenarse encriptada para una mayor seguridad. Magento proporciona una serie de clases y funciones para facilitar el cifrado y descifrado de cualquier dato sensible para poder almacenarlo con seguridad.

Por defecto, Magento utiliza el algoritmo AES-256 para la encriptación de todos los datos que pueden requerir su desencriptación en algún momento (p.ej. tarjetas de crédito). 

Por otro lado, para cifrar datos que no van a requerir desencriptación (p.ej. contraseñas de usuarios), Magento permite generar hashes utilizando el algoritmo MD5, SHA-256 y Argon 2ID13

Encriptar y desencriptar datos en Magento

Para facilitar la encriptación de datos en Magento, se proporciona la clase \Magento\Framework\Encryption\Encryptor que puede inyectarse desde nuestro código para cifrar y descifrar cualquier información:

<?php

class MyClass
{
    public function __construct(
        protected \Magento\Framework\Encryption\Encryptor $encryptor
    ) {}
    
    public function encrypt(string $data): string
    {
        return $this->encryptor->encrypt($data);
    }
    
    public function decrypt(string $data): string
    {
        return $this->encryptor->decrypt($data);
    }
}

Generar hash de datos en Magento

Además de la encriptación vista anteriormente, la clase Encryptor de Magento también permite generar hashes de datos que no pueden descifrarse. Este tipo de encriptación es utilizada por Magento para almacenar las contraseñas de los usuarios utilizando algoritmos como MD5, SHA-256 o Argon2.

<?php

class MyClass
{
    public function __construct(
        protected \Magento\Framework\Encryption\Encryptor $encryptor
    ) {}
    
    public function hash(string $data): string
    {
        return $this->encryptor->getHash($data);
    }
}

Como resultado de esta encriptación, se generará un hash con el siguiente formato:

password_hash:salt:version<n>:version<n>

Este formato permite identificar rapidamente los algoritmos de hash utilizados y, en caso de ser necesario, permite una migración de los hashes a un algoritmo más seguro utilizando el siguiente comando proporcionado por el CLI de Magento:

bin/magento customer:hash:upgrade

Configuración de clave de encriptación

Los algoritmos de cifrado explicados utilizan una clave de encriptación (crypt key) almacenada en el fichero app/etc/env.php.

Esta clave es generada durante la instalación del sistema Magento y toda la información cifrada almacenada en base de datos requiere de esta clave para su utilización. Es decir, si se cambia manualmente esta clave o se copia la base de datos a un sistema que cuenta con una clave de encriptación diferente, los datos cifrados serán incompatibles y no podrán utilizarse.

Sin embargo, Magento incluye una sección en el administrador que permite modificar esta clave de encriptación de forma controlada desde System -> Other Settings -> Manage Encryption Key:

Magento: Manage Encryption Key

Magento: Manage Encryption Key

Es importante mencionar que, a pesar de que este asistente realiza una conversión de los datos previamente cifrados, es posible que exista información cifrada en el sistema que quede corrupta después del proceso. Por lo que es recomendable realizar una copia de seguridad de la base de datos y de la crypt key existente antes de lanzar este proceso.  

Recomendaciones de seguridad

A continuación se incluyen una serie de recomendaciones para mantener un sistema Magento seguro y proteger los datos de los usuarios:

  • Utilizar los algoritmos de encriptación que proporciona Magento siempre que se trabaje con información sensible en módulos personalizados.
  • Utilizar el algoritmo Argon2 para el cifrado de contraseñas (Se requiere la instalación de la extensión PHP Sodium). 
  • Nunca compartir los hashes generados en nuestro proyecto (p.ej. contraseñas cifradas).
  • Nunca compartir la crypt key de nuestro proyecto.
  • Nunca compartir ni permitir el acceso al fichero env.php de nuestro proyecto.
  • Nunca almacenar información sensible en base de datos sin encriptación.

A pesar de que los algoritmos de hash no permiten descifrar los datos encriptados, existen herramientas que permiten crackear estos datos mediante fuerza bruta, pudiendo llegar a obtener la contraseña descifrada. Por ello, conviene siempre utilizar algoritmos de encriptación fuertes como Argon2.

Déjanos tu email para recibir contenido interesante en tu bandeja de entrada, cada mes.

¡No hacemos spam!

Otros artículos