sql >> Databasteknik >  >> RDS >> Mysql

Vad är det bästa sättet att lagra känslig data i MySQL?

Seriöst, ANVÄND INTE MySQL:s aes_encrypt() Det är den mest osäkra metoden att använda ett blockchiffer. Den använder ECB-läge, och jag kan ge ett enkelt exempel på varför detta är ett allvarligt misstag.

Vanligt textmeddelande:

Samma meddelande krypterat med ECB-läge (spelar ingen roll vilket chiffer du använder):

EXAKT samma meddelande med CBC-läge (igen, det spelar ingen roll vilket chiffer du använder):

Det finns ännu fler skäl att inte använda mysqls aes_encrypt, framför allt kommer varje enskild fråga du skickar också att ha aes-nyckeln som du använder. Om databasen äventyras kommer angriparen att aktivera loggning och bara hämta din aes-nyckel och dekryptera hela databasen .

Så vad bör du använder? Jag gillar denna klass för närvarande. Den använder CBC-läge med en String2Key-funktion och en IV. Du kan använda primärnyckeln som din IV, varje meddelande måste ha en unik IV. Det är okej om angriparen känner till IV, och om de är sekventiella, så länge blockchifferimplementeringen är säker. Återanvändning av en IV gjorde WEP mycket mindre säker .



  1. Hämta data från lagrad procedur med Entity Framework

  2. PostgreSQL:Query Parallelism in Action

  3. SQL Server Bygg om och omorganisera index

  4. Hur kan jag använda en PostgreSQL-utlösare för att lagra ändringar (SQL-satser och radändringar)