initial commit WIP-1
authorKristian Fiskerstrand <kf@sumptuouscapital.com>
Sat, 6 Aug 2016 16:03:44 +0000 (18:03 +0200)
committerKristian Fiskerstrand <kf@sumptuouscapital.com>
Sat, 6 Aug 2016 16:03:44 +0000 (18:03 +0200)
CreatePDF [new file with mode: 0755]
Presentation.tex [new file with mode: 0644]
abstract.txt [new file with mode: 0644]

diff --git a/CreatePDF b/CreatePDF
new file mode 100755 (executable)
index 0000000..52b0710
--- /dev/null
+++ b/CreatePDF
@@ -0,0 +1,17 @@
+#!/bin/bash
+NAME="2016-09_OpenPGP-Conf-sks-keyservers.pdf"
+
+git describe --tags --long > gitid.txt
+
+rm ${NAME}
+pdflatex Presentation
+pdflatex Presentation
+mv "Presentation.pdf" "${NAME}"
+rm *.aux
+rm *.bbl
+rm *.blg
+rm *.log
+rm *.out
+rm *.toc
+rm *.snm
+rm *.nav
diff --git a/Presentation.tex b/Presentation.tex
new file mode 100644 (file)
index 0000000..1e5dd00
--- /dev/null
@@ -0,0 +1,260 @@
+\documentclass{beamer}
+
+\usetheme{Frankfurt}
+
+\usepackage[normalem]{ulem}
+
+\usepackage{calc}
+\usepackage{lmodern}
+\usepackage{mdwlist}
+\usepackage{tikz}
+\usepackage{multirow}
+\usepackage{float}
+\usepackage{multicol}
+\usepackage[utf8]{inputenc}
+\usepackage{subfigure}
+\usepackage{booktabs,datatool}
+\usepackage{enumitem}
+
+\definecolor{KFBlue}{RGB}{139,186,230}
+
+\setbeamercolor{section in head/foot}{fg=black, bg=KFBlue}
+\setbeamercolor{frametitle}{fg=blue, bg=white}
+\setbeamercolor{upper separation line head}{bg=KFBlue}
+
+\useinnertheme{circles}
+\usefonttheme{serif}
+
+\beamertemplatenavigationsymbolsempty
+
+\title{An update on the sks-keyservers.net services}
+\author{Kristian Fiskerstrand\\\textsc{94CB AFDD 3034 5109 5618 35AA 0B7F 8B60 E3ED FAE3}}
+\date{9 September 2016}
+
+\usepackage{hyperref}
+\hypersetup{hyperindex=true,hyperfootnotes=true,linktocpage=true,colorlinks=true,linkcolor=blue,urlcolor=red,citecolor=magenta}
+
+\setbeamertemplate{caption}[numbered]
+
+\addtobeamertemplate{navigation symbols}{}{%
+    \usebeamerfont{footline}%
+    \usebeamercolor[fg]{footline}%
+    \hspace{1em}%
+    \insertframenumber/\inserttotalframenumber
+}
+
+\AtBeginSection[]
+{
+  \begin{frame}
+    \frametitle{Table of Contents}
+    \tableofcontents[currentsection]
+  \end{frame}
+}
+
+\begin{document}
+
+\frame{\titlepage}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{sks-keyservers.net}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}[allowframebreaks]
+\frametitle{Introduction}
+       \begin{itemize}[label={$\rhd$}]
+               \item \url{http://sks-keyservers.net} provide a convenient way for end users of OpenPGP to retrieve and update keys from synchronised and responsive HKP keyservers
+               \item The project was started in 2006
+               \item The servers are mainly based on SKS (p.~\ref{f:sks}).
+               \item Several pools of keyservers are available
+               \begin{description}[style=multiline,leftmargin=4cm,font=\textbf]
+                       \item[pool.] Main pool (on port 11371)
+                       \item[hkps.pool.] TLS enabled pool (HKPS) (more on p.~\ref{f:tls})
+                       \item[\{NA,EU,OC\}.pool.] Geographical pools (more on p.~\ref{f:geo})
+                       \item[p80.pool.] Firewall friendly, servers responding on port 80. 
+                       \framebreak
+                       \item[subset.pool.] Supports latest functionalities. Currently SKS 1.1.5 only; ensuring support for e.g. Elliptic Curve keys c.f. RFC6637. 
+                       \item[ha.pool.] High availability. Historically included only instances that were running behind reverse proxies, but since making that a hard requirement for the main pool it is currently not different - however keeping it and intend to re-use for clustered setups. 
+               \end{description} 
+               \framebreak
+               \item These pools are functioning as a DNS Round Robin
+               \item Currently $\sim 110$ servers included in the main pool and another $\sim 60$ detected but rejected (inclusion criteria on p.~\ref{f:inclusion})
+               \item The pools are accessible using both IPv4 and IPv6 (with some special pools limited to a single stack, e.g. ipv\{4,6\}.pool.sks-keyservers.net)
+               \item GnuPG defaults to keys.gnupg.net which is a DNS CNAME to pool.sks-keyservers.net
+       \end{itemize}
+\end{frame}
+
+\begin{frame}[allowframebreaks]
+       \frametitle{Quick intro to keyservers, protocols etc}
+       \label{f:sks}
+       \begin{itemize}[label=$\rhd$]
+               \item Synchronizing Key Server (\textbf{SKS}) is the most used keyserver today. 
+               \item One notable feature of SKS is the implementation of the fast reconciliation algorithms that were part of Yaron Minksy's PhD thesis. 
+               \item SKS replaced PKS that synchronized using email and did not include the updated features of OpenPGP presented in RFC4880.
+               \item SKS is written in objective caml, and the main development team is Yaron, John Clizbe and myself. Contributions are welcome.  
+               \item The keyservers in the pool is accessed based on the Horowitz Key Protocol (\textbf{HKP}). Although alternative implementations exists (e.g. PGP Corp's keyserver is using LDAP) 
+               \item HKP is a layer on top of HTTP defining how to access the keyserver. It was never formally accepted as a standard but the basis is found in \url{http://tools.ietf.org/html/draft-shaw-openpgp-hkp-00}. 
+               \item Developments since the initial draft is based on community consensus, mainly between GnuPG and SKS as reference implementations.
+               \item Alternative keyservers still exists, including Hockeypuck that is written in Go and that has preliminary support for SKS synchronization.  
+               \framebreak
+               \item Some HKP examples http://pool.sks-keyservers.net:11371
+                       \begin{itemize}
+                               \item \textbf{Stats request}: \\ /pks/lookup?\uline{op=stats} $-$ operation
+                               \item \textbf{Verbose index}: \\ /pks/lookup?op=vindex \\
+                               \&\uline{search=kf@sumptuouscapital.com} $-$ search parameters
+                               \item \textbf{Get:} \\ /pks/lookup?op=get \\
+                                \&\uline{options=mr} $-$ Machine readable output \\ 
+                                \&search=0x0b7f8b60e3edfae3
+                       \end{itemize}
+       \end{itemize}
+\end{frame}
+
+\begin{frame}
+\frametitle{Inclusion criteria}
+\label{f:inclusion}
+       \begin{itemize}[label={$\rhd$}]
+               \item Server responds to HKP queries
+               \item Number of keys can't contain less than median number of keys -- $\Delta$ where $\Delta$ is calculated during a two-stage process. First excluding outliers (diff exceeding $\pm 0.5\sigma$) then $\Delta = Max\left(0.5\sigma,300\right)$ of the recalculated $\sigma$
+               \item Upgraded to a compatibility level of SKS 1.1.3 or higher. 
+               \item Server name reported is a fully qualified domain name
+               \item HTTP/1.1 POST does not result in HTTP status 417
+               \item Reverse Proxy (providing \textit{via} header or based on server header)
+               \item Server is not in the global exclude list
+               \item Responds to port 80 as well as 11371 (for p80 pool)
+               \item Not vulnerable to CVE-2014-3207 (for HKPS pool)
+       \end{itemize}
+\end{frame}
+
+\begin{frame}[shrink=30]
+\label{f:geo}
+\frametitle{Geographical pools}
+\begin{columns}[T]
+\begin{column}{0.5\textwidth}%
+\begin{enumerate}[label={\bfseries (\arabic*)},labelindent=20pt,labelwidth=20pt,leftmargin=!]
+       \item During an update run, determine the response time from multiple client measuring stations (grouped by pool) as the mean of N attempts and the bandwidth capacity for each individual server.
+       \item Calculate the mean ($\mu$) and standard deviation ($\sigma$) of the aforementioned parameters across the servers in the pool.
+       \item Exclude outliers to the results based on $N(\sigma)$ rejection criteria.
+       \item Calculate new $\mu$ and $\sigma$ for the remainder of the servers. 
+       \item Calculate the SRV weights for the individual servers.
+       \item Sort the servers by weights and pick top 10 for each individual pool
+\end{enumerate}
+\end{column}
+
+\begin{column}{0.5\textwidth}
+SRV weights are defined as: 
+\begin{equation}
+\begin{split}
+\text{weight} = \alpha \\ 
+&+ Min \left( \beta_R \left( \frac{1}{(R - \left(\mu_R - 2\sigma_R)\right)^y} \right), \phi \right) \\
+&+ \beta_B \left( \frac{B}{\sum\limits_{j=1}^m B_j} \right) \\
+&+ \beta_P \cdot D_P \cdot \rho
+\end{split}
+\end{equation}
+{\tiny
+\textbf{where}:
+\begin{itemize}
+\item $\alpha$ is a constant to provide a basis weight
+\item $\beta_i$ is the loading (weight) of the respective factor in determining the SRV weight
+\item $D_P$ is a dummy variable that is 1 if a reverse proxy exists and 0 otherwise
+\item $\rho$ is the additional weight given for a reverse proxy enabled server
+\item $y$ is a constant (even number) that define penalization for deviation
+\item $\phi$ is the ceiling of weight to be added for R
+\end{itemize}
+}
+\end{column}
+\end{columns}
+
+\center Further information is available at \url{http://kfwebs.com/sks-keyservers-SRV.pdf}
+
+\end{frame}
+
+\begin{frame}[allowframebreaks]
+       \label{f:tls}
+       \frametitle{HKPS Pool}
+       \begin{itemize}[label={$\rhd$}]
+               \item HKPS is regular HKP over TLS (port 443)
+               \item In order to achieve such a setup across multiple independent servers, all participants in the pool needs a certificate signed by the sks-keyservers.net CA (\textbf{SCA})
+               \item The certificates contains the CN of the individual servers and include the pool hostnames as subjectAltNames. 
+               \item The SCA issued certificate needs to be issued whenever the hkps SNI is presented, but several operators also maintain their own certificates from the global PKIX system for their individual hostname. 
+               \framebreak             
+               \item The public SCA cert is available at \url{https://sks-keyservers.net/sks-keyservers.netCA.pem} and is signed by my OpenPGP key in a detached signature with .pem.asc suffix. 
+               \item The Cetificate Revocation List (\textbf{CRL}) is published at \url{https://sks-keyservers.net/ca/crl.pem}
+               \item the SCA cert is also included in GnuPG: \url{http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob_plain;f=dirmngr/sks-keyservers.netCA.pem;hb=refs/heads/master}
+               \framebreak
+               \item More info on \url{https://sks-keyservers.net/verify_tls.php}
+               \item To use the HKPS pool require the following configuration:
+       \end{itemize}
+       \begin{block}{$\sim$/.gnupg/gpg.conf for GnuPG 1.4 and 2.0 branches}
+        keyserver hkps://hkps.pool.sks-keyservers.net \\
+     keyserver-options ca-cert-file=/path/to/CA/sks-keyservers.netCA.pem
+       \end{block}
+\end{frame}
+
+\begin{frame}
+\frametitle{Global reach}
+Despite not having any data on actual usage, as this is handled by the slave DNS servers, visitors on the website indicate a global reach (based on last months visitors, the number of users of the service is expected to be higher than the number of visitors of the website)
+
+\center
+\includegraphics[width=0.8\textwidth]{global-reach}
+\end{frame}
+
+\begin{frame}
+       \frametitle{SRV compatibility issues}
+       \begin{itemize}[label={$\rhd$}]
+               \item However, some issues still remain in GnuPG: 
+                       \begin{itemize}[label={--}]
+                               \item Issue 1446: hkps SRV lookup discards port from SRV
+                               \item Issue 1447: TLS hostname selection uses insecure SRV data
+                       \end{itemize}
+               \item Until these are fixed and been present in standard versions for a while, a large-scale use of SRV records will not be used in the pool (it is currently disabled for everything except for the geographical pools)
+               \item This restricts e.g. the possibility of using HKPS pool on non-standard port (restricted to 443)
+               \item Note: Even when clients are expected to handle it, it might make sense to keep the restriction, e.g. due to firewalls. 
+       \end{itemize}
+\end{frame}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Keyserver network and community}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{frame}
+\frametitle{Number of keys}
+       \begin{columns}[T]
+               \begin{column}{0.5\textwidth}
+                       \begin{itemize}[label={$\rhd$}]
+                               \item I started recording statistics on the number of keys in 2011. 
+                               \item Since then there are about 800,000 new keys available
+                               \item There has been a sustained increase in the growth rate since the Snowden revelations. 
+                               \item A more detailed breakdown of the keys (key length, algorithms etc) is available at \tiny\url{http://blog.sumptuouscapital.com/2014/01/openpgp-key-statistics/}
+                       \end{itemize}
+               \end{column}
+               
+               \begin{column}{0.5\textwidth}
+                       \includegraphics[width=0.9\textwidth]{keys_line}
+                       
+                       \includegraphics[width=0.9\textwidth]{keys_bar}
+               \end{column}
+       \end{columns}
+\end{frame}
+
+\begin{frame}
+\frametitle{Network analysis}
+       \begin{columns}[t]
+       \begin{column}{0.5\textwidth}
+               \begin{itemize}[label=$\rhd$]
+                       \item With a growing number of servers, keys and other updates the time to replicate the data across the network increase
+                       \item In order to optimize this, bottlenecks in the network have to be detected and fixed. 
+                       \item This is mostly a manual operation aided by tools for network analysis. 
+               \end{itemize}
+       \end{column}
+       \begin{column}{0.5\textwidth}
+       \center
+       \includegraphics[height=.7\paperheight]{2014-07-sks-network}
+       \end{column}
+       \end{columns}
+\end{frame}
+
+\begin{frame}
+       \begin{itemize}[label={$\rhd$}]
+               \item The keyserver community is generally friendly and is active in providing support and responding to new requests
+               \item Wiki at \url{https://bitbucket.org/skskeyserver/sks-keyserver/wiki/Home}
+               \item Mailing list at sks-devel@nongnu.org, both for SKS questions and general keyserver operational procedures
+       \end{itemize}
+\end{frame}
+\end{document}
\ No newline at end of file
diff --git a/abstract.txt b/abstract.txt
new file mode 100644 (file)
index 0000000..0451c89
--- /dev/null
@@ -0,0 +1,26 @@
+
+f the talk=
+An update on the sks-keyservers.net services
+
+=an abstract=
+sks-keyservers.net has been around since 2006 as a service providing, at
+its core, status information on keyservers and a DNS round-robin pool to
+make it convenient for OpenPGP users to access the keyserver network on
+an operational keyserver.
+
+This talk will discuss some experiences operating the services and
+discuss new features related to new specifications such as Elliptic
+Curves (including but not limited to Ed25519 and Curve25519) and the
+experimental Tor support available at hkp://jirk5u4osbsr34t5.onion in
+addition to providing an overview of the other available pools such as
+the TLS enabled HKPS pool and the various geographical pools.
+
+=some information about you=
+Kristian Fiskerstrand is developing and running the sks-keyservers.net
+services and is one of the SKS (the keyserver software) upstream
+maintainers. He maintains GnuPG and g10 related packages in Gentoo Linux
+where he is also part of the Security team and a member of the Council.
+
+=a picuture of you!=
+https://download.sumptuouscapital.com/private/profile/p1493328296-6.jpg
+