% $Id$
%
\documentclass[11pt]{article}
\usepackage[pdftex]{graphicx}
\usepackage{palatino}
\usepackage{color}
\DeclareGraphicsExtensions{.pdf}
\setlength{\topmargin}{0in}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}
\setlength{\oddsidemargin}{0in}
\setlength{\evensidemargin}{0in}
\setlength{\textheight}{9in}
\setlength{\textwidth}{6.5in}
\setlength{\parskip}{2ex}
\setlength{\parindent}{0in}
\hyphenpenalty=5000
\tolerance=1000
\hbadness=9999
\sloppy
\pagestyle{plain}
%
\begin{document}

\section*{Implementation experience with the two BPKI models}

Having recently converted my code base to the single-trust-anchor
model Russ recommended, I thought it might be useful to share what
I've learned.  This may not apply to all implementations, but it does
apply to mine, and given what I understand of RIPE's business model,
it will probably apply to RIPE's implementation as well.

In spite of a strong desire to do so, I was not able to use exactly
the same BPKI keys and certificates for HTTPS and CMS.  The reason for
this is simple: each hosted entity in my engine has its own BPKI, as
does the hosting entity, but the HTTPS listener is shared.  The only
ways I know of to avoid this would be to use separate listeners for
each hosted entity, which scales poorly, or to rely on the TLS
``Server Name Indication'' extension (RFC 4366 3.1) which is not yet
widely implemented.

\begin{figure}[hbp]
\includegraphics[width = 6.5in]{bpki-symmetric}
\caption{Symmetric BPKI model}
\label{bpki-symmetric}
\end{figure}

Figure \ref{bpki-symmetric} shows my engine's view of the BPKI tree in
the symmetric model.  Black objects belong to the hosting entity, blue
objects belong to the hosted entities, red objects are cross-certified
objects from peers.  The arrows indicate certificate issuance: solid
arrows are the ones that my own RPKI engine will care about during
certificate validation, dotted arrows show the origin of EE
certificates my engine uses to sign things.  ``BSC'' stands for
``business signing context,'' which is a database object in my
implementation representing the context needed to sign a CMS message
or TLS session.

Other than the above-mentioned annoyance with the HTTPS server
certificate, the ``symmetric'' BPKI model worked out pretty much as
expected here.  The certificate tree looks complicated, but the set of
certificates needed to build a particular validation chain is obvious,
again excepting the HTTPS server case, where client certificate is the
first hint that the engine has of the client's identity, so the server
must be prepared to accept any current client certificate.

\begin{figure}[hbp]
\includegraphics[width = 6.5in]{bpki-asymmetric}
\caption{Asymmetric BPKI model}
\label{bpki-asymmetric}
\end{figure}

Figure \ref{bpki-asymmetric} shows my engine's view of the BPKI tree
in the asymmetric model.  Note that not much has changed here from the
symmetric case.  As far as I can tell, the asymmetric model is just as
complex for my engine as the symmetric model; the only real difference
is that the engine has to keep track of a larger number of BSC EE
certificates in the asymmetric case.

\end{document}
