MySQL-Datenbanksicherheit – Verschlüsselungsmethoden

Die Sicherheit von Informationen in einer Datenbank beinhaltet den Schutz der Daten von Vorgängen und Zugriffen, die die Existenz, Konsistenz und Integrität der Daten gefährden.

Dies wird durch Mechanismen erreicht, die es dem Anwendungscode ermöglichen, den Zugriff und die Benutzerrollen zu steuern.

Achtung
Wenn ein System kompromittiert wird, liegt dies daran, dass andere Sicherheitsmechanismen vor der Datenbank fehlgeschlagen sind.

Beispielsweise sollte ein System, das mit brachialer Gewalt angegriffen wird, nach dem dritten fehlgeschlagenen Versuch den Zugriff oder die IP blockieren und keine unendlichen Versuche zulassen.

Jeder Algorithmus oder jede Verschlüsselungsmethode hat die Funktion, die Daten so zu verschlüsseln, dass sie schwer lesbar und nicht lesbar sind.

Ver- und Entschlüsselung Base64 (Advanced Encryption Standard)

Die Base64-Verschlüsselung basiert auf ASCII-Zeichen. Sie wird zum Verschlüsseln von Informationen in E-Mails verwendet. Sendeinformationen in einem Netzwerk werden normalerweise zum Verschlüsseln von Daten verwendet, bei denen es sich nicht um Text, Bilder, Anhänge usw. handelt.

Schauen wir uns ein Beispiel an, wie Base64 mit pHp codiert und decodiert wird:

 <? php $ text = 'Tutorial zur Base64-Verschlüsselung'; ?> <? php $ encrypted = base64_encode ($ text); echo "<strong> Verschlüsselt: </ strong>". $ verschlüsselt. "<br> <br>"; $ decrypted = base64_decode ($ verschlüsselt); echo "<strong> Entschlüsselt: <strong>". $ entschlüsselt. "<br>"; 

encrypted-mysql.jpg

Auf diese Weise können wir die verschlüsselten Daten nur dann speichern und entschlüsseln, wenn wir sie benötigen. In jedem Fall handelt es sich um eine unsichere Methode.

MD5-Verschlüsselung und -Entschlüsselung (Message Digest 5)

Die Verschlüsselungsmethode MD5 oder Summary of Message 5 ist ein 128-Bit-Verschlüsselungsalgorithmus, der häufig zum Verschlüsseln von Kennwörtern wie WordPress, Prestashop und Joomla verwendet wird.

Es kann nicht dekodiert werden, obwohl einige Websites Wörter sammeln und in MD5 konvertieren, um eine Datenbank mit möglichen Kodierungen zu erhalten.

encrypted-mysql2.jpg

Wir können eine Tabelle sehen, deren Schlüssel im MD5-Format codiert ist. Schauen wir uns ein Beispiel an, wie man MD5 mit pHp codiert und decodiert:

 <? php $ texto = "Lernprogramm zur Verschlüsselung"; echo "32 Zeichen verschlüsselt:" .md5 ($ text). "<br> <br>";?> 

Sehen wir uns ein Beispiel für die Verwendung eines Schlüssels für die Zugriffskontrolle an . Immer aus der Datenbank extrahieren wir die codierten Daten und vergleichen sie mit der vom zuvor codierten Benutzer eingegebenen:

 <strong> Benutzeranmeldung: </ strong> <? php $ login = "miclave"; if (md5 ($ login) == "3d3232b2f031f070d9ba5969b87776ff") { echo "<br> Zugriff erlaubt"; } ?> 

Ver- und Entschlüsselung AES (Advanced Encryption Standard)

