Final GPN-Version
authorSusanne <ratten@buecherratten.in-berlin.de>
Wed, 18 Jun 2025 06:04:13 +0000 (08:04 +0200)
committerSusanne <ratten@buecherratten.in-berlin.de>
Wed, 18 Jun 2025 06:04:13 +0000 (08:04 +0200)
beamerthemeBuecherrattenTheme.sty
tpm_and_luks-handout.pdf
tpm_and_luks-presentation.pdf
tpm_and_luks.tex

index 84971e06cbcd19c7c914b7eeb455fde9b1a6c1a2..8079985ff3a518ea7b2f08ca35c8e44cbadc35ca 100644 (file)
 }
 
 \def\progressbar@progressbar{} % the progress bar
-\newcount\progressbar@tmpcounta% auxiliary counter
-\newcount\progressbar@tmpcountb% auxiliary counter
-\newdimen\progressbar@pbht %progressbar height
-\newdimen\progressbar@pbwd %progressbar width
-\newdimen\progressbar@tmpdim % auxiliary dimension
 
-\progressbar@pbwd=\linewidth
-\progressbar@pbht=1.5ex
+\newlength{\ratten@progressonsectionpage}
+\newlength{\ratten@progressonsectionpage@linewidth}
 
-% the progress bar
-\def\progressbar@progressbar{%
+\setlength{\ratten@progressonsectionpage@linewidth}{1.5ex}
 
-    \progressbar@tmpcounta=\insertframenumber
-    \progressbar@tmpcountb=\inserttotalframenumber
-    \progressbar@tmpdim=\progressbar@pbwd
-    \multiply\progressbar@tmpdim by \progressbar@tmpcounta
-    \divide\progressbar@tmpdim by \progressbar@tmpcountb
+\def\progressbar@progressbar{%
 
+\setlength{\ratten@progressonsectionpage}{%
+    \textwidth * \ratio{\insertframenumber pt}{\inserttotalframenumber pt}%
+  }%
   \begin{tikzpicture}[rounded corners=2pt,very thin]
-
+  
     \shade[top color=pbgray!20,bottom color=pbgray!20,middle color=pbgray!50]
-      (0pt, 0pt) rectangle ++ (\progressbar@pbwd, \progressbar@pbht);
-
-      \shade[draw=pbblue,top color=pbblue!50,bottom color=pbblue!50,middle color=pbblue] %
-        (0pt, 0pt) rectangle ++ (\progressbar@tmpdim, \progressbar@pbht);
-
+     (0,0) rectangle (\textwidth, \ratten@progressonsectionpage@linewidth);
+    \shade[draw=pbblue,top color=pbblue!50,bottom color=pbblue!50,middle color=pbblue] 
+     (0,0) rectangle (\ratten@progressonsectionpage, \ratten@progressonsectionpage@linewidth);
+    
     \draw[color=normal text.fg!50]  
-      (0pt, 0pt) rectangle (\progressbar@pbwd, \progressbar@pbht
+      (0pt, 0pt) rectangle (\textwidth, \ratten@progressonsectionpage@linewidth
         node[pos=0.5,color=normal text.fg] {\textnormal{%
              \pgfmathparse{\insertframenumber*100/\inserttotalframenumber}%
              \pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}\,\%%
     };
   \end{tikzpicture}%
 }
+\def\inserttotalframenumber{100} %notwendig damit es keine demension Error gibt
 
 \defbeamertemplate*{footline}{ratten theme}
 {%
 \setbeamercovered{transparent}
 
 % %um descripten links auszurichten
-\defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill}
-\setbeamertemplate{description item}[align left]
+\defbeamertemplate{description item}{align left}{\insertdescriptionitem\hfill}
+\setbeamertemplate{description item}[align left]
 
 \setbeamertemplate{itemize items}[triangle]
 
index 03656cb64e56f6aa246a1f7a57becf6e762721c8..7ea941c2c373480de1ebc6208c8089aaf6925be9 100644 (file)
Binary files a/tpm_and_luks-handout.pdf and b/tpm_and_luks-handout.pdf differ
index c1691c70bbb5cca51c555379a08aaa7251b47777..9417f95dfdb3f81f106a180004343345d6dde800 100644 (file)
Binary files a/tpm_and_luks-presentation.pdf and b/tpm_and_luks-presentation.pdf differ
index 05f278cb4b09b35a1b207977e85f578e29931dcb..a5299a0a3cd676d1214ab18b6930a0254c5718bd 100644 (file)
   \item{beschränkt sich auf Zusammenhang mit LUKS}
   \item{beschreibt den praktischen Einsatz}
   \item{alle Beispiel Commands brauchen root-Rechte}
-  \item{Annahme über Zuhörende Menschen:}
-  \begin{itemize}
-    \item{fortgeschrittene Linux User}
-    \item{schon ein paar mal mit der CLI die Festplatte verschlüsselt}
-    \item{Basis-Wissen IT-Security vorhanden}
   \end{itemize}
+  \pause
+  Wer von euch:
+  \begin{itemize}
+    \item{ist fortgeschrittene Linux User?}
+    \item{hat schon ein paar mal mit der CLI die Festplatte verschlüsselt?}
+    \item{hat Basis-Wissen IT-Security?}
   \end{itemize}
   \note{Begriff TPM meint TPM 2.0}
-  \end{frame}
+\end{frame}
 
 \begin{frame}[plain]
 \frametitle<presentation>{Inhaltsverzeichnis}
@@ -74,9 +75,9 @@
     \pause
     \item{kompliziert aufgebaut:}
       \begin{description}
-        \item[plattform] System Hersteller Bereich des TPMs
-        \item[endorsement] TPM Hersteller Bereich und Privacy OWNER (Organisations-Kontrolle), Default Policies
-        \item[\color<2>{amber-yellow}{storage}] Hier können User ihre Keys und Objekte ablegen
+        \item[platform] System Hersteller Bereich
+        \item[endorsement] TPM Hersteller Bereich und Privacy OWNER, Sicherheitsbereich
+        \item[\color<2>{amber-yellow}{storage}] User Bereich für Keys und Objekte
         \item[no hierachy / null] Überlebt keinen Boot, berechnet Zufall, nur für temporäre Keys
       \end{description} 
   \end{itemize}
 \begin{frame}
 \frametitle{Vorteile des TPM unter Linux}
 \begin{itemize}
+\item{der TPM kann nun auch unter Linux genutzt werden}
 \item{Festplatte kann mit dem TPM automatisch entschlüsselt werden}
 \item{TPM kann Passphrase für LUKS ersetzen}
 \item{Kernel, initrd und der Bootprozess können auf Änderungen überwacht werden}
 \item{Entschlüsselung kann gesperrt werden}
-\item{der TPM kann nun auch unter Linux genutzt werden, weitere Features sind in aktiver Entwicklung}
+\item{TPM ist unter Linux in aktiver Entwicklung}
 \end{itemize}
 \end{frame}
 
@@ -179,7 +181,7 @@ echo 5 > /sys/class/tpm/tpm0/ppi/request
 \frametitle{Entschlüsselung an den TPM binden}
 \begin{listing}
 \begin{minted}[escapeinside=||]{console}
-systemd-cryptenroll --tpm2-device=auto --unlock-tpm2-device=auto /dev/vda3  
+systemd-cryptenroll --tpm2-device=auto /dev/vda3  
 |🔐| New TPM2 token enrolled as key slot 2.
 \end{minted}
 \caption{TPM in Keyslot des LUKS headers eintragen}
@@ -238,7 +240,7 @@ Tokens:
   Keyslot:    3
 \end{minted}
 \end{minipage}
-\note[item]{\textbf{Vorsicht} hier ist nicht sichtbar die Entschlüsselung an den PCR 7 gebunden.}
+\note[item]{\textbf{Vorsicht} hier ist per default nicht sichtbar die Entschlüsselung an den PCR 7 gebunden.}
 \end{frame}
 
 \begin{frame}
@@ -277,6 +279,7 @@ NR NAME                SHA256
 |\dots|
 23 application-support 0000000000000000000000000000000000000000000000000000000000000000
 \end{minted}
+\note[item]{PCR-Namen nicht besonders aussagekräftig}
 \note[item]{die Prüfsumme durch ein Update der Firmware verändern?} 
 \note[item]{kommt nie vor: Update der Secure-Boot Zertifikate? shim-signed}
 \note[item]{\dots dann stimmt die Prüfsumme nicht mehr.}
@@ -286,6 +289,7 @@ NR NAME                SHA256
   \frametitle{PCRs im UEFI Mapping}
   \centering
     \includegraphics[height=0.8\paperheight]{TCG-PCRs.png}
+    \note[item]{grüne und blaue Punkte ist jeweils ein PCR in den mehrere Werte vermischt gespeichert ist}
 \end{frame}
 
 
@@ -441,7 +445,7 @@ CREDENTIALS
            Added in version 256.
 |\dots|
 \end{minted}
-\note{Wunsch Idee des Kollegen, wir können prüfen ob User ihre TPM-Pin geändert haben}
+\note{Frage des Kollegen gibt es die Möglichkeit zu prüfen ob die TPM-PIN auf \$ gesetzt ist?}
 \end{frame}
 
 \setbeamercovered{invisible}
@@ -455,9 +459,10 @@ CREDENTIALS
 \item[D] \textcolor<2>{red}{systemd-Directive} \onslide<2->{\textcolor{red}{X}}
 \item[E] \textcolor<2>{red}{Eine Umgebungsvariable} \onslide<2->{\textcolor{red}{X}}
 \item[F] \textcolor<2>{red}{Eine Variable von systemd-creds} \onslide<2->{\textcolor{red}{X}}
-\item[G] \textcolor<2>{gruen}{Ersatz für die Variable TPM2-PIN} \onslide<2->{\textcolor{gruen}{\checkmark}}
+\item[G] \textcolor<2>{gruen}{Ersatz für die Umgebungsvariable TPM2-PIN} \onslide<2->{\textcolor{gruen}{\checkmark}}
 \item[H] \textcolor<2>{gruen}{Ein Credential das innerhalb einer Systemd-Unit verwendet werden kann} \onslide<2->{\textcolor{gruen}{\checkmark}}
 \end{description}
+\note{Frage des Kollegen und was ist das jetzt eigentlich?}
 \end{frame}
 \setbeamercovered{transparent}
 
@@ -507,6 +512,64 @@ Optionen sind list, cat, encrypt, decrypt, user, system
 \note{Note to my inner self: "Manpage lesen hilft gegen Frustration"}
 \end{frame}
 
+\begin{frame}
+\frametitle{Wie funktioniert systemd-creds mit systemd-cryptenroll?}
+\framesubtitle{Dokumentation?}
+\begin{itemize}
+\item{es gibt keine Dokumentation zu finden}
+\pause
+\item{es gibt kein Beispiel zu finden}
+\pause
+\item{systemd-repo auf Github}
+\begin{itemize}
+  \item{Tests durchgesehen}
+  \pause
+  \item{Pull-Request durchsucht}
+\end{itemize}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Eine vage Idee}
+\begin{listing}
+\begin{minted}[breaklines,fontsize=\small]{bash}
+# Add PIN to TPM2 enrollment
+NEWPIN=1234 systemd-cryptenroll --unlock-tpm2-device=auto --tpm2-device=auto --tpm2-with-pin=yes "$IMAGE"
+
+# Add PIN to TPM2 enrollment, through systemd-creds
+systemd-run -p SetCredential=TPM2_PIN:4321 -p DynamicUser=1 -E PIN=1234 --unit=testsuite-70-cryptenroll-creds.service --wait systemd-cryptenroll --unlock-tpm2-device=auto --tpm2-device=auto --tpm2-with-pin=yes "$IMAGE"
+\end{minted}
+\caption{Test aus \#31370 PR (unvollständig)}
+\end{listing}
+\end{frame}
+
+\begin{frame}
+\frametitle{Eine vage Idee, die nicht funktioniert}
+\begin{itemize}
+\item{Aber \dots}
+\pause
+\begin{itemize}
+\item{PR wurde geschlossen, weil schon implementiert über systemd-ask-password-agent}
+\pause
+\item{im restlichen Code kein Test, der das Verhalten prüft}
+\pause
+\item{im Code von systemd-cryptenroll ist ersichtlich, dass systemd-ask-password genutzt wird (in C geschrieben)}
+\end{itemize}
+\end{itemize}
+\note{In den Tests werden nicht dokumentierte Umgebungsvariabeln genutzt, um Passwörter und ähnliches an systemd-cryptenroll zu übergeben, aber das soll nicht produktiv genutzt werden}
+\end{frame}
+
+\begin{frame}[fragile]
+\begin{minted}[escapeinside=||,breaklines,fontsize=\small,breakanywhere]{output}
+systemd-ask-password
+--credential=
+      |\colorbox{inlineheighlight}{Configure a credential to read the password from} - | if it exists. This |\colorbox{inlineheighlight}{may be used in conjunction with the ImportCredential=,}\colorbox{inlineheighlight}{ LoadCredential= and SetCredential= settings}| in unit files. See systemd.exec(5) for details. If not specified, defaults to "password". This |\colorbox{inlineheighlight}{option has no effect if no credentials }\colorbox{inlineheighlight}{directory is passed to the program}| (i.e.  $CREDENTIALS_DIRECTORY is not set) or if the no credential of the specified name exists.
+      Added in version 249.
+\end{minted}
+\pause
+systemd-ask-password hilft das Credential beim User abzufragen, aber damit kann es nicht an systemd-cryptenroll übergeben werden
+\end{frame}
+
 \begin{frame}[fragile]
 \frametitle{systemd-cred in Zusammenhang mit TPM -- Fehler}
 \begin{listing}
@@ -519,12 +582,7 @@ echo -n test | systemd-creds encrypt --name=cryptenroll.passphrase - luks.pass.c
 \vspace{-0.1cm}
 \begin{listing}
 \begin{minted}{console}
-systemd-run -p LoadCredential=cryptenroll.passphrase:/root/cryptenroll.passphrase \
-            -p SetCredential=cryptenroll.new-tpm2-pin:4321\
-            --unit=systemd-cryptsetup@root.service \
-            --wait systemd-cryptenroll \
-            --tpm2-device=auto \
-            --tpm2-with-pin=yes /dev/vda3 
+systemd-run -p LoadCredential=cryptenroll.passphrase:/root/cryptenroll.passphrase -p SetCredential=cryptenroll.new-tpm2-pin:4321 --unit=systemd-cryptsetup@root.service --wait systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/vda3 
 systemd-cryptsetup@root.service: Failed to set up credentials: Protocol error
 \end{minted}
 \vspace{-0.2cm}
@@ -543,16 +601,36 @@ systemd-creds decrypt --name=cryptsetup.tpm2-pin --system cryptsetup.tpm2-pin
 \caption{systemd-creds init und encrypt sowie decrypt}
 \end{listing}
 \begin{listing}
+\pause
 \begin{minted}{bash}
 systemd-run -p SetCredential=cryptenroll.passphrase:test -p SetCredential=cryptenroll.new-tpm2-pin:4321 systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=yes /dev/vda3
 \end{minted}
 \caption{Setzt mit systemd-creds definierte Passphrase}
 \end{listing}
-\note{Mit verschlüsselten Passphrases noch nicht erfolgreich\\}
-\note<beamer>{Wir wissen etwas über den TPM im Bootprocess, wie wir damit die Festplatte ver/entschlüsseln können, was es mit PCRs auf sich hat \dots fehlt noch die restliche Konfiguration}
+\note[item]{Mit verschlüsselten Passphrases noch nicht erfolgreich}
+\note[item]{systemd-cryptenroll mit Credentials ist defninitiv nicht so gedacht, wie ich das hier versucht hab}
+\note[item]<beamer>{Wir wissen etwas über den TPM im Bootprocess, wie wir damit die Festplatte ver/entschlüsseln können, was es mit PCRs auf sich hat \dots fehlt noch die restliche Konfiguration}
 \end{frame}
 
 \section{Konfiguration in System}
+
+\begin{frame}[fragile]
+\frametitle{Konfiguration in der Crypttab}
+\texttt{/etc/crypttab}
+\begin{itemize}
+  \item{systemd-Version $<$ 255}
+    \note[item]{systemd-Version $<$ 255: Zeile auskommentieren, damit systemd das LUKS nicht nochmal entschlüssen will}
+    \begin{minted}{linux-config}
+#dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none luks
+    \end{minted}
+  \item{systemd-Version $>$ 256}
+    \note[item]{systemd-Version $>$ 256: nicht auskommentieren, sondern erweitern:}
+    \begin{minted}{linux-config}
+dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=auto,tpm2-pin=yes  
+    \end{minted}    
+\end{itemize}
+\end{frame}
+
 \begin{frame}[fragile]
   \frametitle{initramfs modifizieren}
   \begin{itemize}
@@ -607,32 +685,15 @@ grub2-mkconfig -o /boot/grub2/grub.cfg # fedora
   \end{itemize}
 \end{frame}
 
-\begin{frame}[fragile]
-\frametitle{Konfiguration in der Crypttab}
-\texttt{/etc/crypttab}
-\begin{itemize}
-  \item{systemd-Version $<$ 255}
-    \note[item]{systemd-Version $<$ 255: Zeile auskommentieren, damit systemd das LUKS nicht nochmal entschlüssen will}
-    \begin{minted}{linux-config}
-#dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none luks
-    \end{minted}
-  \item{systemd-Version $>$ 256}
-    \note[item]{systemd-Version $>$ 256: nicht auskommentieren, sondern erweitern:}
-    \begin{minted}{linux-config}
-dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=auto,tpm2-pin=yes  
-    \end{minted}    
-\end{itemize}
-\end{frame}
-
 \section{Unterschiede bei den Distributionen}
 \begin{frame}
 \frametitle{Welche Unterschiede bezüglich des TPMs gibt es bei Distributionen?}
 \begin{itemize}
   \item{unterschiedliche Tools für initramfs}
   \begin{itemize}
-    \item{Dracut}
-    \note[item]{Dracut: Fedora, OpenSuse}
-    \item{Initramfstools}
+    \item{dracut}
+    \note[item]{dracut: Fedora, OpenSuse}
+    \item{initramfstools}
     \note[item]{initramfstools: Debian, Ubuntu, Archlinux}
     \note[item]{Dracut ist einfacher zu konfigurieren, daher wechseln gerade viele von initramfstools zu dracut}
   \end{itemize}
@@ -653,7 +714,7 @@ dm_crypt-0 UUID=ede52a15-f515-4fed-838d-5433999f3f24 none discard,tpm2-device=au
 \begin{frame}[fragile]
 \frametitle{Debugging mit dem TPM I}
 \framesubtitle{Rätselraten}
-\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht}
+\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?}
 \note<beamer>[item]{Bitte um Handzeichen}
 \begin{minted}{linux-config}
 localhost kernel: Unknown kernel command line parameters "splash BOOT_IMAGE=/vmlinuz-6.8.0-49-generic tpm2-pin=yes", will be passed to user space.
@@ -665,7 +726,7 @@ localhost kernel: Unknown kernel command line parameters "splash BOOT_IMAGE=/vml
 \begin{frame}[fragile]
 \frametitle{Debugging mit dem TPM II}
 \framesubtitle{Rätselraten}
-\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht}
+\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?}
 \note<beamer>[item]{Bitte um Handzeichen}
 \begin{minted}{linux-config}
 localhost systemd-udevd[278]: /usr/lib/udev/rules.d/60-tpm-udev.rules:3 Unknown user 'tss', ignoring.
