3. Dezember 2013 | Leave a comment Hallo zusammen, auch diese Woche möchte ich darauf eingehen wie wir sensible Daten sicher ablegen können. Letzte Woche habe ich bereits ein paar Dinge zum Thema „Passwörter“ (und Hashing) angesprochen – Diese Woche geht es dagegen um „Verschlüsselung„. Der Vollständigkeit halber: Der Unterschied zwischen Hashing und Verschlüsselung Beim Hashing wird aus den betroffenen Daten eine „Prüfsumme“ errechnet. Diese Prüfsumme kann uns Helfen ein Datenpaket zu validieren, wenn wir es von einem unbekannten Server herunterladen (Ihr habt bestimmt schon alle mal den Begriff „MD5 Checksum“ gehört). Aus einer Prüfsumme können niemals die Original-Daten zurückgerechnet werden! Verschlüsselungen arbeiten dagegen anders – Ein Datensatz kann beliebig oft ver- und entschlüsselt werden, dabei kann man entweder einfache Funktionen nutzen (äquivalent zu MD5) oder etwas stärkere Verschlüsselungen denen wir einen eigenen „Schlüssel“ mitgeben (man könnte das vielleicht mit „normalem Hashing“ und „Hashing mit Salt“ vergleichen). Wie funktioniert Verschlüsselung? Bestimmt haben einige von euch früher mal eine „Geheimsprache“ verwendet – Beispielsweise könnte man das Alphabet andersrum verwenden (a = z, b = y, …, y = b, z = a) oder alle Buchstaben um x verschieben (a = g, b = h, c = i, …). Im Grunde handelt es sich hier bereits um eine Verschlüsselung – Auf den ersten Blick erkennt man nämlich nur einen wilden Buchstabensalat. Verschlüsselungen in der IT arbeiten ähnlich, allerdings sehr viel komplexer – Hier werden (ähnlich wie bei den Hashes) komplizierte Algorithmen verwendet. Wofür Verschlüsseln? Im Gegensatz zum einfachen „Hash“ müssen wir Daten vielleicht wieder auslesen können, weil es sich um einen Login (Benutzer + Passwort) oder sonstige Datensätze handelt (Adressen, Kontodaten, …). Sinn und Zweck des ganzen ist es, die Daten nicht im Klartext abzuspeichern. Zu diesem Thema möchte ich einige Dinge aufzählen, auf die ihr unbedingt achten solltet! Wenn ihr sensible Daten verschlüsseln möchtet, informiert euch bitte unbedingt im Internet welche Funktionen eure Programmiersprache bereitstellt und welche sicher sind. Wenn ihr eine „Multi-User“ Applikation laufen habt, sollte jeder User seinen eigenen Schlüssel besitzen – Andernfalls ist es auch nicht verkehrt für jeden Datensatz einen eigenen Schlüssel zu haben Je nach Größe und Komplexität solltet ihr auf verteilte Systeme setzen – das hat folgenden entscheidenden Vorteil: Sollte sich jemand (wie auch immer) in ein System einschleusen, hat diese Person nur Zugriff auf einen eurer Bereiche – also z.B. die verschlüsselten Daten. Damit alleine kann man allerdings nicht viel anfangen wenn die benötigten Schlüssel im anderern System hinterlegt sind! Sonstige Tipps? Wie vorhin kurz erwähnt, solltet ihr -egal welche Programmiersprache ihr verwendet- einfach mal ein paar Minuten investieren und im Internet recherchieren welches die sichersten Funktionen sind um Daten zu verschlüsseln. Eine weitere Anlaufstelle können Frameworks und deren Communities sein – diese bringen häufig gute und sichere Ansätze mit und unterstützen euch in eurem Projekt. Verteilte Systeme Auf diesen Punkte möchte ich noch kurz gesondert eingehen. Verteilte Systeme stellen in der Regel eine gewisse „Grundsicherheit“ dar: Solltet ihr Passwörter oder Bankdaten in eurer Datenbank hinterlegen, kann es schon helfen wenn ihr die Schlüssel (oder Salts beim Hashen) im Dateisystem hinterlegt. Besser wären natürlich physikalisch voneinander getrennte Systeme, die über eigene Logindaten verfügen. Selbst wenn ein Angreifer eure Datenbank auslesen kann, hat er nur einen von zwei (oder mehr) Teilen. Wie letzte Woche schon angemerkt: Dies ist kein „Rezept“ für den perfekten Schutz, es sollte euch lediglich ein paar Möglichkeiten aufzeigen die ihr dann in euer Projekt einbauen könnt! Solltet ihr noch Tipps oder Ideen haben, lasst es mich bitte über ein Kommentar wissen. Hiermit verabschiede ich mich für diese Woche von euch und hoffe euch auch nächste Woche wieder hier begrüßen zu dürfen. Bis dahin wünsche ich euch eine angenehme Woche und natürlich „Happy Coding“.