aboutsummaryrefslogtreecommitdiff
path: root/slides/2022-ct-days/src/sigsum.tex
diff options
context:
space:
mode:
Diffstat (limited to 'slides/2022-ct-days/src/sigsum.tex')
-rw-r--r--slides/2022-ct-days/src/sigsum.tex675
1 files changed, 675 insertions, 0 deletions
diff --git a/slides/2022-ct-days/src/sigsum.tex b/slides/2022-ct-days/src/sigsum.tex
new file mode 100644
index 0000000..02b5bd2
--- /dev/null
+++ b/slides/2022-ct-days/src/sigsum.tex
@@ -0,0 +1,675 @@
+\begin{frame}
+ \mktitle{Tweets you can probably relate to}
+ \pause
+ \begin{columns}
+ \begin{column}{0.5\textwidth}
+ \includegraphics[width=\columnwidth]{img/benlaurie/2017}\\\pause
+ \includegraphics[width=\columnwidth]{img/benlaurie/2018}\\\pause
+ \includegraphics[width=\columnwidth]{img/benlaurie/2019}\\\pause
+ \includegraphics[width=\columnwidth]{img/benlaurie/2020}\\\pause
+ \end{column}
+ \begin{column}{0.5\textwidth}
+ \centering
+ \alert{2022?}\\
+ More initatives than can\\
+ be counted on two hands\\
+ \pause
+
+ \vspace{.25cm}
+ \burl{https://binary.transparency.dev}\\
+ ...
+ \end{column}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{Common denominator?}
+ Certificates\\
+ Executable binaries\\
+ Source code\\
+ TPM quotes\\
+ Onion address rulesets\\
+ Official documents\\
+ ...\\
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{Where is the low-hanging fruit?}
+\end{frame}
+
+\begin{frame}
+ \begin{columns}
+ \begin{column}{.4\textwidth}
+ \mktitle{Meet the Sigsum project}
+ \begin{itemize}
+ \item FOSS
+ \item Signed checksums
+ \item Enforcement of logging
+ \item Minimal building block
+ \item ``Transparent key-usage''
+ \end{itemize}
+ \end{column}
+ \begin{column}{.5\textwidth}
+ \centering
+ \includegraphics[width=\columnwidth]{img/sigsum/history}
+ \burl{https://git.sigsum.org/sigsum/tree/doc/history.md}
+ \end{column}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \mktitle{Use-case - Signature Transparency}
+ ``Oh, a new signature was created. That's weird. I'm at the gym.''
+\end{frame}
+
+\begin{frame}
+ \mktitle{Use-case - Binary Transparency}
+
+ ``Oh, that's the key binaries are signed with''\\
+ ``By policy binaries are located at releases.example.com/\$CHECKSUM''
+
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{s/binary/something else/}
+\end{frame}
+
+\begin{frame}
+ \mktitle{Many answers and trade-offs}
+ \vfill
+ \begin{columns}
+ \begin{column}{.3\textwidth}
+ \begin{itemize}
+ \item Purpose of logging
+ \item What is (not) logged
+ \item Auditing, SCTs
+ \end{itemize}
+ \end{column}
+ \begin{column}{.25\textwidth}
+ \begin{itemize}
+ \item Gossip
+ \item Anti-poison
+ \item Anti-spam
+ \end{itemize}
+ \end{column}
+ \begin{column}{.25\textwidth}
+ \begin{itemize}
+ \item Sharding
+ \item Privacy
+ \item Simple API
+ \end{itemize}
+ \end{column}
+ \end{columns}
+ \vfill
+ \alert{Accept latency, no rich metadata, no complicated protocols and parsers}
+\end{frame}
+
+\begin{frame}
+ \mktitle{System overview}
+ \begin{tikzpicture}[
+ -latex,
+ entity/.style = {
+ draw = gray!30,
+ thick,
+ rounded rectangle,
+ fill = white,
+ minimum width = 2cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = white,
+ },
+ system/.style = {
+ draw = gray,
+ thick,
+ rectangle,
+ fill = white,
+ minimum width = 1cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = black,
+ },
+ relation/.style = {
+ draw = none,
+ font = \fontsize{6}{6}\selectfont,
+ },
+ path/.style = {
+ draw,
+ thick,
+ -latex,
+ rounded corners,
+ },
+ ]
+ %%%
+ % Signing
+ %%%
+ \node[entity, fill=darkBlue] (Signer) at (0,0) { Signer };
+ \path[path, dashed] ($ (Signer) + (0,1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ priv\\
+ data\\
+ \end{tabular}
+ }
+ (Signer);
+ \pause
+
+ %%%
+ % Distribution
+ %%%
+ \node[entity, fill=darkPurple] (End-user) at (2.5,-3) {End-user};
+ \path[path, dashed] ($ (End-user) + (0,-1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ policy\\
+ pub
+ \end{tabular}
+ }
+ (End-user);
+ \path[path] (Signer) -| node[relation,above]{data, signature} (End-user);
+ \node[system, above=1cm of End-user] (Distribution) {Distribution};
+ \pause
+
+ %%%
+ % Introduce the log
+ %%%
+ \node[entity, fill=darkGreen, left=3.25cm of Distribution] (Log) {Log};
+ \pause
+
+ %%%
+ % Setup DNS
+ %%%
+ \node[system, below=1cm of Signer] (DNS) {DNS};
+ \path[path, dashed] (Signer) -- node[relation,right]{\hash(pub)} (DNS);
+ \pause
+
+
+ %%%
+ % Add leaf
+ %%%
+ \path[path] (Signer) -| node[relation,above]{add leaf} (Log);
+ \path[path] (DNS) -- node[relation,above]{\hash(pub)} (Log);
+ \pause
+
+ %%%
+ % Witnessing
+ %%%
+ \node[entity, fill=darkRed, below=1cm of Log] (Witness) {Witness};
+ \path[path] (Witness) -- node[relation,left]{cosign} (Log);
+ \pause
+
+ %%%
+ % Collect proof
+ %%%
+ \path[path] (Log) -- node[relation,above,sloped]{proof} (Signer);
+ \node[relation,above=0.25cm of Distribution.40]{proof};
+ \pause
+
+ %%%
+ % Setup monitor
+ %%%
+ \node[entity, fill=darkOrange, below=.75cm of DNS] (Monitor) {Monitor};
+ \path[path, dashed] ($ (Monitor) + (0,-1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ policy\\
+ pub
+ \end{tabular}
+ }
+ (Monitor);
+ \pause
+
+ %%%
+ % Inspect the log
+ %%%
+ \path[path] (Log) -- node[relation,below,sloped,pos=.40]{leaves, proof} (Monitor);
+ \pause
+
+ %%%
+ % Also get the data
+ %%%
+ \path[path] (Distribution) -- node[relation,above,sloped]{data} (Monitor);
+ \end{tikzpicture}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{A step-by-step breakdown}
+\end{frame}
+
+\begin{frame}
+ \mktitle{Signing}
+ \centering
+
+ \begin{tikzpicture}[
+ -latex,
+ entity/.style = {
+ draw = gray!30,
+ thick,
+ rounded rectangle,
+ fill = white,
+ minimum width = 2cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = white,
+ },
+ system/.style = {
+ draw = gray,
+ thick,
+ rectangle,
+ fill = white,
+ minimum width = 1cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = black,
+ },
+ relation/.style = {
+ draw = none,
+ font = \fontsize{6}{6}\selectfont,
+ },
+ path/.style = {
+ draw,
+ thick,
+ -latex,
+ rounded corners,
+ },
+ ]
+ %%%
+ % Signing
+ %%%
+ \node[entity, fill=darkBlue] (Signer) at (0,0) { Signer };
+ \path[path, dashed] ($ (Signer) + (0,1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ priv\\
+ data\\
+ \end{tabular}
+ }
+ (Signer);
+ \end{tikzpicture}
+ \vfill
+ \pause
+
+ \begin{columns}
+ \begin{column}{.5\textwidth}\centering
+ \lstinputlisting[style=CStyle]{img/sigsum/sshsig}
+ \burl{https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.sshsig\#L81}
+ \end{column}
+ \pause
+ \begin{column}{.5\textwidth}\centering
+ \lstinputlisting[style=CStyle]{img/sigsum/sshvalues}
+ \burl{https://git.sigsum.org/sigsum/tree/doc/proposals/2021-11-ssh-signature-format.md}
+ \end{column}
+ \end{columns}
+ \vfill
+
+ \pause
+ \begin{columns}
+ \begin{column}{.33\textwidth}\centering
+ \texttt{ssh-keygen -Y}
+ \end{column}
+ \begin{column}{.33\textwidth}\centering
+ \texttt{signify}
+ \end{column}
+ \begin{column}{.33\textwidth}\centering
+ \texttt{minisign}
+ \end{column}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{Why not support more signing formats and tools?}
+\end{frame}
+
+\begin{frame}
+ \mktitle{Submission}
+ \begin{columns}
+ \begin{column}{0.4\textwidth}
+ \alert{HTTP POST ASCII}
+ \begin{itemize}
+ \item Shard hint
+ \begin{itemize}
+ \item $\in [\mathsf{shard\_start}, \mathsf{now}()]$
+ \end{itemize}
+ \item Message
+ \item Signature
+ \item Public key
+ \item Domain hint
+ \begin{itemize}
+ \item \texttt{\_sigsum\_v0.*} $\rightarrow\hash(\mathsf{pub})$
+ \end{itemize}
+ \end{itemize}
+ \end{column}
+ \uncover<2>{%
+ \begin{column}{.27\textwidth}
+ \alert{Stored leaf (136 bytes)}
+ \begin{itemize}
+ \item Shard hint
+ \item Checksum
+ \item Signature
+ \item Key hash
+ \end{itemize}
+ \vspace{1.4cm}
+ \end{column}
+ }
+ \begin{column}{.33\textwidth}\centering
+ \vspace{-3cm}
+ \hspace{-1cm}
+ \begin{tikzpicture}[
+ -latex,
+ entity/.style = {
+ draw = gray!30,
+ thick,
+ rounded rectangle,
+ fill = white,
+ minimum width = 2cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = white,
+ },
+ system/.style = {
+ draw = gray,
+ thick,
+ rectangle,
+ fill = white,
+ minimum width = 1cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = black,
+ },
+ relation/.style = {
+ draw = none,
+ font = \fontsize{6}{6}\selectfont,
+ },
+ path/.style = {
+ draw,
+ thick,
+ -latex,
+ rounded corners,
+ },
+ ]
+ %%%
+ % Signing
+ %%%
+ \node[entity, fill=darkBlue] (Signer) at (0,0) { Signer };
+ \path[path, dashed] ($ (Signer) + (0,1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ priv\\
+ data\\
+ \end{tabular}
+ }
+ (Signer);
+
+ %%%
+ % Setup DNS
+ %%%
+ \node[system, below=1cm of Signer] (DNS) {DNS};
+ \path[path, dashed] (Signer) -- node[relation,right]{\hash(pub)} (DNS);
+
+ %%%
+ % Introduce the log
+ %%%
+ \node[entity, fill=darkGreen, left=1cm of DNS] (Log) {Log};
+
+ %%%
+ % Add leaf
+ %%%
+ \path[path] (Signer) -| node[relation,above]{add leaf} (Log);
+ \path[path] (DNS) -- node[relation,above]{\hash(pub)} (Log);
+ \end{tikzpicture}
+ \end{column}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \mktitle{Bundling \uncover<2->{and Distribution}}
+ \begin{columns}
+ \begin{column}{0.5\textwidth}
+ \begin{itemize}
+ \item Signer must \textbf{wait} for witnessing\footnotemark[1]
+ \begin{itemize}
+ \item Append-only
+ \item Freshness
+ \item Some simplifications
+ \end{itemize}
+ \item Proof of logging
+ \begin{itemize}
+ \item Cosigned tree head
+ \item Inclusion proof
+ \end{itemize}
+ \end{itemize}
+ \end{column}
+ \begin{column}{.5\textwidth}\centering
+ \begin{tikzpicture}[
+ -latex,
+ entity/.style = {
+ draw = gray!30,
+ thick,
+ rounded rectangle,
+ fill = white,
+ minimum width = 2cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = white,
+ },
+ system/.style = {
+ draw = gray,
+ thick,
+ rectangle,
+ fill = white,
+ minimum width = 1cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = black,
+ },
+ relation/.style = {
+ draw = none,
+ font = \fontsize{6}{6}\selectfont,
+ },
+ path/.style = {
+ draw,
+ thick,
+ -latex,
+ rounded corners,
+ },
+ ]
+ %%%
+ % Setup entities
+ %%%
+ \node[entity, fill=darkBlue] (Signer) at (0,0) { Signer };
+ \node[draw=none, below=1cm of Signer] (DNS) {};
+ \node[entity, fill=darkGreen, left=1cm of DNS] (Log) {Log};
+
+ %%%
+ % Witnessing
+ %%%
+ \node[entity, fill=darkRed, below=1cm of Log] (Witness) {Witness};
+ \path[path] (Witness) -- node[relation,left]{cosign} (Log);
+
+ %%%
+ % Get proof
+ %%%
+ \path[path] (Log) -- node[relation,above,sloped]{proof} (Signer);
+
+ \uncover<2->{
+ %%%
+ % Distribution
+ %%%
+ \node[entity, fill=darkPurple] (End-user) at (2.5,-3) {End-user};
+ \path[path] (Signer) -| node[relation,above]{data, signature} (End-user);
+ \node[system, above=1cm of End-user] (Distribution) {Distribution};
+ \node[relation,above=0.25cm of Distribution.40]{proof};
+ }
+ \end{tikzpicture}
+ \end{column}
+ \end{columns}
+ \footnotetext[1]{\tiny{Originally proposed by Syta et al.: \burl{https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=7546521}}}
+
+ \vfill
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \centering
+ \begin{columns}
+ \begin{column}{.33\textwidth}
+ Example policy
+ \begin{itemize}
+ \item Known logs
+ \item Known witnesses
+ \item M-of-N (co)signatures
+ \end{itemize}
+ \end{column}
+ \begin{column}{.67\textwidth}
+ \mktitle{Verification}
+ \vspace{.5cm}
+ \begin{tikzpicture}[
+ -latex,
+ entity/.style = {
+ draw = gray!30,
+ thick,
+ rounded rectangle,
+ fill = white,
+ minimum width = 2cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = white,
+ },
+ system/.style = {
+ draw = gray,
+ thick,
+ rectangle,
+ fill = white,
+ minimum width = 1cm,
+ font = \fontsize{8}{8}\selectfont,
+ text = black,
+ },
+ relation/.style = {
+ draw = none,
+ font = \fontsize{6}{6}\selectfont,
+ },
+ path/.style = {
+ draw,
+ thick,
+ -latex,
+ rounded corners,
+ },
+ ]
+ %%%
+ % Distribution
+ %%%
+ \node[entity, fill=darkPurple] (End-user) at (2.5,-3) {End-user};
+ \path[path, dashed] ($ (End-user) + (0,-1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ policy\\
+ pub
+ \end{tabular}
+ }
+ (End-user);
+ \path[path] (Distribution) -- node[relation,right]{
+ \begin{tabular}{c}
+ data\\
+ signature\\
+ proof\\
+ \end{tabular}}
+ (End-user);
+ \node[system, above=1cm of End-user] (Distribution) {Distribution};
+
+ %%%
+ % Introduce the log
+ %%%
+ \node[entity, fill=darkGreen, left=3.25cm of Distribution] (Log) {Log};
+
+ %%%
+ % Setup DNS
+ %%%
+ \node[draw=none] (DNS) at ($ (Log) !.5! (Distribution) $) {};
+
+ %%%
+ % Witnessing
+ %%%
+ \node[entity, fill=darkRed, below=1cm of Log] (Witness) {Witness};
+ \path[path] (Witness) -- node[relation,left]{cosign} (Log);
+
+ %%%
+ % Setup monitor
+ %%%
+ \node[entity, fill=darkOrange, below=.75cm of DNS] (Monitor) {Monitor};
+ \path[path, dashed] ($ (Monitor) + (0,-1) $) --
+ node[relation, right] {
+ \begin{tabular}{c}
+ policy\\
+ pub
+ \end{tabular}
+ }
+ (Monitor);
+
+ %%%
+ % Inspect the log
+ %%%
+ \path[path] (Log) -- node[relation,above,sloped,pos=.60]{leaves, proof} (Monitor);
+
+ %%%
+ % Also get the data
+ %%%
+ \path[path] (Distribution) -- node[relation,above,sloped]{data} (Monitor);
+ \end{tikzpicture}
+ \end{column}
+ \end{columns}
+
+ \vfill
+ \alert{No reactive gossip/audit, offline verification by end-users (!)}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \begin{columns}
+ \begin{column}{.5\textwidth}
+ \mktitle{Current status}
+ \begin{itemize}
+ \item Solid foundation, hopefully(!)
+ \item V0 design\footnotemark[1] and API\footnotemark[2] is pretty stable
+ \item Public prototypes, log and witness
+ \item Tooling? Kind of ``pipe into \texttt{curl}''
+ \item \url{https://git.sigsum.org}
+ \end{itemize}
+ \end{column}
+ \begin{column}{.5\textwidth}
+ \centering
+ \includegraphics[width=\columnwidth]{img/sigsum/foundation}
+ \burl{https://bygg.se/valj-ratt-husgrund-till-din-villa/}
+ \end{column}
+ \end{columns}
+ \footnotetext[1]{\burl{https://git.sigsum.org/sigsum/tree/doc/design.md}}
+ \footnotetext[2]{\burl{https://git.sigsum.org/sigsum/tree/doc/api.md}}
+
+ \pause
+ \vfill
+ \centering
+ \alert{Next steps: more feedback, tooling, mature code, SLA for a v0 log, eventually v1 spec}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \begin{columns}
+ \begin{column}{.1\textwidth}
+ \end{column}
+ \begin{column}{.4\textwidth}
+ \mktitle{Take away}
+ \begin{itemize}
+ \item Minimal building block
+ \item Log a signed checksum
+ \item Offline end-user verification
+ \item Many potential use-cases
+ \item Reach out to get involved\footnotemark[1]
+ \end{itemize}
+ \end{column}
+ \begin{column}{.4\textwidth}
+ \includegraphics[width=\columnwidth]{img/thanks}
+ \end{column}
+ \begin{column}{.1\textwidth}
+ \end{column}
+ \end{columns}
+ \footnotetext[1]{\tiny{irc, matrix, email list, etc., are linked from \burl{https://www.sigsum.org}}}
+\end{frame}
+
+\begin{frame}
+ \vfill
+ \mktitle{Q/A}
+\end{frame}