@@ -677,7 +738,7 @@ localhost systemd-udevd[278]: /usr/lib/udev/rules.d/60-tpm-udev.rules:3 Unknown
 \begin{frame}[fragile]
 \frametitle{Debugging mit dem TPM III}
 \framesubtitle{Rätselraten}
-\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht}
+\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?}
 \note<beamer>[item]{Bitte um Handzeichen}
 \begin{minted}{linux-config}
 systemd[1]: systemd-tpm2-setup-early.service - TPM2 SRK Setup (Early) was skipped because of an unmet condition check (ConditionSecurity=measured-uki).
@@ -689,7 +750,7 @@ systemd[1]: systemd-tpm2-setup-early.service - TPM2 SRK Setup (Early) was skippe
 \begin{frame}[fragile]
 \frametitle{Debugging mit dem TPM IV}
 \framesubtitle{Rätselraten}
-\textbf{Folgende journald Meldung ist durch einen Konfigurationsfehler verursacht}
+\textbf{Wurde folgende journald Meldung durch einen Konfigurationsfehler verursacht?}
 \only<2>{\textcolor{green}{\textbf{\checkmark}}}
 \note<beamer>[item]{Bitte um Handzeichen}
 \begin{minted}[breaklines,fontsize=\footnotesize,breakanywhere,escapeinside=||]{linux-config}
