Skip to content
Snippets Groups Projects
Select Git revision
  • d48edcd327479e7a230e1a34684f251a5cd47337
  • master default protected
  • 2018ws
  • 2017ws
  • 2016ws
5 results

sum-03.c

Blame
  • Forked from Peter Gerwinski / hp
    Source project has a limited visibility.
    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}