Modelos
Para habilitar Enigma en los modelos de Eloquent, utilizaremos el trait HasEnigma
.
Cifrado
Podemos especificar que campos queremos cifrar con $enigmaEncryptable
, los campos especificados se cifraran con CipherSweet según la configuración elegida y nos permitirá buscar sobre ellos si así lo queremos.
https://ciphersweet.paragonie.com/security#informal-security-analysis
También tenemos disponible el cifrado por defecto de Laravel utilizando $laravelEncryptable
, utiliza de manera automática las funciones encrypt()
y decrypt()
. Sobre este tipo de cifrado no es posible realizar la búsqueda.
Búsqueda
Para habilitar la búsqueda sobre el campo deseado, es necesario crear, por cada uno de ellos, la función que se encargará de como crear los indices que nos permitirán encontrar el valor deseado.
La configuración mínima del indice, necesita del tamaño mínimo del valor en bits (múltiple de 8) a guardar, y el algoritmo a utilizar fast o slow ->fast(false)
.
Por ejemplo, hello@domain.com
tiene un total de 128 bits, lo que significa que el tamaño mínimo para poder guardar su valor, en un indice, es de 128 bits, en cambio, enigma@domain.com
, tiene un total de 136 bits, por lo que necesitaremos un tamaño mínimo de 256 bits.
La búsqueda siempre se realizará sobre el valor exacto, no es posible encontrar el valor utilizando LIKE.
https://ciphersweet.paragonie.com/php#understanding-ciphersweets-features-and-limitations
Debido a las limitaciones del indice B-Tree, el máximo tamaño de bits permitido es de 2048 bits, no es posible utilizar indices FullText debido a las limitaciones al combinar indices.
https://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html
Para superar esta limitación es necesario extender Enigma y hacer uso del sistema de almacenamiento que se requiera.
Transformers
Los transformers tienen la función de normalizar el valor a la hora de crear o buscar el indice. Si queremos que la búsqueda del valor no sea sensible a mayúsculas y minúsculas, utilizaremos el transformer Lowercase
para crear el indice o buscarlo.
Es importante remarcar que los transformers se aplican siempre que realicemos la búsqueda, lo que significa que no deberemos realizar operaciones complejas ya que pueden afectar al rendimiento al encontrar el valor.
Strategies
Las strategies por lo contrario, solo se utilizan a la hora de crear el indice, su finalidad es poder crear indices extra para poder afinar la búsqueda.
Por ejemplo, podríamos generar un indice extra donde solo se guardaría el dominio de un correo electrónico y así poder filtrarlos.
Cambien disponemos la clase LikeSearch, que crea un indice por cada combinación de caracteres de una cadena pudiendo simular la funcionalidad del LIKE.
Last updated