Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
mysql_aes [2024/02/01 19:20] enric_mieza_sanchez [Exemple bàsic] |
mysql_aes [2024/02/02 17:47] (actual) enric_mieza_sanchez [Exemple: encriptació per a vot secret] |
||
---|---|---|---|
Línia 1: | Línia 1: | ||
====== Encriptació AES a MySQL ====== | ====== Encriptació AES a MySQL ====== | ||
- | L' | + | L' |
+ | |||
+ | En AES es fa servir la mateixa clau per encriptar i desencriptar, | ||
+ | |||
+ | {{ https:// | ||
Referències: | Referències: | ||
Línia 12: | Línia 16: | ||
===== Exemple bàsic ===== | ===== Exemple bàsic ===== | ||
- | L' | + | L' |
+ | <WRAP important> | ||
+ | ULL! El '' | ||
+ | </ | ||
<WRAP prewrap> | <WRAP prewrap> | ||
Línia 35: | Línia 42: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | |||
+ | \\ | ||
+ | |||
+ | ===== 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' | ||
+ | |||
+ | {{db_vota.png}} | ||
+ | |||
+ | Tenim invitacions a l' | ||
+ | |||
+ | L' | ||
+ | |||
+ | ID_INVITACIO_ENC = SHA2( ID_INVITACIO + SAL_USUARI ) | ||
+ | |||
+ | ==== Creació de la BD de votacions ==== | ||
+ | <WRAP prewrap> | ||
+ | <code mysql> | ||
+ | create database vota; | ||
+ | use vota; | ||
+ | SET block_encryption_mode = ' | ||
+ | |||
+ | 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' | ||
+ | -- " | ||
+ | insert into usuaris values(1, " | ||
+ | SHA2(" | ||
+ | insert into usuaris values(2, " | ||
+ | SHA2(" | ||
+ | |||
+ | -- invitació a enquesta | ||
+ | -- values(id_invitacio, | ||
+ | insert into invitacions values(10, | ||
+ | insert into invitacions values(20, | ||
+ | |||
+ | -- votació: insertem la id_invitacio_enc i la id_opcio | ||
+ | -- s' | ||
+ | -- per ex: id_invitacio+sal => " | ||
+ | insert into vots values (SHA2(CONCAT(CONVERT(10, | ||
+ | insert into vots values (SHA2(CONCAT(CONVERT(20, | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Les dades quedarien així: | ||
+ | < | ||
+ | mysql> select * from usuaris; | ||
+ | +----+--------+-----------------+--------------+---------------------+ | ||
+ | | id | nom | email | contrasenya | ||
+ | +----+--------+-----------------+--------------+---------------------+ | ||
+ | | 1 | pepa | [email protected] | ||
+ | | 2 | manolo | [email protected] | b1d731d8... | ||
+ | +----+--------+-----------------+--------------+---------------------+ | ||
+ | |||
+ | mysql> select * from invitacions; | ||
+ | +------+-----------+-------------+ | ||
+ | | id | id_usuari | id_enquesta | | ||
+ | +------+-----------+-------------+ | ||
+ | | 10 | 1 | 11 | | ||
+ | | 20 | 2 | 22 | | ||
+ | +------+-----------+-------------+ | ||
+ | |||
+ | mysql> select * from vots; | ||
+ | +------------------------------+----------+ | ||
+ | | id_invitacio_enc | ||
+ | +------------------------------+----------+ | ||
+ | | 0x613835326530353... | ||
+ | | 0x653837363036323... | ||
+ | +------------------------------+----------+ | ||
+ | |||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | ==== Accedir als vots d'un usuari ==== | ||
+ | |||
+ | Podem accedir a les opcions votades per un usuari només si disposem de la seva contrasenya, | ||
+ | |||
+ | Així, l' | ||
+ | |||
+ | <code mysql> | ||
+ | SET block_encryption_mode = ' | ||
+ | |||
+ | -- exemple de query per cercar les votacions | ||
+ | set @id_usuari = 2; | ||
+ | set @pass_usuari = " | ||
+ | |||
+ | -- l' | ||
+ | set @sal = (select cast(aes_decrypt(enc_salt, | ||
+ | from usuaris where id=@id_usuari); | ||
+ | |||
+ | -- cerquem totes les votacions de l' | ||
+ | select i.id_usuari , i.id_enquesta, | ||
+ | from vots v, invitacions i | ||
+ | where i.id_usuari = @id_usuari | ||
+ | and v.id_invitacio_enc = SHA2(CONCAT(CONVERT(i.id, | ||
+ | </ | ||
+ | |||
+ | Amb el què obtindrem, en cas de que l' | ||
+ | |||
+ | < | ||
+ | +-----------+-------------+----------+ | ||
+ | | id_usuari | id_enquesta | id_opcio | | ||
+ | +-----------+-------------+----------+ | ||
+ | | 2 | 22 | 222 | | ||
+ | +-----------+-------------+----------+ | ||
+ | </ | ||