bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
mysql_aes

Encriptació AES a MySQL

L'encriptació AES és reversible (permet desencriptar), a diferència de SHA2 que és una funció de hash destructiva. Els strings codificats en AES seran recuperables si es té la clau d'encriptació.

En AES es fa servir la mateixa clau per encriptar i desencriptar, d'aquí que es classifiqui com a sistema d'encriptació de clau simètrica. Altre algorismes com RSA son de clau asimètrica, ja que requereixen una clau diferent per encriptar i desencriptar (sistema de clau pública/privada). Els asimètrics permeten certes utilitats però són computacionalment més feixucs.

Referències:


Exemple bàsic

L'exemple més senzill seria el següent:

ULL! El block_encryption_mode = 'aes-256-ecb'; és important

mysql> SET block_encryption_mode = 'aes-256-ecb';
mysql> select AES_ENCRYPT("text","mykey");
+----------------------------------------------------------+
| AES_ENCRYPT("text","mykey")                              |
+----------------------------------------------------------+
| 0x51C4607C0A37C8B875DE31682E4E6212                       |
+----------------------------------------------------------+
1 row in set (0,00 sec)

mysql> select cast(AES_DECRYPT(0x51C4607C0A37C8B875DE31682E4E6212,"mykey") as char);
+-----------------------------------------------------------------------+
| cast(AES_DECRYPT(0x51C4607C0A37C8B875DE31682E4E6212,"mykey") as char) |
+-----------------------------------------------------------------------+
| text                                                                  |
+-----------------------------------------------------------------------+
1 row in set (0,00 sec)


Exemple: encriptació per a vot secret

En aquest exemple volem encriptar el vot en una aplicació de votacions per tal de que sigui secret. Això significa que ningú que no sigui l'usuari pot veure el què ha votat, ni tan sols l'administrador del sistema.

Tenim invitacions a l'enquesta, i enlloc de posar la opció de vot directament, la separarem en una taula de votacions i encriptarem el id_invitació amb una «sal» que només és accessible a l'usuari, ja que la codifiquem amb la pròpia contrasenya. El sysadmin no podrà relacionar la invitació amb la votació, però sí que podrà fer el recompte.

L'encriptació dle ID_INVITACIÓ la podem expressar així, concatenant el ID_INVITACIO amb la sal de l'usuari:

ID_INVITACIO_ENC = SHA2( ID_INVITACIO + SAL_USUARI )

Creació de la BD de votacions

create database vota;
use vota;
SET block_encryption_mode = 'aes-256-ecb';
 
create table usuaris (
	id int auto_increment primary key,
	nom varchar(100),
	email varchar(100),
	contrasenya varchar(512),
	enc_salt varbinary(300)
);
 
create table invitacions (
	id int,
	id_usuari int,
	id_enquesta int,
	FOREIGN KEY (id_usuari) REFERENCES usuaris(id)
);
 
create table vots (
	id_invitacio_enc varbinary(300),
	id_opcio int
);
 
-- usuaris amb contrasenya i sal per a encriptació
-- la sal s'encripta amb la contrasenya
-- "pepasalt" i "manolosalt" haurien de ser strings aleatoris
insert into usuaris values(1, "pepa", "[email protected]",
    SHA2("pepapass",512), AES_ENCRYPT("pepasalt","pepapass"));
insert into usuaris values(2, "manolo", "[email protected]",
    SHA2("manolopass",512), AES_ENCRYPT("manolosalt","manolopass"));
 
-- invitació a enquesta
-- values(id_invitacio,id_usuari,id_enquesta)
insert into invitacions values(10,1,11);
insert into invitacions values(20,2,22);
 
-- votació: insertem la id_invitacio_enc i la id_opcio
-- s'encripta la id_invitacio amb la sal de cada usuari
-- per ex: id_invitacio+sal => "10"+"pepasalt"
insert into vots values (SHA2(CONCAT(CONVERT(10,char),"pepasalt"),512),111);
insert into vots values (SHA2(CONCAT(CONVERT(20,char),"manolosalt"),512),222);

Les dades quedarien així:

mysql> select * from usuaris;
+----+--------+-----------------+--------------+---------------------+
| id | nom    | email           | contrasenya  | enc_salt            |
+----+--------+-----------------+--------------+---------------------+
|  1 | pepa   | [email protected]   | 67109992...  | 0x5CDBCDE0E5B34F... |
|  2 | manolo | [email protected] | b1d731d8...  | 0x188CC1D6391244... |
+----+--------+-----------------+--------------+---------------------+

mysql> select * from invitacions;
+------+-----------+-------------+
| id   | id_usuari | id_enquesta |
+------+-----------+-------------+
|   10 |         1 |          11 |
|   20 |         2 |          22 |
+------+-----------+-------------+

mysql> select * from vots;
+------------------------------+----------+
| id_invitacio_enc             | id_opcio |
+------------------------------+----------+
| 0x613835326530353...         |      111 |
| 0x653837363036323...         |      222 |
+------------------------------+----------+


Accedir als vots d'un usuari

Podem accedir a les opcions votades per un usuari només si disposem de la seva contrasenya, que ens desencriptarà la sal que ens permet relacionar id_invitacio_enc (encriptada) de la taula de vots amb la id de la taula d'invitacions.

Així, l'usuari podria veure què ha votat i canviar el seu vot (però no ho podria fer un sysadmin).

SET block_encryption_mode = 'aes-256-ecb';
 
-- exemple de query per cercar les votacions
set @id_usuari = 2;
set @pass_usuari = "manolopass";
 
-- l'usuari obté la seva sal amb la password
set @sal = (select cast(aes_decrypt(enc_salt,@pass_usuari) as char)
    from usuaris where id=@id_usuari);
 
-- cerquem totes les votacions de l'usuari
select i.id_usuari , i.id_enquesta, v.id_opcio
from vots v, invitacions i
where i.id_usuari = @id_usuari
  and v.id_invitacio_enc = SHA2(CONCAT(CONVERT(i.id,char),@sal),512);

Amb el què obtindrem, en cas de que l'usuari sigui el id=1:

+-----------+-------------+----------+
| id_usuari | id_enquesta | id_opcio |
+-----------+-------------+----------+
|         2 |          22 |      222 |
+-----------+-------------+----------+
mysql_aes.txt · Darrera modificació: 2024/02/02 17:47 per enric_mieza_sanchez