Die Verwendung der AES-Verschlüsselung in MySQL ist die sicherste, die seit Version 5.6 im Datenbankmanager enthalten ist. Sie verwendet zwei Funktionen: AES_ENCRYPT und AES_DECRYPT, die direkt in SQL-Anweisungen verwendet werden. AES ist schnell, einfach per Code in PHP zu implementieren, verwendet wenig Ram, so dass diese Methode zu einem Verschlüsselungsstandard wird und derzeit in vielen großen Systemen und Websites verwendet wird.
Diese Methode verwendet verschiedene Parameter zum Verschlüsseln von Informationen:

  • Verschlüsseln: Gibt die Verschlüsselungsstufe 128.256 an
  • Passwort: ist ein verschlüsselter Schlüssel, der sich aus zwei anderen Schlüsseln zusammensetzt, einem des Systems und dem anderen des Benutzers.
  • Daten: sind die zu verschlüsselnden Daten.
  • Modus: Ein Verschlüsselungsmodus ist eine Art Verschlüsseler, der Blockinformationen verwendet und diese dann verschlüsselt. Es gibt viele Verschlüsselungsmodi, die wichtigsten werden wir sehen:
    • EZB-Modus oder elektronisches Codebuch: Geeignet für zufällige Daten, z. B. die Verschlüsselung anderer Schlüssel.
    • CBC-Modus oder Verschlüsselungsblockkette: Besonders geeignet für die Dateiverschlüsselung.
  • Iv: ist ein Initialisierungsvektor, ist ein Satz von Bits, die verwendet werden, um eine Blockverschlüsselung zu ermöglichen.
  • MAC-Schlüssel: ist ein Nachrichtenauthentifizierungscode (MAC), ein verschlüsselter Schlüssel, der zur Gewährleistung der Integrität und Authentizität der Nachricht verwendet wird.
See also  Planen Sie Jobs unter Linux mit den Befehlen Crontab und Crontab

Nach der Verschlüsselung wird ein weiterer Schlüssel mit dem Ergebnis der Verschlüsselung und dem geheimen Schlüssel erstellt. Insgesamt werden 4 Schlüssel verschlüsselt, bevor die Informationen angezeigt werden.
Die Funktion in PHP wäre die folgende:

 $ encrypted_text = mcrypt_encrypt ($ encrypt, $ key, $ data_to_crypt, $ mode, $ iv) 