@@ -736,13 +797,22 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented
 \begin{itemize}
 \item{automatischer Wechsel der Entschlüsselungs-Option von PIN zu Passphrase nicht sichtbar}
 \item{keine Updates der PCR Measurements (Ausnahme Archlinux und UKI)}
-\item{systemd-cryptenroll mit TPM ausgelegt für Zusammenspiel mit UKI}
+\item{\texttt{systemd-cryptenroll} mit TPM ausgelegt für Zusammenspiel mit UKI}
 \item{mehrere Versuche die TPM-PIN einzugeben, nur mit \texttt{tpm2-measure-pcr=yes} in \texttt{crypttab}}
+\item{unklar wie die Credentials funktionieren ausserhalb von Units}
+\item{wenn \texttt{SetCredential} nicht funktioniert (fehlerhaftes Passwort, DA-Lockout), sieht es so aus, als wäre das Command erfolgreich gewesen}
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Nachteile des TPM in Bezug auf \texttt{systemd-cryptenroll}}
+\framesubtitle{Debuging}
+\begin{itemize}
 \item{Debugging:}
 \begin{itemize}
-\item{richtige Fehlermeldungen finden}
-\item{verständliche TPM-Fehlercodes}
-\item{fehlerhafte PIN-Eingabe erkennbar}
+\item{richtige Fehlermeldungen finden?}
+\item{verständliche TPM-Fehlercodes?}
+\item{fehlerhafte PIN-Eingabe erkennbar?}
 \end{itemize}
 \item{nur TPM Entschlüsselung wiegt in falscher Sicherheit}
 \note[item]{bei Diebstahl des Rechners ist eine Festplatten-Verschlüsselung mit TPM ohne Pin so sicher wie keine Verschlüsselung}
@@ -762,6 +832,7 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented
     jabber: buecherratten@jabber.in-berlin.de\\
     fediverse: buecherratten@pirati.ca\\
     git-repro:
+    \vspace{-0.5cm}
  \begin{columns}
     \only<beamer>{\begin{column}{0.2\textwidth}
       \qrcode[hyperlink,height=2cm]{http://git.tuxteam.de/gitweb/?p=susannes-git/TPM-LUKS.git;a=shortlog;h=refs/heads/main}
@@ -769,8 +840,7 @@ tpm:session(1):the authorization HMAC check failed and DA counter incremented
     \begin{column}{0.8\textwidth}
       \url{http://git.tuxteam.de/gitweb/?p=susannes-git/TPM-LUKS.git;a=shortlog;h=refs/heads/main}
     \end{column}
-  \end{columns}
-  }
+  \end{columns}}
 \end{frame}
 
 \end{document}