diff --git a/20240118/Authentisieren-authentifizieren.png b/20240118/Authentisieren-authentifizieren.png new file mode 100644 index 0000000000000000000000000000000000000000..1ef3814ca0343ae315442f161ad2eb9fb9db2348 Binary files /dev/null and b/20240118/Authentisieren-authentifizieren.png differ diff --git a/20240118/Zeichen_123.pdf b/20240118/Zeichen_123.pdf new file mode 120000 index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116 --- /dev/null +++ b/20240118/Zeichen_123.pdf @@ -0,0 +1 @@ +../common/Zeichen_123.pdf \ No newline at end of file diff --git a/20240118/dbs-20240118.pdf b/20240118/dbs-20240118.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d1e36e8ca9bb4d888ac85240828244e16e49a081 Binary files /dev/null and b/20240118/dbs-20240118.pdf differ diff --git a/20240118/dbs-20240118.tex b/20240118/dbs-20240118.tex new file mode 100644 index 0000000000000000000000000000000000000000..90f855739a19ae9fb6c490d70df5c3532df021bb --- /dev/null +++ b/20240118/dbs-20240118.tex @@ -0,0 +1,632 @@ +% 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} + \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 Vrschlü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}\bigl((\log n)^3\bigr)$ + 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} diff --git a/20240118/logo-hochschule-bochum-cvh-text-v2.pdf b/20240118/logo-hochschule-bochum-cvh-text-v2.pdf new file mode 120000 index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8 --- /dev/null +++ b/20240118/logo-hochschule-bochum-cvh-text-v2.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum-cvh-text-v2.pdf \ No newline at end of file diff --git a/20240118/logo-hochschule-bochum.pdf b/20240118/logo-hochschule-bochum.pdf new file mode 120000 index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1 --- /dev/null +++ b/20240118/logo-hochschule-bochum.pdf @@ -0,0 +1 @@ +../common/logo-hochschule-bochum.pdf \ No newline at end of file diff --git a/20240118/pgslides.sty b/20240118/pgslides.sty new file mode 120000 index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64 --- /dev/null +++ b/20240118/pgslides.sty @@ -0,0 +1 @@ +../common/pgslides.sty \ No newline at end of file