Wir haben eine Klasse in PHP erstellt, um eine hochsichere Verschlüsselungs- und Entschlüsselungsfunktion zu implementieren.
Wir haben einen geheimen privaten Schlüssel erstellt, der mit Base4 verschlüsselt werden kann, jedoch nicht länger als 32 Zeichen ist

 Passwort: miSitio @ web2157: Nachhilfe, Verschlüsselung Base64: bWlTaXRpb0B3ZWIyMTU3OnR1dG9yaWFsZW5jcmlwdGFjaW9u 
 <? php Klasse Encriptador { // Geheimschlüssel des Genres // Privater geheimer Schlüssel in Base64 konvertiert // mySite @ web2157: Nachhilfelehrer public static $ clavesecreta = 'bWlTaXRpb0B3ZWIyMTU3OnR1dG9yaWFsZW5jcmlwdGFjaW9u'; // Funktion Mit AES-256 verschlüsseln public static function encrypt ($ datatoacrypt, $ key, $ keysystem = null) { // Wenn kein automatischer Systemschlüssel erstellt wurde, verwende ich den geheimen Standardschlüssel if ($ keysystem === null) { $ keysystem = $ secret key; } // Ich generiere den Mac-Schlüssel, indem ich die beiden Schlüssel kombiniere, verschlüssele und die ersten 32 Zeichen nehme $ key = substr (Hash ('sha256', $ key. $ keysystem), 0, 32); // Ich definiere die Art und den Modus der Verschlüsselung $ encryption type = MCRYPT_RIJNDAEL_256; $ mode = MCRYPT_MODE_CBC; // Ich berechne die Größe des Startvektors $ ivectortotal = mcrypt_get_iv_size ($ Verschlüsselungsart, $ Modus); // Ich erstelle den Startvektor $ ivector = mcrypt_create_iv ($ ivectortotal, MCRYPT_DEV_URANDOM); // Ich verschlüssele die Daten und füge den Startvektor hinzu $ encrypted = $ ivector. mcrypt_encrypt ($ verschlüsselungstyp, $ passwort, $ datenverschlüsselung, $ modus, $ ivector); // Ich erstelle den Mac-Schlüssel, um die Verschlüsselung zu authentifizieren $ clavemac = hash_hmac ('sha256', $ verschlüsselt, $ key); // Ich gebe das endgültige verschlüsselte Ergebnis zurück $ clavemac zurückgeben. $ verschlüsselt; } // Funktion mit AES-256 entschlüsseln .. public static function decrypt ($ datatodecrypt, $ key, $ keysystem = null) { // Wenn kein automatischer Systemschlüssel erstellt wurde, verwende ich den geheimen Standardschlüssel if ($ keysystem === null) { $ keysystem = $ secret key; } // Ich generiere den Mac-Schlüssel, indem ich die beiden Schlüssel kombiniere, verschlüssele und die ersten 32 Zeichen nehme $ key = substr (Hash ('sha256', $ key. $ keysystem), 0, 32); # Wir generieren und vergleichen den MAC-Schlüssel $ keymactotal = 64; // maximal 64 Zeichen $ clavemac = substr ($ datatodecrypt, 0, $ keymactotal); $ datoadescifrar = substr ($ datatodecrypt, $ keymactotal); $ clavemacgenerada = hash_hmac ('sha256', $ datoadescifrar, $ clave); if ($ clavemac! == $ keymacgenerated) { // Die Nachricht ist nicht authentisch, die Mac-Tasten sind unterschiedlich return false; } $ encryption type = MCRYPT_RIJNDAEL_256; $ mode = MCRYPT_MODE_CBC; $ ivectortotal = mcrypt_get_iv_size ($ Verschlüsselungsart, $ Modus); $ ivector = substr ($ datoadescifrar, 0, $ ivectortotal); $ datoadescifrar = substr ($ datoadescifrar, $ ivectortotal); // Wir entschlüsseln die Informationen mit allen generierten Parametern $ decrypted = mcrypt_decrypt ($ Verschlüsselungstyp, $ Passwort, $ zu entschlüsselnde Daten, $ Modus, $ ivector); return $ entschlüsselt; } // Generiert einen 32-stelligen automatischen Schlüssel System zur Generierung von Schlüsseln für öffentliche Funktionen ($ maximum = 0) { $ characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef @ $% & / () = ¡+ ghijklmnopqrstuvwxyz0123456789'; $ key = ''; $ totalcaracteres = strlen ($ characters); while ($ totalcaracteres -> 0) { $ key. = $ characters [mt_rand (0, $ totalcaracteres-1)]; } return $ key; } } // Klasse beenden // Wir wenden die erstellte Klasse an, um einen Text zu ver- und entschlüsseln $ Encrypt = new Encryptor (); $ datos = "Lernprogramm für Verschlüsselung und Sicherheit"; echo "<strong> Zu verschlüsselnde Daten: </ strong>". $ data. "<br> <br>" ;; $ key = $ Encrypt → Schlüsselsystem erzeugen (32); $ encrypted = $ Encrypt-> encrypt ($ data, $ key); Echo "<strong> Verschlüsselte Daten: </ strong>". $ verschlüsselt. "<br> <br>"; $ decrypted = $ Encrypt-> decrypt ($ verschlüsselt, $ Schlüssel); echo "<strong> Entschlüsselte Daten: </ strong>". $ decrypted. "<br> <br>"; ?> 

Bei MySQL ab Version 5.6 ist die native Unterstützung für AES enthalten , sodass wir Daten einfügen und gleichzeitig verschlüsseln können, zum Beispiel:

See also  Dateneingabe mit AngularJS validieren

Wir verschlüsseln das Passwort eines Benutzers mit der AES_ENCRYPT- Funktion

 INSERT INTO clients (ID, Schlüssel, E-Mail) VALUES (1, AES_ENCRYPT ($ data, $ keysystem), [email protected]); 

Um die Tabellenclients zu konsultieren und Daten zu entschlüsseln, verwende ich die Funktion AES_DECRYPT

 SELECT-ID, CAST (AES_DECRYPT (Kennwort, $ keysystem)), E-Mail von Clients; 

Die CAST- Funktion nimmt ein Ergebnis oder ein Feld und konvertiert das Ergebnis in einen Datentyp, z. B. Zahl in Text.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *