DCPrijndael, AES Verschlüsselung

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Benutzeravatar
Levario
Beiträge: 48
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.12 FPC 3.2)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

DCPrijndael, AES Verschlüsselung

Beitrag von Levario »

Hallo zusammen,

in meinem letzten Post zur Verschlüsselung habe ich durch euch erfahren das die Prijndael, AES Verschlüsselung wohl die aktuell sicherste ist. In anderen Post hier im Forum wurde das bestätigt.

Meine Software soll eine Datenbankverbindung aufbauen und jenachdem welche IP meine virtuelle Entwicklungsmaschine hat auf der die Datenbank läuft umschalten. das klappt ohne Verschlüsselung auch schon. Dafür möchte ich nun eine AES Passwort Verschlüsselung für die DB Passwörter nutzen. Diese wird vom Nutzer angelegt. Danach kann die Software über verschiedene Einträge die VM suchen und sich mit dem Server und der MariaDB verbinden. Später soll es möglich sein, eine lokale Backup Datenbank zu nutzen für den Fall das kein Server erreichbar ist (Störfall).

Der Nutzer soll die Möglichkeit haben das Passwort anzeigen zu lassen, daher sollte es entschlüsselbar sein.

(1) Im ersten Schritt möchte ich nun das Passwort gut verschlüsselt ablegen. Das bedeutet mit AES verschlüsselt.

Meine Frage an euch.

Wie hat ein Passwort auszusehen?
Wie lang sollte das Passwort sein?
Wie sollte / darf das Passwort gespeichert werden?
Kann ich das verschlüsselte Passwort in eine DB ablegen?
Wie lang sollte der Schlüssel zu verschlüsselung sein?
Ich suche immer nach Büchern oder auch guten Webseiten im Netz (deutsch oder englisch) um mir alles erklären zu lassen. Habt ihr hier Tipps?
Gibt es hier Tutorials Seminare (kostenlos / kostenpflichtig)?

(2) Im zweiten Schritt sollte die Verbindung zu den Servern und Datenbanbken verschlüsselt werden. Z.B VPN, SSL
Was sollte man hier nutzen?
Gibt es gute Lektüre / Internetseiten / Tutorials Seminare die Ihr genutzt habt zu seinem solchen Thema?

Vielen Dank schon mal im Vorraus
Gruß
Levi
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Warf
Beiträge: 1562
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Re: DCPrijndael, AES Verschlüsselung

Beitrag von Warf »

Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
Wie hat ein Passwort auszusehen?
So zufällig wie möglich, Stichwort Entropie und wie bei allem im Leben, je mehr desto besser.
Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
Wie lang sollte das Passwort sein?
So lang wie möglich/zumutbar, siehe Entropie.

Aber um mal ein praktisches beispiel zu geben, ich persönlich benutze immer 20 stellige alphanumerische passwörter ohne sonderzeichen. Der grund dafür ist ganz einfach, wenn ich das passwort mal per hand eingeben muss (z.b. um mich auf meinem Fernseher bei Netflix anzumelden) ist alles über 20 zeichen nicht mehr zumutbar und sonderzeichen erst recht nicht. (Außerdem kann man mit doppelklick ganze worte auswählen, aber die werden an sonderzeichen gebrochen, also mit einem doppelklick kann ich ein alphanumerisches passwort auswählen, aber keins das sonderzeichen enthält)
Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
Wie sollte / darf das Passwort gespeichert werden?
Also die AES verschlüsselten passwörter? Grundsätzlich gilt (auch wenn es glaube ich nicht völlig mathematisch bewiesen werden konnte) das man aus einem AES-Cipherblock keine Informationen über den Schlüssel als auch über den Plaintext Block bekommen kann, d.h. selbst wenn man den Klartext kennt, kann man nicht den schlüssel rekonstruieren, und man kann ohne den Schlüssel nicht den Klartext rekonstruieren.
Problematisch wird es bei mehreren blöcken, da die im ECB modus (jeder block wird einzeln verschlüsselt) blöcke mit gleichen Plaintext den gleichen Schlüsseltext haben, du kannst damit also z.B. rausfinden ob sich bestimmte passwörter wiederholen/öfter vorkommen. Daher können Blockchiffren wie AES in verschiedenen Modi verwendet werden. Wie bereits erwähnt ist der ECB modus das unabhängige verschlüsseln aller Blöcke, wodurch relationen zwischen den Blöcken im Ciphertext erhalten bleiben. Normalerweise wird daher die Nutzung anderer modie wie CBC oder CTR empfohlen, die Technische Richtlinie des BSI die ich im letzten Thread verlinkt habe behandelt das Thema in Abschnit 2.1.2.
DCPCrypt benutzt bereits das empfohlene Verfahren aus Abschnitt B2 zur generierung eines IVs wenn der Modus CBC verwendet wird.
Langer rede kurzer Sinn, es gibt nichts wirklich spezielles vor dem verschlüsseln zu beachten, doch beim verschlüsseln solltest du auf jeden Fall einen der empfohlenen Modi benutzen
Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
Kann ich das verschlüsselte Passwort in eine DB ablegen?
Klar, warum nicht?
Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
Wie lang sollte der Schlüssel zu verschlüsselung sein?
So lang wie möglich und zumutbar. Also ich kann mir ein 20 stelliges passwort gut merken, was ausreicht um meinen Passwortmanager zu entsperren. Mehr als eins würde ich aber nicht merken wollen. Generelle infos zum Thema passwörter wählen: Link
Levario hat geschrieben:
Mi 7. Apr 2021, 22:19
(2) Im zweiten Schritt sollte die Verbindung zu den Servern und Datenbanbken verschlüsselt werden. Z.B VPN, SSL
Was sollte man hier nutzen?
Gibt es gute Lektüre / Internetseiten / Tutorials Seminare die Ihr genutzt habt zu seinem solchen Thema?
Generell empfiehlt es sich dem Datenbankserver nicht direkt vom Internet zugänglich zu machen, sondern in einem Privaten netzwerk mit einer DMZ davor in der dann ein VPN server liegt über den du dann auf die Datenbank zugreifen kannst.
Wenn ich in die Firewall logs von meinem Server schaue sehe ich da dutzende versuche pro sekunde sich anzumelden von irgendwelchen Bots mit chinesischen oder Indischen IP addressen und mein Server ist jetzt nicht grade ein High-Value Target. Du kannst also davon ausgehen das alles was du ans Internet hängt, egal wie unwichtig es scheinen mag, auch angegriffen wird, daher solltest du so nur so wenige services wie möglich öffentlich zugänglich machen.
Abgesehen davon ist es natürlich immer ratsam Transportverschlüsselung zu verwenden (also verschlüsselung zwischen Client und Server), dafür benutzt man TLS (Transport Layer Security), manchmal auch SSL genannt. Moderne Datenbanksysteme wie MySQL oder MariaDB unterstützen das problemlos. Am besten solltest du in deinem Datenbankserver eh eingestellt das nur verbindungen mit TLS 1.2 erlaubt werden und andere verbindungen gar nicht erst angenommen werden.
Bezüglich MySQL: Link
MariaDB: Link

Benutzeravatar
Levario
Beiträge: 48
Registriert: Mo 1. Sep 2014, 14:32
OS, Lazarus, FPC: Windows 10 Pro Laptop (Lazarus 2.0.12 FPC 3.2)
CPU-Target: 64 Bit
Wohnort: Deutschland / NRW

Re: DCPrijndael, AES Verschlüsselung

Beitrag von Levario »

Vielen Dank für die Infos und deine Zeit.
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).

Antworten