Select Git revision
dbs-20240118.tex 14.86 KiB
% dbs-20240118.pdf - Lecture Slides on Databases and Information Security
% Copyright (C) 2024 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Ausfallsicherheit
\documentclass[10pt,t]{beamer}
\usepackage{pgslides}
\newcommand{\vfilll}{\vspace{0pt plus 1filll}}
\newcommand{\underconstruction}{%
\begin{picture}(0,0)
\put(11,1.2){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
\put(11,0.9){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
\end{picture}}
\title{Datenbanken und Datensicherheit}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{18.\ Januar 2024}
\begin{document}
\maketitleframe
\nosectionnonumber{\inserttitle}
\begin{frame}
\shownosectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/dbs}}}%
\item[\textbf{2}] \textbf{Kurzeinführung Unix}
\item[\textbf{3}] \textbf{Kurzeinführung TCP/IP}
\item[\textbf{4}] \textbf{Relationale Datenbanken}
\begin{itemize}
\vspace*{-\smallskipamount}
\item[\textbf{\dots}]
\item[4.11] GUI-Zugriff
\color{medgreen}
\item[4.12] SQL Injection
\item[4.13] Datensicherheit bei Datenbanken
\item[4.14] Sonstige Datenbanken
\end{itemize}
\item[\textbf{5}] \textbf{Kryptographie}
\begin{itemize}
\color{medgreen}
\item[5.1] Einführung
\item[5.2] Symmetrische Verschlüsselung
\item[5.3] Asymmetrische Verschlüsselung
\item[5.4] Signaturen
\vspace*{-\smallskipamount}
\item[\dots]
\end{itemize}
\item[\textbf{6}] \textbf{Netzwerksicherheit}
\item[\textbf{7}] \textbf{Verfügbarkeit}
\item[\textbf{8}] \textbf{Datenschutz}
\end{itemize}
\vfilll
\underconstruction
\end{frame}
\setcounter{section}{3}
\section{Relationale Datenbanken}
\setcounter{subsection}{10}
\subsection{SQL Injection}
\begin{frame}[fragile]
\showsection
\showsubsection
Problem:
\begin{itemize}
\item
Ein böswilliger Benutzer gibt über eine Benutzerschnittstelle
(z.\,B.\ ein Web-Interface) Daten ein (z.\,B.\ einen "`Namen"'),
die Sonderzeichen enthalten, damit sie als SQL-Befehle ausgeführt werden.
\item
Literatur: \url{https://xkcd.com/327/}
\end{itemize}
\medskip
Lösung: Die Benutzerschnittstelle prüft die Daten auf Sonderzeichen\\
und ersetzt diese durch geeignete Escape-Sequenzen
\begin{itemize}
\item
\lstinline[style=cmd]{'} durch \lstinline[style=cmd]{''} ersetzen
\item
Funktion \lstinline[style=cmd]{CHR()}
\item
Viele DBMS verstehen ein vorangestelltes \lstinline[style=cmd]{\}.
\end{itemize}
\medskip
Bessere Lösung: \newterm{Prepared Statements}
\begin{itemize}
\item
\url{https://www.postgresql.org/docs/current/sql-prepare.html}
\item
\url{https://www.w3schools.com/php/php_mysql_prepared_statements.asp}
\end{itemize}
\end{frame}
\subsection{Datensicherheit bei Datenbanken}
\begin{frame}
\showsection
\showsubsection
\begin{itemize}
\item
kein direkter Zugriff von außen auf die Datenbank
\item
feingranulare Benutzerrechte
\item
Software aktuell halten
\item
Prepared Statements
\item
Transportverschlüsselung
\end{itemize}
\end{frame}
\subsection{Sonstige Datenbanken}
\begin{frame}
\showsection
\showsubsection
\begin{itemize}
\item
Eingebettete Datenbanken:\\
Berkeley DB, SQLite\\
Software-Bibliothek, keine Client-Server-Struktur
\item
Nicht-relationale Datenbanken:\\
dokumentenorientierte Datenbanken, noSQL\\
Performanz wichtiger als Konsistenz\\
\textarrow\ Applikationen stärker in Konsistenzprüfung eingebunden
\end{itemize}
\end{frame}
\section{Kryptographie}
\subsection{Einführung}
\begin{frame}
\showsection
\showsubsection
\textbf{Was ist Datensicherheit?}
\smallskip
\begin{minipage}[t]{0.24\textwidth}
\begin{itemize}
\item[] \strut
\item Vertraulichkeit
\item Integrität\\\strut
\item Verfügbarkeit
\end{itemize}
\end{minipage}%
\begin{minipage}[t]{0.25\textwidth}
\begin{itemize}
\item[] (CIA)
\item[] (confidentiality)
\item[] (integrity)\\\strut
\item[] (availability)
\end{itemize}
\end{minipage}\quad
\begin{minipage}[t]{0.45\textwidth}
\begin{itemize}
\item[] \strut
\arrowitem {\only<2->{\color{red}}Verschlüsselung}
\arrowitem Konsistenzprüfungen,\\
Prüfwerte, {\only<2->{\color{red}}Signaturen}
\arrowitem Backups, Ausfallsicherheit
\end{itemize}
\end{minipage}
\bigskip
\begin{itemize}
\item
Identifizierbarkeit
(Authentizität, Nichtabstreitbarkeit, Zurechenbarkeit)\\
\textarrow\ {\only<2->{\color{red}}Passwörter},
{\only<2->{\color{red}}Signaturen}\\[\smallskipamount]
bzw.
\item
Anonymität
(plausible Abstreitbarkeit, Nichtzurechenbarkeit)\\
\textarrow\ Pseudonymisierung, Anonymisierung,\\
\phantom{\textarrow\ }{\only<2->{\color{red}}Verschlüsselung}, Steganographie
\pause\hfill\textcolor{red}{\textarrow\ Kryptographie}
\end{itemize}
\end{frame}
\subsection{Symmetrische Verschlüsselung}
\begin{frame}
\showsection
\textbf{Kryptographie}
\begin{itemize}
\item
Verschlüsselung: symmetrisch, asymmetrisch, hybrid
\item
Hashes: Einwegfunktionen, Salt
\item
Signaturen, Zertifikate
\item
Schlüsselaustausch
\end{itemize}
\bigskip
\showsubsection
\vspace{-\medskipamount}
\begin{itemize}
\item
Derselbe Schlüssel zum Ver- und Entschlüsseln
\item
Beispiele:
{\only<6->{\color{red}}Cäsar-Chiffre},
{\only<6->{\color{red}}Monoalphabetische Substitution}\pause,\\
One Time Pad\visible<4->{,}\\
\visible<4->{%
\only<5->{\emph{spezielle }}Pseudozufallszahlengenerator\only<5->{en},
Startwert als Schlüssel\only<5->{:}\\
\visible<5->{
{\only<6->{\color{red}}Enigma},
{\only<6->{\color{red}}DES},
{\only<6->{\color{orange}}3DES},
{\only<6->{\color{orange}}RC4},
IDEA,
Blowfish,
TwoFish,
CAST,
AES,
\dots
}
}
\pause
\item
Problem: Schlüsselaustausch
\pause[7]
\item
Lösung: \newterm{asymmetrische Verschlüsselung}
\end{itemize}
\end{frame}
\subsection{Asymmetrische Verschlüsselung}
\begin{frame}
\showsubsection
\vspace{-\medskipamount}
\begin{itemize}
\item
verschiedene Schlüssel zum Ver- und Entschlüsseln:\\
öffentlicher und privater Schlüssel
\item
Prinzip: mathematische Operation,\\
einfach durchzuführen, schwer rückgängig zu machen
\medskip
\item
Beispiel: $N = p \cdot q$ -- einfacher als Primfaktorzerlegung von $N$
\textarrow\ RSA\\[\smallskipamount]
$73 \cdot 97 = 7081$: geht notfalls noch im Kopf\\
Primfaktorzerlegung von $7081$: mindestens schriftlich, besser mit Rechner
\medskip
\item
Beispiel: $c = b^a$ -- einfacher als $a = \log_b c$
\textarrow\ Diffie-Hellman, ElGamal\\[\smallskipamount]
$7^5 = 16807$: geht notfalls noch im Kopf\\
$\log_7 16807$: mindestens schriftlich, besser mit Rechner
\medskip
\arrowitem
Details: Algorithmen und Datenstrukturen
\pause
\bigskip
\item
Nachteil: wesentlich aufwendiger und daher langsamer\\
als symmetrische Verschlüsselung
\arrowitem
\newterm{hybride Verschlüsselung}: nur Schlüsselaustausch asymmetrisch,\\
eigentliche Verschlüsselung symmetrisch
\end{itemize}
\end{frame}
\subsection{Signaturen}
\begin{frame}
\showsubsection
\vspace{-\medskipamount}
\begin{itemize}
\item
\newterm{kryptographische Hash-Funktion\/}:
leicht auszurechnen, schwer zu manipulieren
\item
asymmetrisch: \newterm{Signatur}\\
Hash-Wert mit privatem Schlüssel verschlüsseln,\\
mit öffentlichem Schlüssel entschlüsseln
\item
symmetrisch: \newterm{Message Authentication Code\/} (MAC)\\
z.\,B.\ Hash-Wert über Nachricht + geheimer Schlüssel
\end{itemize}
\pause
\bigskip
Angriffsmöglichkeit: \newterm{Man-in-the-middle\/}-Angriff\\
Beim Schlüsselaustausch anderen Schlüssel unterschieben\\
\textarrow\ Sorgfalt beim Schlüsselaustausch
\pause
\bigskip
\textbf{Praxis-Beispiele}
\begin{itemize}
\item
SSH
\item
HTTPS
\item
OpenPGP
\end{itemize}
\end{frame}
\subsection{Authentifizierung}
\begin{frame}
\showsubsection
\begin{itemize}
\item
Zugangsdaten:\hfill
\makebox(0,0)[tr]{%
\begin{minipage}[t]{7cm}
\vspace*{-0.5cm}
\begin{center}
\includegraphics[width=7cm]{Authentisieren-authentifizieren.png}\\
\tiny
Bild: \url{https://de.wikipedia.org/wiki/Datei:Authentisieren-authentifizieren.png}
\end{center}
\end{minipage}}\\
Benutzername, Passwort
\smallskip
\item
Problem:\\
Zugangsdaten mitlesen
\item
Lösung:\\
verschlüsselte Verbindung
\only<1>{%
\smallskip
\item
Problem:\\
Zugangsdaten speichern
\item
Lösung:\\
Hash-Wert statt Passwort\\
speichern
\smallskip
\item
Problem:\\
gleiche Passwörter identifizierbar
\item
Lösung:\\
\newterm{Salt}
}
\only<2->{%
\item
Lösung:\\
\newterm{Challenge-Response-Authentifizierung}\\
Beispiel: HTTP Digest
\vfilll
\begin{itemize}
\item
gemeinsamer geheimer Schlüssel (Passwort)
\item
Server schickt \newterm{Nonce\/} an Benutzer
\item
Benutzer schickt Hash über [Passwort + Nonce] an Server
\item
Server berechnet denselben Hash
\textarrow\ Authentifizierung erfolgreich
\item
Nonce nur einmal verwenden!\\
("`number used once"')
\end{itemize}
}
\end{itemize}
\end{frame}
\subsection{Quantencomputer}
\begin{frame}
\showsubsection
\begin{itemize}
\item
Prinzip: $2^n$ Berechnungen gleichzeitig\\
($n$ = Registerbreite)
\arrowitem
Klassisch schwierige Probleme werden einfacher.
\item
Beispiel: Primfaktorzerlegung:
$\mathcal{O}(n^3)$
statt $\mathcal{O}\bigl(2^{\sqrt{n\log n}}\bigr)$
\item
Problem für asymmetrische Verschlüsselungsalgorithmen,\\
z.\,B.\ RSA (Primfaktorzerlegung), ElGamal (diskreter Logarithmus)
\item
weniger problematisch für symmetrische Verschlüsselungsalgorithmen
\arrowitem
Suche nach Post-Quanten-Kryptographie\\
Beispiel: McEliece-Kryptosystem
\arrowitem
\newterm{Forward Secrecy}\\
Kompromittierung betrifft nur zukünftige Kommunikation,\\
nicht bereits vergangene.
\vfilll
Beispiel:
\begin{itemize}
\item
RSA nur für Authentifizierung
\item
Austausch eines Sitzungsschlüssels via Diffie-Hellman
\item
Kommunikation über Sitzungsschlüssel (symmetrisch)
\item
Sitzungsschlüssel nur einmal verwenden!
\end{itemize}
\end{itemize}
\end{frame}
\section{Netzwerksicherheit}
\begin{frame}
\showsection
\begin{itemize}
\item
Firewall: nur bestimmte IP-Adressen / Ports / Inhalte zulassen
\item
VPN: verschlüsselte Verbindung von Netzwerken\\
über ansonsten unsichere Verbidung (Internet)
\item
\newterm{Intrusion Detection System}
\end{itemize}
\bigskip
Anonymität
\begin{itemize}
\item
Beispiel: Tor -- Zwiebel-Routing
\begin{itemize}
\item
Tor-Browser
\item
Tails
\end{itemize}
\item
Beispiel: Corona-Warn-App
\end{itemize}
\bigskip
Cross-Site-Scripting
\end{frame}
\begin{frame}
\showsection
Die menschliche Komponente
\begin{itemize}
\item
Bequemlichkeit
\item
Social Engineering
\begin{itemize}
\item
\newterm{Phishing}
\item
KI-Sprachmodelle
\end{itemize}
\end{itemize}
\bigskip
\begin{quote}
Es gibt für jedes menschliche Problem\\
immer eine wohl bekannte Lösung -\\
sauber, einleuchtend, und falsch.
\begin{flushright}
\em
Henry Louis Mencken, The Divine Afflatus, 1917\\
\small\url{https://de.wikiquote.org/wiki/Lösung}
\end{flushright}
\end{quote}
\end{frame}
\section{Verfügbarkeit}
\begin{frame}
\showsection
Wann wird wirklich auf den Datentäger geschrieben?
\begin{itemize}
\item
DBMS: Persistenz-Einstellungen
\item
\newterm{Write Ahead Log\/} (WAL)\\
\newterm{Journaling-Dateisysteme}
\item
\newterm{CAP-Theorem}
\end{itemize}
Daten sicher aufbewahren
\begin{itemize}
\item
Backup
\item
RAID
\end{itemize}
Hochverfügbarkeit
\begin{itemize}
\item
allgemein: \newterm{High-Availability-Cluster}
\item
speziell: Datenbank-Cluster: Replikation über mehrere Server
\end{itemize}
\end{frame}
\section{Datenschutz}
\begin{frame}
\showsection
\begin{itemize}
\item
Schutz vor mißbräuchlicher Datenverarbeitung
\item
informationelle Selbstbestimmung
\item
Persönlichkeitsrecht
\item
Privatsphäre
\end{itemize}
\bigskip
Datenmißbrauch ermöglicht hohe Gewinne
\begin{itemize}
\arrowitem
viel Interesse an persönlichen Daten
\arrowitem
"`Datenschutz hemmt den Fortschritt!"'%
\begin{picture}(0,0)
\color{red}\thicklines
\put(-2.54,0.1){\line(1,0){2.54}}
\end{picture}\,
die persönliche Bereicherung
\end{itemize}
\bigskip
\begin{itemize}
\item
DSGVO
\end{itemize}
\end{frame}
\end{document}