sql >> Database >  >> RDS >> Mysql

Wat is de beste methode om encryptiesleutels te gebruiken/op te slaan in MySQL?

Ik weet niet zeker of het gebruik van MySQL ingebouwde codering de beste oplossing voor uw probleem zou zijn.

PHP's M_CRYPT pakket wordt als redelijk goed beschouwd en het geeft u de flexibiliteit om het algoritme te kiezen dat het beste bij uw behoeften past.

Het opslaan van uw sleutel op een andere server heeft één groot voordeel:de sleutel staat niet op dezelfde machine als de versleutelde gegevens. Dus zolang de aanvaller niet genoeg controle heeft over de gecompromitteerde machine, kunnen ze niet bij de sleutel komen.
Als de aanvaller volledige controle krijgt over de machine waarop de gegevens zijn opgeslagen, kunnen ze hoogstwaarschijnlijk een query uitvoeren de webservice voor de sleutel.

Het verzenden van de sleutel van de ene machine naar de andere opent echter een heel nieuw gebied dat moet worden beveiligd. Waarschijnlijk met meer sleutels en meer encryptielagen, waardoor de kans op fouten groter wordt.

De andere optie is om het wachtwoord in te voeren bij het opstarten van de webserver en het alleen in het geheugen te bewaren.

Mogelijke oplossing
Als u een oplossing ziet die de volgende methode gebruikt voor het versleutelen van bestanden voor gebruikers met webtoegang (ik weet niet zeker wat uw omgeving is, maar het kan nuttig zijn):

  • Bij het aanmaken van een gebruiker wordt een lange willekeurige sleutel toegewezen aan de nieuwe gebruiker.
  • Deze willekeurige sleutel wordt opgeslagen in een gecodeerde kolom in het gebruikersrecord.
    (alleen deze kolom is gecodeerd om de prestaties van de rest van het record niet te beïnvloeden! )
  • De codering van de willekeurige-sleutelkolom wordt gedaan met 1 hoofdwachtwoord, opgeslagen in een bestand of in het geheugen.
    (De betere optie is om het wachtwoord in te voeren bij het staren van uw webserver en alleen op te slaan in het geheugen. )
    (Een andere benadering zou zijn om de gebruiker een wachtwoord te laten invoeren en dat te gebruiken om de willekeurige-sleutelkolom te coderen/decoderen, maar ik weet niet zeker of dat de veiligheid zou verhogen of verlagen )
  • Elk document dat versleuteld moet worden, wordt versleuteld met de willekeurige sleutel voor die gebruiker en vervolgens op schijf opgeslagen.
  • Documenten worden met minimale rechten in het bestandssysteem opgeslagen.

De voordelen van deze aanpak zijn:
1. De willekeurige sleutel wordt versleuteld in de database. Je hebt dus nog steeds de extra beveiliging van de database-server, in combinatie met de versleutelde column.2. Documenten worden opgeslagen met verschillende sleutels, als de aanvaller een sleutel in handen krijgt, wordt slechts een deel van de documenten gecompromitteerd.

Echter:
Als de aanvaller het hoofdwachtwoord in handen krijgt en leestoegang heeft tot de gebruikerstabel, is het hele systeem opnieuw kapot.



  1. JSON retourneren werkt niet goed

  2. Een MySQL-tabel exporteren naar een CSV-bestand

  3. Unieke beperking op kolom maken voor reeds bestaande tabel - SQL Server / TSQL-zelfstudie, deel 97

  4. MySQL slaat eerste 10 resultaten over