aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/Makefile15
-rw-r--r--docs/README27
-rw-r--r--docs/bpki-asymmetric.dot84
-rw-r--r--docs/bpki-asymmetric.pdfbin5811 -> 0 bytes
-rw-r--r--docs/bpki-symmetric.dot74
-rw-r--r--docs/bpki-symmetric.pdfbin5392 -> 0 bytes
-rw-r--r--docs/bpki.pdfbin47594 -> 0 bytes
-rw-r--r--docs/bpki.tex80
-rw-r--r--docs/entity-decompose.pdfbin62467 -> 0 bytes
-rw-r--r--docs/images/prague-whiteboard-2007-03-21-02-29-14.jpgbin343410 -> 0 bytes
-rw-r--r--docs/images/prague-whiteboard-2007-03-22-21-50-26.jpgbin306385 -> 0 bytes
-rw-r--r--docs/images/prague-whiteboard-2007-03-22-23-15-01.jpgbin339641 -> 0 bytes
-rw-r--r--docs/images/repository-structure.dot42
-rw-r--r--docs/images/repository-structure.pdfbin2828 -> 0 bytes
-rw-r--r--docs/images/whiteboard-object-model.dot65
-rw-r--r--docs/images/whiteboard-object-model.pdfbin3259 -> 0 bytes
-rw-r--r--docs/left-right-protocol477
-rw-r--r--docs/presentations/070523.lacnic-pki.pdfbin150702 -> 0 bytes
-rw-r--r--docs/publication-protocol227
-rw-r--r--docs/repository-engine-objects.dot86
-rw-r--r--docs/repository-engine-objects.pdfbin3971 -> 0 bytes
-rw-r--r--docs/repository-structure.txt111
-rw-r--r--docs/sample-irdb-data.sql80
-rw-r--r--docs/signed-manifests74
-rw-r--r--docs/up-down-protocol8
25 files changed, 0 insertions, 1450 deletions
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index a568b5e4..00000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-# $Id$
-
-all: repository-engine-objects.pdf bpki.pdf
-
-bpki.pdf: bpki-symmetric.pdf bpki-asymmetric.pdf
-
-.SUFFIXES: .pdf .dot .tex
-
-.dot.pdf:
- dot -Tps2 $< | ps2pdf - $@
-
-.tex.pdf:
- pdflatex $<
- pdflatex $<
- rm -f $*.log $*.aux
diff --git a/docs/README b/docs/README
deleted file mode 100644
index 26bc0688..00000000
--- a/docs/README
+++ /dev/null
@@ -1,27 +0,0 @@
-$Id$
-
-Ok, there's getting to be enough stuff in this directory to be
-confusing.
-
-README This file
-
-entity-decompose.pdf An overview presentation
-
-images Some old pictures
-
-left-right-protocol Pseudo-code for left-right protocol
-
-left-right-xml XML samples of left-right protocol
-
-presentations More presentations
-
-publication-protocol Pseudo-code for publication protocol
-
-repository-engine-objects.dot Objects in the RPKI engine (PDF)
-repository-engine-objects.pdf Graphviz source for "
-
-repository-structure.txt Old notes on repository structure
-
-signed-manifests ASN.1 for signed manifests
-
-up-down-protocol Pointer to up-down protocol specification
diff --git a/docs/bpki-asymmetric.dot b/docs/bpki-asymmetric.dot
deleted file mode 100644
index 739cd6ee..00000000
--- a/docs/bpki-asymmetric.dot
+++ /dev/null
@@ -1,84 +0,0 @@
-// $Id$
-//
-// Color code:
-// Black: Hosting entity
-// Blue: Hosted entity
-// Red: Cross-certified peer
-//
-// Shape code:
-// Octagon: TA
-// Diamond: CA
-// Record: EE
-
-digraph bpki_asymmetric {
- rotate = 90; size = "11,8.5"; splines = true; ratio = fill;
-
- // Hosting entity
- node [ color = black, shape = record ];
- TA [ shape = octagon ];
- rpkid [ label = "rpkid|{HTTPS server|HTTPS left-right client|CMS left-right}" ];
- irdbd [ label = "irdbd|{HTTPS left-right server|CMS left-right}" ];
- irbe [ label = "IRBE|{HTTPS left-right client|CMS left-right}" ];
-
- // Hosted entities
- node [ color = blue, fontcolor = blue ];
- Alice_CA [ shape = diamond ];
- Ellen_CA [ shape = diamond ];
-
- // Peers
- node [ color = red, fontcolor = red, shape = diamond ];
- Bob_CA;
- Carol_CA;
- Dave_CA;
- Frank_CA;
- Ginny_CA;
- Harry_CA;
-
- // EE certs issued to us by peers
- node [ color = red, fontcolor = red, shape = record ];
- Alice_Bob_EE [ label = "Alice-Bob\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Alice_Carol_EE [ label = "Alice-Carol\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Alice_Dave_EE [ label = "Alice-Dave\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Ellen_Frank_EE [ label = "Ellen-Frank\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Ellen_Ginny_EE [ label = "Ellen-Ginny\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Ellen_Harry_EE [ label = "Ellen-Harry\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Bob_EE [ label = "Bob\nEE|{HTTPS up-down|CMS up-down}" ];
- Carol_EE [ label = "Carol\nEE|{HTTPS up-down|CMS up-down}" ];
- Dave_EE [ label = "Dave\nEE|{HTTPS up-down|CMS up-down}" ];
- Frank_EE [ label = "Frank\nEE|{HTTPS up-down|CMS up-down}" ];
- Ginny_EE [ label = "Ginny\nEE|{HTTPS up-down|CMS up-down}" ];
- Harry_EE [ label = "Bob\nEE|{HTTPS up-down|CMS up-down}" ];
-
- edge [ color = black, style = solid ];
- TA -> Alice_CA;
- TA -> Ellen_CA;
-
- edge [ color = black, style = dotted ];
- TA -> rpkid;
- TA -> irdbd;
- TA -> irbe;
-
- edge [ color = blue, style = solid ];
- Alice_CA -> Bob_CA;
- Alice_CA -> Carol_CA;
- Alice_CA -> Dave_CA;
- Ellen_CA -> Frank_CA;
- Ellen_CA -> Ginny_CA;
- Ellen_CA -> Harry_CA;
-
- edge [ color = red, style = dotted ];
- Bob_CA -> Alice_Bob_EE;
- Carol_CA -> Alice_Carol_EE;
- Dave_CA -> Alice_Dave_EE;
- Frank_CA -> Ellen_Frank_EE;
- Ginny_CA -> Ellen_Ginny_EE;
- Harry_CA -> Ellen_Harry_EE;
-
- edge [ color = red, style = solid ];
- Bob_CA -> Bob_EE;
- Carol_CA -> Carol_EE;
- Dave_CA -> Dave_EE;
- Frank_CA -> Frank_EE;
- Ginny_CA -> Ginny_EE;
- Harry_CA -> Harry_EE;
-}
diff --git a/docs/bpki-asymmetric.pdf b/docs/bpki-asymmetric.pdf
deleted file mode 100644
index fbd0362d..00000000
--- a/docs/bpki-asymmetric.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/bpki-symmetric.dot b/docs/bpki-symmetric.dot
deleted file mode 100644
index 48e89483..00000000
--- a/docs/bpki-symmetric.dot
+++ /dev/null
@@ -1,74 +0,0 @@
-// $Id$
-//
-// Color code:
-// Black: Hosting entity
-// Blue: Hosted entity
-// Red: Cross-certified peer
-//
-// Shape code:
-// Octagon: TA
-// Diamond: CA
-// Record: EE
-
-digraph bpki_symmetric {
- rotate = 90; size = "11,8.5"; splines = true; ratio = fill;
-
- // Hosting entity
- node [ color = black, shape = record ];
- TA [ shape = octagon ];
- rpkid [ label = "rpkid|{HTTPS server|HTTPS left-right client|CMS left-right}" ];
- irdbd [ label = "irdbd|{HTTPS left-right server|CMS left-right}" ];
- irbe [ label = "IRBE|{HTTPS left-right client|CMS left-right}" ];
-
- // Hosted entities
- node [ color = blue, fontcolor = blue ];
- Alice_CA [ shape = diamond ];
- Alice_EE [ label = "Alice\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
- Ellen_CA [ shape = diamond ];
- Ellen_EE [ label = "Ellen\nBSC EE|{HTTPS up-down client|CMS up-down}" ];
-
- // Peers
- node [ color = red, fontcolor = red, shape = diamond ];
- Bob_CA;
- Carol_CA;
- Dave_CA;
- Frank_CA;
- Ginny_CA;
- Harry_CA;
- node [ shape = record ];
- Bob_EE [ label = "Bob\nEE|{HTTPS up-down|CMS up-down}" ];
- Carol_EE [ label = "Carol\nEE|{HTTPS up-down|CMS up-down}" ];
- Dave_EE [ label = "Dave\nEE|{HTTPS up-down|CMS up-down}" ];
- Frank_EE [ label = "Frank\nEE|{HTTPS up-down|CMS up-down}" ];
- Ginny_EE [ label = "Ginny\nEE|{HTTPS up-down|CMS up-down}" ];
- Harry_EE [ label = "Bob\nEE|{HTTPS up-down|CMS up-down}" ];
-
- edge [ color = black, style = solid ];
- TA -> Alice_CA;
- TA -> Ellen_CA;
-
- edge [ color = black, style = dotted ];
- TA -> rpkid;
- TA -> irdbd;
- TA -> irbe;
-
- edge [ color = blue, style = solid ];
- Alice_CA -> Bob_CA;
- Alice_CA -> Carol_CA;
- Alice_CA -> Dave_CA;
- Ellen_CA -> Frank_CA;
- Ellen_CA -> Ginny_CA;
- Ellen_CA -> Harry_CA;
-
- edge [ color = blue, style = dotted ];
- Alice_CA -> Alice_EE;
- Ellen_CA -> Ellen_EE;
-
- edge [ color = red, style = solid ];
- Bob_CA -> Bob_EE;
- Carol_CA -> Carol_EE;
- Dave_CA -> Dave_EE;
- Frank_CA -> Frank_EE;
- Ginny_CA -> Ginny_EE;
- Harry_CA -> Harry_EE;
-}
diff --git a/docs/bpki-symmetric.pdf b/docs/bpki-symmetric.pdf
deleted file mode 100644
index 9db46451..00000000
--- a/docs/bpki-symmetric.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/bpki.pdf b/docs/bpki.pdf
deleted file mode 100644
index 979c1380..00000000
--- a/docs/bpki.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/bpki.tex b/docs/bpki.tex
deleted file mode 100644
index c07c6534..00000000
--- a/docs/bpki.tex
+++ /dev/null
@@ -1,80 +0,0 @@
-% $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}
diff --git a/docs/entity-decompose.pdf b/docs/entity-decompose.pdf
deleted file mode 100644
index afde3c27..00000000
--- a/docs/entity-decompose.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/images/prague-whiteboard-2007-03-21-02-29-14.jpg b/docs/images/prague-whiteboard-2007-03-21-02-29-14.jpg
deleted file mode 100644
index 79c0a807..00000000
--- a/docs/images/prague-whiteboard-2007-03-21-02-29-14.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/prague-whiteboard-2007-03-22-21-50-26.jpg b/docs/images/prague-whiteboard-2007-03-22-21-50-26.jpg
deleted file mode 100644
index 4c3c828d..00000000
--- a/docs/images/prague-whiteboard-2007-03-22-21-50-26.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/prague-whiteboard-2007-03-22-23-15-01.jpg b/docs/images/prague-whiteboard-2007-03-22-23-15-01.jpg
deleted file mode 100644
index 7b973ab0..00000000
--- a/docs/images/prague-whiteboard-2007-03-22-23-15-01.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/images/repository-structure.dot b/docs/images/repository-structure.dot
deleted file mode 100644
index 7154202d..00000000
--- a/docs/images/repository-structure.dot
+++ /dev/null
@@ -1,42 +0,0 @@
-// $URL$
-// $Id$
-//
-// Pictures to go with repository-structure.txt. First picture is rekeying b with
-// a g(ski)/g(ski)/g(ski).cer model, second is with stable meaningless identifiers.
-
-graph rekeying_ski {
- rotate=90; size="11,8.5"; splines=true; ratio=fill;
- node [ shape=box ];
- a [ color=black, label="rsync://host/foo/g(ski(a)).cer" ]
- b [ color=red, label="rsync://host/foo/g(ski(a))/g(ski(b)).cer" ]
- c [ color=red, label="rsync://host/foo/g(ski(a))/g(ski(b))/g(ski(c)).cer" ]
- d [ color=red, label="rsync://host/foo/g(ski(a))/g(ski(b))/g(ski(c))/g(ski(d)).cer" ]
- a -- b [ color=red ];
- b -- c [ color=red ];
- c -- d [ color=red ];
- b_ [ color=green, label="rsync://host/foo/g(ski(a))/g(ski(b')).cer" ]
- c_ [ color=green, label="rsync://host/foo/g(ski(a))/g(ski(b'))/g(ski(c)).cer" ]
- d_ [ color=green, label="rsync://host/foo/g(ski(a))/g(ski(b'))/g(ski(c))/g(ski(d)).cer" ]
- a -- b_ [ color=green ];
- b_ -- c_ [ color=green ];
- c_ -- d_ [ color=green ];
-}
-
-graph rekeying_gensym {
- rotate=90; size="11,8.5"; splines=true; ratio=fill;
- node [ shape=box ];
- a [ color=black, label="rsync://host/foo/g(ski(a)).cer" ]
- b [ color=red, label="rsync://host/foo/G001/g(ski(b)).cer" ]
- c [ color=black, label="rsync://host/foo/G001/G002/g(ski(c)).cer" ]
- d [ color=black, label="rsync://host/foo/G001/G002/G003/g(ski(d)).cer" ]
- a -- b [ color=red ];
- b -- c [ color=red ];
- c -- d [ color=black ];
- b_ [ color=green, label="rsync://host/foo/G001/g(ski(b')).cer" ]
- a -- b_ [ color=green ];
- b_ -- c [ color=green ];
-}
-
-// Local Variables:
-// compile-command: "dot -Tps2 repository-structure.dot | ps2pdf - repository-structure.pdf"
-// End:
diff --git a/docs/images/repository-structure.pdf b/docs/images/repository-structure.pdf
deleted file mode 100644
index 0fcc7615..00000000
--- a/docs/images/repository-structure.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/images/whiteboard-object-model.dot b/docs/images/whiteboard-object-model.dot
deleted file mode 100644
index 3c61f3ab..00000000
--- a/docs/images/whiteboard-object-model.dot
+++ /dev/null
@@ -1,65 +0,0 @@
-// $URL$
-// $Id$
-
-// This is an attempt to capture
-// http://subvert-rpki.hactrn.net/docs/prague-whiteboard-2007-03-22-23:15:01.jpg
-
-// {arrowhead,arrowtail} shapes to use for database object relationships:
-// 1- none
-// m- crow
-// Color code:
-// Blue: visible in left-right protocol
-// Green: created on the fly
-
-// Explanation for many-many mapping beween CA and child objects
-// (courtesy of RobL): Each child is an entity; each CA can have
-// multiple children, and each child can hold certs from multiple CAs.
-
-digraph rpki_engine_objects {
- rotate=90; size="11,8.5"; splines=true; ratio=fill;
- node [ shape=record ];
-
- // Objects visible in left-to-right protocol
- node [ color=blue ];
- self [ label="Self|{Preferences}" ];
- parent [ label="Parent|{URI|TA}" ];
- repo [ label="Repository|{URI|TA}" ];
- child [ label="Child|{TA}" ];
- biz_sign [ label="Business\nSigning Context|{Keypair|CertChain}" ];
-
- // Objects created on the fly by the RPKI engine
- node [ color=green ];
- ca [ label="CA|{CRL #|Last Issued Serial #}" ];
- child_cert [ label="Child Certificate" ];
- ee_cert [ label="EE Certificate|{ROA}" ];
- ca_key_pair [ label="CA Key Pair|{Latest CA Certificate|Latest CRL}" ];
-
- // One-many mappings
- edge [ color=blue, arrowtail=none, arrowhead=crow ];
- biz_sign -> child;
- biz_sign -> parent;
- biz_sign -> repo;
- self -> child;
- self -> parent;
- repo -> parent;
-
- // Many-many mappings
- edge [ color=green, arrowtail=crow, arrowhead=crow ];
- ca -> child;
-
- // One-many mappings
- edge [ color=green, arrowtail=none, arrowhead=crow ];
- ca -> ca_key_pair;
- child -> child_cert;
- self -> ca;
- parent -> ca;
-
- // Weird one-many
- edge [ color=green, arrowtail=none, arrowhead=crow, style=dashed ];
- ca_key_pair -> child_cert;
- ca_key_pair -> ee_cert;
-}
-
-// Local Variables:
-// compile-command: "neato -Tps2 whiteboard-object-model.dot | ps2pdf - whiteboard-object-model.pdf"
-// End:
diff --git a/docs/images/whiteboard-object-model.pdf b/docs/images/whiteboard-object-model.pdf
deleted file mode 100644
index 9b7da850..00000000
--- a/docs/images/whiteboard-object-model.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/left-right-protocol b/docs/left-right-protocol
deleted file mode 100644
index 1ec9d1f6..00000000
--- a/docs/left-right-protocol
+++ /dev/null
@@ -1,477 +0,0 @@
-Left-right protocol
-
- The left-right protocol is really two separate client/server protocols
- over separate channels between the RPKI engine and the IR back end
- (IRBE).
-
- The IRBE is the client for one of the subprotocols, the RPKI engine is
- the client for the other.
-
-Terminology
-
- * IRBE: Internet Registry Back End
-
- * IRDB: Internet Registry Data Base
-
- * BPKI: Business PKI
-
- * RPKI: Resource PKI
-
-initiated by the IRBE
-
- This part of the protcol uses a kind of message-passing. Each object
- that the RPKI engine knows about takes five messages: "create", "set",
- "get", "list", and "destroy". Actions which are not just data
- operations on objects are handled via an SNMP-like mechanism, as if
- they were fields to be set. For example, to generate a keypair one
- "sets" the "generate-keypair" field of a BSC object, even though there
- is no such field in the object itself as stored in SQL. This is a bit
- of a kludge, but the reason for doing it as if these were variables
- being set is to allow composite operations such as creating a BSC,
- populating all of its data fields, and generating a keypair, all as a
- single operation. With this model, that's trivial, otherwise it's at
- least two round trips.
-
- Fields can be set in either "create" or "set" operations, the
- difference just being whether the object already exists. A "get"
- operation returns all visible fields of the object. A "list" operation
- returns a list containing what "get" would have returned on each of
- those objects.
-
- Left-right protocol objects are encoded as signed CMS messages
- containing XML as eContent and using an eContentType OID of id-ct-xml
- (1.2.840.113549.1.9.16.1.28). These CMS messages are in turn passed as
- the data for HTTPS POST operations, with an HTTP content type of
- "application/x-rpki" for both the POST data and the response data.
-
- All operations allow an optional "tag" attribute which can be any
- alphanumeric token. The main purpose of the tag attribute is to allow
- batching of multiple requests into a single PDU.
-
-<self/> object
-
- A <self/> object represents one virtual RPKI engine. In simple cases
- where the RPKI engine operator operates the engine only on their own
- behalf, there will only be one <self/> object, representing the engine
- operator's organization, but in environments where the engine operator
- hosts other entities, there will be one <self/> object per hosted
- entity (probably including the engine operator's own organization,
- considered as a hosted customer of itself).
-
- Some of the RPKI engine's configured parameters and data are shared by
- all hosted entities, but most are tied to a specific <self/> object.
- Data which are shared by all hosted entities are referred to as
- "per-engine" data, data which are specific to a particular <self/>
- object are "per-self" data.
-
- Since all other RPKI engine objects refer to a <self/> object via a
- "self_id" value, one must create a <self/> object before one can
- usefully configure any other left-right protocol objects.
-
- Every <self/> object has a self_id attribute, which must be specified
- for the "set", "get", and "destroy" actions.
-
- Payload data which can be configured in a <self/> object:
-
- * use_hsm (attribute): Whether to use a Hardware Signing Module. At
- present this option has no effect, as the implementation does not
- yet support HSMs.
-
- * crl_interval (attribute): Positive integer representing the planned
- lifetime of an RPKI CRL for this <self/>, measured in seconds.
-
- * regen_margin (attribute): Positive integer representing how long
- before expiration of an RPKI certificiate a new one should be
- generated, measured in seconds. At present this only affects the
- one-off EE certificates associated with ROAs.
-
- * bpki_cert (element): BPKI CA certificate for this <self/>. This is
- used as part of the certificate chain when validating incoming TLS
- and CMS messages, and should be the issuer of cross-certification
- BPKI certificates used in <repository/>, <parent/>, and <child/>
- objects. If the bpki_glue certificate is in use (below), the
- bpki_cert certificate should be issued by the bpki_glue
- certificate; otherwise, the bpki_cert certificate should be issued
- by the per-engine bpki_ta certificate.
-
- * bpki_glue (element): Another BPKI CA certificate for this <self/>,
- usually not needed. Certain pathological cross-certification cases
- require a two-certificate chain due to issuer name conflicts. If
- used, the bpki_glue certificate should be the issuer of the
- bpki_cert certificate and should be issued by the per-engine
- bpki_ta certificate; if not needed, the bpki_glue certificate
- should be left unset.
-
- Control attributes that can be set to "yes" to force actions:
-
- * rekey: Start a key rollover for every RPKI CA associated with every
- <parent/> object associated with this <self/> object. This is the
- first phase of a key rollover operation.
-
- * revoke: Revoke any remaining certificates for any expired key
- associated with any RPKI CA for any <parent/> object associated
- with this <self/> object. This is the second (cleanup) phase for a
- key rollover operation; it's separate from the first phase to leave
- time for new RPKI certificates to propegate and be installed.
-
- * reissue: Not implemented, may be removed from protocol. Original
- theory was that this operation would force reissuance of any object
- with a changed key, but as that happens automatically as part of
- the key rollover mechanism this operation seems unnecessary.
-
- * run_now: Force immediate processing for all tasks associated with
- this <self/> object that would ordinarily be performed under cron.
- Not currently implemented.
-
- * publish_world_now: Force (re)publication of every publishable
- object for this <self/> object. Not currently implemented. Intended
- to aid in recovery if RPKI engine and publication engine somehow
- get out of sync.
-
-<bsc/> object
-
- The <bsc/> ("business signing context") object represents all the BPKI
- data needed to sign outgoing CMS or HTTPS messages. Various other
- objects include pointers to a <bsc/> object. Whether a particular
- <self/> uses only one <bsc/> or multiple is a configuration decision
- based on external requirements: the RPKI engine code doesn't care, it
- just cares that, for any object representing a relationship for which
- it must sign messages, there be a <bsc/> object that it can use to
- produce that signature.
-
- Every <bsc/> object has a bsc_id, which must be specified for the
- "get", "set", and "destroy" actions. Every <bsc/> also has a self_id
- attribute which indicates the <self/> object with which this <bsc/>
- object is associated.
-
- Payload data which can be configured in a <isc/> object:
-
- * signing_cert (element): BPKI certificate to use when generating a
- signature.
-
- * signing_cert_crl (element): CRL which would list signing_cert if it
- had been revoked.
-
- Control attributes that can be set to "yes" to force actions:
-
- * generate_keypair: Generate a new BPKI keypair and return a PKCS #10
- certificate request. The resulting certificate, once issued, should
- be configured as this <bsc/> object's signing_cert.
-
- Additional attributes which may be specified when specifying
- "generate_keypair":
-
- * key_type: Type of BPKI keypair to generate. "rsa" is both the
- default and, at the moment, the only allowed value.
-
- * hash_alg: Cryptographic hash algorithm to use with this keypair.
- "sha256" is both the default and, at the moment, the only allowed
- value.
-
- * key_length: Length in bits of the keypair to be generated. "2048"
- is both the default and, at the moment, the only allowed value.
-
- Replies to "create" and "set" actions that specify "generate-keypair"
- include a <bsc_pkcs10/> element, as do replies to "get" and "list"
- actions for a <bsc/> object for which a "generate-keypair" command has
- been issued. The RPKI engine stores the PKCS #10 request, which allows
- the IRBE to reuse the request if and when it needs to reissue the
- corresponding BPKI signing certificate.
-
-<parent/> object
-
- The <parent/> object represents the RPKI engine's view of a particular
- parent of the current <self/> object in the up-down protocol. Due to
- the way that the resource hierarchy works, a given <self/> may obtain
- resources from multiple parents, but it will always have at least one;
- in the case of IANA or an RIR, the parent RPKI engine may be a trivial
- stub.
-
- Every <parent/> object has a parent_id, which must be specified for the
- "get", "set", and "destroy" actions. Every <parent/> also has a self_id
- attribute which indicates the <self/> object with which this <parent/>
- object is associated, a bsc_id attribute indicating the <bsc/> object
- to be used when signing messages sent to this parent, and a
- repository_id indicating the <repository/> object to be used when
- publishing issued by the certificate issued by this parent.
-
- Payload data which can be configured in a <parent/> object:
-
- * peer_contact_uri (attribute): HTTPS URI used to contact this
- parent.
-
- * sia_base (attribute): The leading portion of an rsync URI that the
- RPKI engine should use when composing the publication URI for
- objects issued by the RPKI certificate issued by this parent.
-
- * sender_name (attribute): Sender name to use in the up-down protocol
- when talking to this parent. The RPKI engine doesn't really care
- what this value is, but other implementations of the up-down
- protocol do care.
-
- * recipient_name (attribute): Recipient name to use in the up-down
- protocol when talking to this parent. The RPKI engine doesn't
- really care what this value is, but other implementations of the
- up-down protocol do care.
-
- * bpki_cms_cert (element): BPKI CMS CA certificate for this
- <parent/>. This is used as part of the certificate chain when
- validating incoming CMS messages If the bpki_cms_glue certificate
- is in use (below), the bpki_cms_cert certificate should be issued
- by the bpki_cms_glue certificate; otherwise, the bpki_cms_cert
- certificate should be issued by the bpki_cert certificate in the
- <self/> object.
-
- * bpki_cms_glue (element): Another BPKI CMS CA certificate for this
- <parent/>, usually not needed. Certain pathological
- cross-certification cases require a two-certificate chain due to
- issuer name conflicts. If used, the bpki_cms_glue certificate
- should be the issuer of the bpki_cms_cert certificate and should be
- issued by the bpki_cert certificate in the <self/> object; if not
- needed, the bpki_cms_glue certificate should be left unset.
-
- * bpki_https_cert (element): BPKI HTTPS CA certificate for this
- <parent/>. This is like the bpki_cms_cert object, only used for
- validating incoming TLS messages rather than CMS.
-
- * bpki_cms_glue (element): Another BPKI HTTPS CA certificate for this
- <parent/>, usually not needed. This is like the bpki_cms_glue
- certificate, only used for validating incoming TLS messages rather
- than CMS.
-
- Control attributes that can be set to "yes" to force actions:
-
- * rekey: This is like the rekey command in the <self/> object, but
- limited to RPKI CAs under this parent.
-
- * reissue: This is like the reissue command in the <self/> object,
- but limited to RPKI CAs under this parent.
-
- * revoke: This is like the revoke command in the <self/> object, but
- limited to RPKI CAs under this parent.
-
-<child/> object
-
- The <child/> object represents the RPKI engine's view of particular
- child of the current <self/> in the up-down protocol.
-
- Every <child/> object has a parent_id, which must be specified for the
- "get", "set", and "destroy" actions. Every <child/> also has a self_id
- attribute which indicates the <self/> object with which this <child/>
- object is associated.
-
- Payload data which can be configured in a <child/> object:
-
- * bpki_cert (element): BPKI CA certificate for this <child/>. This is
- used as part of the certificate chain when validating incoming TLS
- and CMS messages. If the bpki_glue certificate is in use (below),
- the bpki_cert certificate should be issued by the bpki_glue
- certificate; otherwise, the bpki_cert certificate should be issued
- by the bpki_cert certificate in the <self/> object.
-
- * bpki_glue (element): Another BPKI CA certificate for this <child/>,
- usually not needed. Certain pathological cross-certification cases
- require a two-certificate chain due to issuer name conflicts. If
- used, the bpki_glue certificate should be the issuer of the
- bpki_cert certificate and should be issued by the bpki_cert
- certificate in the <self/> object; if not needed, the bpki_glue
- certificate should be left unset.
-
- Control attributes that can be set to "yes" to force actions:
-
- * reissue: Not implemented, may be removed from protocol.
-
-<repository/> object
-
- The <repository/> object represents the RPKI engine's view of a
- particular publication repository used by the current <self/> object.
-
- Every <repository/> object has a repository_id, which must be specified
- for the "get", "set", and "destroy" actions. Every <repository/> also
- has a self_id attribute which indicates the <self/> object with which
- this <repository/> object is associated.
-
- Payload data which can be configured in a <repository/> object:
-
- * peer_contact_uri (attribute): HTTPS URI used to contact this
- repository.
-
- * bpki_cms_cert (element): BPKI CMS CA certificate for this
- <repository/>. This is used as part of the certificate chain when
- validating incoming CMS messages If the bpki_cms_glue certificate
- is in use (below), the bpki_cms_cert certificate should be issued
- by the bpki_cms_glue certificate; otherwise, the bpki_cms_cert
- certificate should be issued by the bpki_cert certificate in the
- <self/> object.
-
- * bpki_cms_glue (element): Another BPKI CMS CA certificate for this
- <repository/>, usually not needed. Certain pathological
- cross-certification cases require a two-certificate chain due to
- issuer name conflicts. If used, the bpki_cms_glue certificate
- should be the issuer of the bpki_cms_cert certificate and should be
- issued by the bpki_cert certificate in the <self/> object; if not
- needed, the bpki_cms_glue certificate should be left unset.
-
- * bpki_https_cert (element): BPKI HTTPS CA certificate for this
- <repository/>. This is like the bpki_cms_cert object, only used for
- validating incoming TLS messages rather than CMS.
-
- * bpki_cms_glue (element): Another BPKI HTTPS CA certificate for this
- <repository/>, usually not needed. This is like the bpki_cms_glue
- certificate, only used for validating incoming TLS messages rather
- than CMS.
-
- At present there are no control attributes for <repository/> objects.
-
-<route_origin/> object
-
- The <route_origin/> object is a kind of prototype for a ROA. It
- contains all the information needed to generate a ROA once the RPKI
- engine obtains the appropriate RPKI certificates from its parent(s).
-
- Note that a <route_origin/> object represents a ROA to be generated on
- behalf of <self/>, not on behalf of a <child/>. Thus, a hosted entity
- that has no children but which does need to generate ROAs would be
- represented by a hosted <self/> with no <child/> objects but one or
- more <route_origin/> objects. While lumping ROA generation in with the
- other RPKI engine activities may seem a little odd at first, it's a
- natural consequence of the design requirement that the RPKI daemon
- never transmit private keys across the network in any form; given this
- requirement, the RPKI engine that holds the private keys for an RPKI
- certificate must also be the engine which generates any ROAs that
- derive from that RPKI certificate.
-
- The precise content of the <route_origin/> has changed over time as the
- underlying ROA specification has changed. The current implementation as
- of this writing matches what we expect to see in
- draft-ietf-sidr-roa-format-03, once it is issued. In particular, note
- that the exactMatch boolean from the -02 draft has been replaced by the
- prefix and maxLength encoding used in the -03 draft.
-
- Payload data which can be configured in a <route_origin/> object:
-
- * as_number (attribute): Autonomous System Number (ASN) to place in
- the generated ROA. A single ROA can only grant authorization to a
- single ASN; multiple ASNs require multiple ROAs, thus multiple
- <route_origin/> objects.
-
- * ipv4 (attribute): List of IPv4 prefix and maxLength values, see
- below for format.
-
- * ipv6 (attribute): List of IPv6 prefix and maxLength values, see
- below for format.
-
- Control attributes that can be set to "yes" to force actions:
-
- * suppress_publication: Not implemented, may be removed from
- protocol.
-
- The lists of IPv4 and IPv6 prefix and maxLength values are represented
- as comma-separated text strings, with no whitespace permitted. Each
- entry in such a string represents a single prefix/maxLength pair.
-
- ABNF for these address lists:
-
-
- <ROAIPAddress> ::= <address> "/" <prefixlen> [ "-" <max_prefixlen> ]
- ; Where <max_prefixlen> defaults to the same
- ; value as <prefixlen>.
-
- <ROAIPAddressList> ::= <ROAIPAddress> *( "," <ROAIPAddress> )
-
-
- For example, "10.0.1.0/24-32,10.0.2.0/24", which is a shorthand form of
- "10.0.1.0/24-32,10.0.2.0/24-24".
-
-Operations initiated by the RPKI engine
-
- The left-right protocol also includes queries from the RPKI engine back
- to the IRDB. These queries do not follow the message-passing pattern
- used in the IRBE-initiated part of the protocol. Instead, there's a
- single query back to the IRDB, with a corresponding response. The CMS
- and HTTPS encoding are the same as in the rest of the protocol, but the
- BPKI certificates will be different as the back-queries and responses
- form a separate communication channel.
-
-<list_resources/> messages
-
- The <list_resources/> query and response allow the RPKI engine to ask
- the IRDB for information about resources assigned to a particular
- child. The query must include both a "self_id" attribute naming the
- <self/> that is making the request and also a "child_id" attribute
- naming the child that is the subject of the query. The query and
- response also allow an optional "tag" attribute of the same form used
- elsewhere in this protocol, to allow batching.
-
- A <list_resources/> response includes the following attributes, along
- with the tag (if specified), self_id, and child_id copied from the
- request:
-
- * valid_until: A timestamp indicating the date and time at which
- certificates generated by the RPKI engine for these data should
- expire. The timestamp is expressed as an XML xsd:dateTime, must be
- expressed in UTC, and must carry the "Z" suffix indicating UTC.
-
- * subject_name: An optional text string naming the child. Not
- currently used.
-
- * asn: A list of autonomous sequence numbers, expressed as a
- comma-separated sequence of decimal integers with no whitespace.
-
- * ipv4: A list of IPv4 address prefixes and ranges, expressed as a
- comma-separated list of prefixes and ranges with no whitespace. See
- below for format details.
-
- * ipv6: A list of IPv6 address prefixes and ranges, expressed as a
- comma-separated list of prefixes and ranges with no whitespace. See
- below for format details.
-
- Entries in a list of address prefixes and ranges can be either
- prefixes, which are written in the usual address/prefixlen notation, or
- ranges, which are expressed as a pair of addresses denoting the
- beginning and end of the range, written in ascending order separated by
- a single "-" character. This format is superficially similar to the
- format used for prefix and maxLength values in the <route_origin/>
- object, but the semantics differ: note in particular that
- <route_origin/> objects don't allow ranges, while <list_resources/>
- messages don't allow a maxLength specification.
-
-Error handling
-
- Error in this protocol are handled at two levels.
-
- Since all messages in this protocol are conveyed over HTTPS
- connections, basic errors are indicated via the HTTP response code. 4xx
- and 5xx responses indicate that something bad happened. Errors that
- make it impossible to decode a query or encode a response are handled
- in this way.
-
- Where possible, errors will result in a <report_error/> message which
- takes the place of the expected protocol response message.
- <report_error/> messages are CMS-signed XML messages like the rest of
- this protocol, and thus can be archived to provide an audit trail.
-
- <report_error/> messages only appear in replies, never in queries. The
- <report_error/> message can appear on either the "forward" (IRBE as
- client of RPKI engine) or "back" (RPKI engine as client of IRDB)
- communication channel.
-
- The <report_error/> message includes an optional "tag" attribute to
- assist in matching the error with a particular query when using
- batching, and also includes a "self_id" attribute indicating the
- <self/> that issued the error.
-
- The error itself is conveyed in the error_code (attribute). The value
- of this attribute is a token indicating the specific error that
- occurred. At present this will be the name of a Python exception; the
- production version of this protocol will nail down the allowed error
- tokens here, probably in the RelaxNG schema.
-
- The body of the <report_error/> element itself is an optional text
- string; if present, this is debugging information. At present this
- capabilty is not used, debugging information goes to syslog.
- __________________________________________________________________
-
-
- Generated on Thu Jun 12 02:43:52 2008 for RPKI Engine by doxygen
- 1.5.5
diff --git a/docs/presentations/070523.lacnic-pki.pdf b/docs/presentations/070523.lacnic-pki.pdf
deleted file mode 100644
index 5ab83fa3..00000000
--- a/docs/presentations/070523.lacnic-pki.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/publication-protocol b/docs/publication-protocol
deleted file mode 100644
index 29834874..00000000
--- a/docs/publication-protocol
+++ /dev/null
@@ -1,227 +0,0 @@
-Publication protocol
-
- The publication protocol is really two separate client/server
- protocols, between different parties.
-
- The first is a configuration protocol for the IRBE to use to configure
- the publication engine, the second is the interface by which authorized
- clients request publication of specific objects.
-
- Much of the architecture of the publication protocol is borrowed from
- the left-right protocol: like the left-right protocol, the publication
- protocol uses CMS-wrapped XML over HTTPS with the same eContentType OID
- and the same HTTPS content-type, and the overall style of the XML
- messages is very similar to the left-right protocol. All operations
- allow an optional "tag" attribute to allow batching.
-
- The publication engine operates a single HTTPS server which serves both
- of these subprotocols. The two subprotocols share a single server port,
- but use distinct URLs.
-
-Terminology
-
- * IRBE: Internet Registry Back End
-
- * IRDB: Internet Registry Data Base
-
- * BPKI: Business PKI
-
- * RPKI: Resource PKI
-
-Publication control subprotocol
-
- The control subprotocol reuses the message-passing design of the
- left-right protocol. Configured objects support the "create", "set",
- "get", "list", and "destroy" actions, or a subset thereof when the full
- set of actions doesn't make sense.
-
-<config/> object
-
- The <config/> object allows configuration of data that apply to the
- entire publication server rather than a particular client.
-
- There is exactly one <config/> object in the publication server, and it
- only supports the "set" and "get" actions -- it cannot be created or
- destroyed.
-
- Payload data which can be configured in a <config/> object:
-
- * bpki_crl (element): This is the BPKI CRL used by the publication
- server when signing the CMS wrapper on responses in the publication
- subprotocol. As the CRL must be updated at regular intervals, it's
- not practical to restart the publication server when the BPKI CRL
- needs to be updated. Fortunately, the BPKI model doesn't require
- use of a BPKI CRL between the IRBE and the publication server, so
- we can use the publication control subprotocol to update the BPKI
- CRL.
-
-<client/> object
-
- The <client/> object represents one client authorized to use the
- publication server.
-
- The <client/> object supports the full set of "create", "set", "get",
- "list", and "destroy" actions. Each client has a "client_id" attribute,
- which is used in responses and must be specified in "set", "get", or
- "destroy" actions.
-
- Payload data which can be configured in a <client/> object:
-
- * base_uri (attribute): This is the base URI below which this client
- is allowed to publish data. The publication server may impose
- additional constraints in the case of a child publishing beneath
- its parent.
-
- * bpki_cert (element): BPKI CA certificate for this <client/>. This
- is used as part of the certificate chain when validating incoming
- TLS and CMS messages. If the bpki_glue certificate is in use
- (below), the bpki_cert certificate should be issued by the
- bpki_glue certificate; otherwise, the bpki_cert certificate should
- be issued by the publication engine's bpki_ta certificate.
-
- * bpki_glue (element): Another BPKI CA certificate for this
- <client/>, usually not needed. Certain pathological
- cross-certification cases require a two-certificate chain due to
- issuer name conflicts. If used, the bpki_glue certificate should be
- the issuer of the bpki_cert certificate and should be issued by the
- publication engine's bpki_ta certificate; if not needed, the
- bpki_glue certificate should be left unset.
-
-Publication subprotocol
-
- The publication subprotocol is structured somewhat differently from the
- publication control protocol. Objects in the publication subprotocol
- represent objects to be published or objects to be withdrawn from
- publication. Each kind of object supports two actions: "publish" and
- "withdraw". In each case the XML element representing hte object to be
- published or withdrawn has a "uri" attribute which contains the
- publication URI. For "publish" actions, the XML element body contains
- the DER object to be published, encoded in Base64; for "withdraw"
- actions, the XML element body is empty.
-
- In theory, the detailed access control for each kind of object might be
- different. In practice, as of this writing, access control for all
- objects is a simple check that the client's "base_uri" is a leading
- substring of the publication URI. Details of why access control might
- need to become more complicated are discussed in a later section.
-
-<certificate/> object
-
- The <certificate/> object represents an RPKI certificate to be
- published or withdrawn.
-
-<crl/> object
-
- The <crl/> object represents an RPKI CRL to be published or withdrawn.
-
-<manifest/> object
-
- The <manifest/> object represents an RPKI publication manifest to be
- published or withdrawn.
-
- Note that part of the reason for the batching support in the
- publication protocol is because every publication or withdrawal action
- requires a new manifest, thus every publication or withdrawal action
- will involve at least two objects.
-
-<roa/> object
-
- The <roa/> object represents a ROA to be published or withdrawn.
-
-Error handling
-
- Error in this protocol are handled at two levels.
-
- Since all messages in this protocol are conveyed over HTTPS
- connections, basic errors are indicated via the HTTP response code. 4xx
- and 5xx responses indicate that something bad happened. Errors that
- make it impossible to decode a query or encode a response are handled
- in this way.
-
- Where possible, errors will result in a <report_error/> message which
- takes the place of the expected protocol response message.
- <report_error/> messages are CMS-signed XML messages like the rest of
- this protocol, and thus can be archived to provide an audit trail.
-
- <report_error/> messages only appear in replies, never in queries. The
- <report_error/> message can appear on either the "forward" (IRBE as
- client of RPKI engine) or "back" (RPKI engine as client of IRDB)
- communication channel.
-
- The <report_error/> message includes an optional "tag" attribute to
- assist in matching the error with a particular query when using
- batching, and also includes a "self_id" attribute indicating the
- <self/> that issued the error.
-
- The error itself is conveyed in the error_code (attribute). The value
- of this attribute is a token indicating the specific error that
- occurred. At present this will be the name of a Python exception; the
- production version of this protocol will nail down the allowed error
- tokens here, probably in the RelaxNG schema.
-
- The body of the <report_error/> element itself is an optional text
- string; if present, this is debugging information. At present this
- capabilty is not used, debugging information goes to syslog.
-
-Additional access control considerations.
-
- As detailed above, the publication protocol is trivially simple. This
- glosses over two bits of potential complexity:
-
- * In the case where parent and child are sharing a repository, we'd
- like to nest child under parent, because testing has demonstrated
- that even on relatively slow hardware the delays involved in
- setting up separate rsync connections tend to dominate
- synchronization time for relying parties.
-
- * The repository operator might also want to do some checks to assure
- itself that what it's about to allow the RPKI engine to publish is
- not dangerous toxic waste.
-
- The up-down protocol includes a mechanism by which a parent can suggest
- a publication URI to each of its children. The children are not
- required to accept this hint, and the children must make separate
- arrangements with the repository operator (who might or might not be
- the same as the entity that hosts the children's RPKI engine
- operations) to use the suggested publication point, but if everything
- works out, this allows children to nest cleanly under their parents
- publication points, which helps reduce synchronization time for relying
- parties.
-
- In this case, one could argue that the publication server is
- responsible for preventing one of its clients (the child in the above
- description) from stomping on data published by another of its clients
- (the parent in the above description). This goes beyond the basic
- access check and requires the publication server to determine whether
- the parent has given its consent for the child to publish under the
- parent. Since the RPKI certificate profile requires the child's
- publication point to be indicated in an SIA extension in a certificate
- issued by the parent to the child, the publication engine can infer
- this permission from the parent's issuance of a certificate to the
- child. Since, by definition, the parent also uses this publication
- server, this is an easy check, as the publication server should already
- have the parent's certificate available by the time it needs to check
- the child's certificate.
-
- The previous paragraph only covers a "publish" action for a
- <certificate/> object. For "publish" actions on other objects, the
- publication server would need to trace permission back to the
- certificate issued by the parent; for "withdraw" actions, the
- publication server would have to perform the same checks it would
- perform for a "publish" action, using the current published data before
- withdrawing it. The latter in turn implies an ordering constraint on
- "withdraw" actions in order to preserve the data necessary for these
- access control decisions; as this may prove impractical, the
- publication server may probably need to make periodic sweeps over its
- published data looking for orphaned objects, but that's probably a good
- idea anyway.
-
- Note that, in this publication model, any agreement that the repository
- makes to publish the RPKI engine's output is conditional upon the
- object to be published passing whatever access control checks the
- publication server imposes.
- __________________________________________________________________
-
-
- Generated on Thu Jun 12 02:43:52 2008 for RPKI Engine by doxygen
- 1.5.5
diff --git a/docs/repository-engine-objects.dot b/docs/repository-engine-objects.dot
deleted file mode 100644
index 24abc8dd..00000000
--- a/docs/repository-engine-objects.dot
+++ /dev/null
@@ -1,86 +0,0 @@
-// $URL$
-// $Id$
-//
-// {arrowhead,arrowtail} shapes indicate database object relationships:
-// 1- none
-// m- crow
-//
-// Color code:
-// Blue: visible in left-right protocol
-// Green: created on the fly
-
-digraph rpki_engine_objects {
- rotate=90; size="11,8.5"; splines=true; ratio=fill;
- node [ shape=record ];
-
- // Objects visible in left-to-right protocol
- node [ color=blue ];
- self [ label="Self|{Preferences}" ];
- parent [ label="Parent|{URI|TA|SIA Base}" ];
- repo [ label="Repository|{URI|TA}" ];
- child [ label="Child|{TA}" ];
- biz_sign [ label="Business\nSigning Context|{Keypair|CertChain}" ];
- route_origin [ label="Route\nOrigin|{AS Number}" ];
-
- // Objects which left-right protocol sees as part of other
- // objects but which SQL needs to be separate for
- // normalization.
-
- addr_set [ label="Address\nPrefix", color=purple ];
-
- // Objects created on the fly by the RPKI engine
- node [ color=green ];
- ca [ label="CA|{Last CRL #|Next CRL Date|Last Issued Serial #|Last Manifest #|Next Manifest Date|SIA URI}" ];
- ca_detail [ label="CA Detail|{CA Private Key Handle|CA Public Key|Latest CA Certificate|Manifest EE Private Key Handle|Manifest EE Public Key|Latest Manifest EE Certificate|Latest Manifest|Latest CRL}" ];
-
- // Some question whether these objects need to be in database
- // per se or are just properties hanging on some other object
- // like ca or ca_detail. For manifests, we need last serial,
- // same as for CRL.
- roa [ label="ROA|{EE Certificate|ROA}" ];
-
- // This one is a table of everything we have ever issued to
- // this child, not to be confused with what's -currently-
- // issued to this child. Some question whether this hangs off
- // ca or ca_detail, but we -think- hanging off of ca_detail is
- // correct because certificates are issued by a particular
- // keypair.
-
- child_cert [ label="Child CA Certificate" ];
-
- // One-many mappings
- edge [ color=blue, arrowtail=none, arrowhead=crow ];
- self -> biz_sign;
- biz_sign -> child;
- biz_sign -> parent;
- biz_sign -> repo;
- self -> child;
- self -> parent;
- repo -> parent;
- self -> route_origin;
-
- route_origin -> addr_set [ color=purple, arrowtail=none, arrowhead=crow ];
-
- // This is many-many because each child is an entity, each CA
- // can have multiple children, and each child can hold certs
- // from multiple CAs (thanks, RobL).
- //
- ca -> child [ color=green, arrowtail=crow, arrowhead=crow ];
-
- // One-many mappings
- edge [ color=green, arrowtail=none, arrowhead=crow ];
- ca -> ca_detail;
- child -> child_cert;
- parent -> ca;
- ca_detail -> child_cert;
- ca_detail -> roa;
-
- // One-one mapping -- separate object to highlight dynamic nature
- edge [ color=green, arrowtail=none, arrowhead=none, style=solid ];
- route_origin -> roa;
-
-}
-
-// Local Variables:
-// compile-command: "dot -Tps2 repository-engine-objects.dot | ps2pdf - repository-engine-objects.pdf"
-// End:
diff --git a/docs/repository-engine-objects.pdf b/docs/repository-engine-objects.pdf
deleted file mode 100644
index 68c6d2d6..00000000
--- a/docs/repository-engine-objects.pdf
+++ /dev/null
Binary files differ
diff --git a/docs/repository-structure.txt b/docs/repository-structure.txt
deleted file mode 100644
index 327663b7..00000000
--- a/docs/repository-structure.txt
+++ /dev/null
@@ -1,111 +0,0 @@
-$Id$
-
-Copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN")
-
-Permission to use, copy, modify, and distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
-
-This note is an attempt to write up the conclusions that several of us
-came to at the RPKI meeting in Prague, March 2007.
-
-We currently have two examples of possible repository structure,
-neither of which is quite what at least some of us think we want yet.
-
-APNIC's hierarchy of directories named by the g(SKI) function applied
-to the public keys has some nice properties: in particular, the
-hierarchical structure (subjects being stored underneath their issuers
-when sharing a repository) has very nice scaling properties with
-rsync. With this structure, a top-down walk such as rcynic uses will
-pick up an entire tree as a side effect of fetching the top-most
-issuer's SIA collection. Combined with a trivial memory cache to let
-rcynic keep track of which URIs it has already fetched, this speeds up
-rcynic's runtime by nearly two orders of magnitude in testing late
-last year. The reason for this turns out to be simple: rsync is a
-reasonably fast protocol, so one rsync connection to fetch an SIA
-collection that hasn't changed takes approximately 500ms on not
-terribly exciting hardware -- but in a system with more than 40,000
-objects, the cumulative total of all those half-second rsync
-connections becomes significant.
-
-There is, however, one problem with the current APNIC structure: the
-g(SKI) naming scheme means that the URIs associated with every
-decendent of a particular node in the tree will change when that
-node's key changes. This means that a key rollover event near the
-root of the tree (eg, when APNIC's own key changes) will require a
-painfully large number of certificates to be reissued. NB: only one
-key is rolling in this scenario, the rest of the certificates are
-being reissued with the same key, and the only reason why they need to
-be reissued at all is that the path has changed.
-
-At the same time, the g(SKI) naming scheme has good properties for
-naming certificates and CRLs, as it means that we can perform "make
-before break" rollovers, leaving the old certificate path in place
-until the new one is fully operational.
-
-So the goal here is to preserve the nice hierarchical structure of
-APNIC's model, and preserve the nice properties of the g(SKI) naming
-for certificates and CRLs, while avoiding the need to reissue every
-desendent after a key rollover. We think that we can do this by using
-static names for the directories and g(SKI)-based names for the files.
-
-This immediately begs the question of what the static names should be.
-Some of us were tempted to make them organization names, but others of
-us felt strongly that they should be completely meaningless, as they
-only need to be unique within a particular parent directory and as we
-really want to avoid all the "identity" issues that we have thus far
-carefully avoided. We did not achieve consensus on this point, but I
-(sra) am firmly in the meaningless name camp on this one.
-
-The upshot of all this is that I expect to be using URIs like:
-
- rsync://hostname/g0001/g0002/g0003/
- rsync://hostname/g0001/g0002/g0003/g(ski).cer
- rsync://hostname/g0001/g0002/g0003/g(ski).crl
-
-where "gNNNN" indicates a generated symbol with no significance other
-than that it is unique enough to avoid collisions. In this particular
-case, the scope in which the symbol must be unique is just the
-directory in which it appears.
-
-We haven't yet discussed how to name ROAs, but since we expect ROAs to
-be tied to particular single-use EE certs, my guess is that a g(SKI)
-name based on the key of the EE cert would be appropriate, so either
-of the following forms would probably work:
-
- rsync://hostname/g0001/g0002/g0003/g0004/g(ski).roa
- rsync://hostname/g0001/g0002/g0003/g(ski)/g(ski).roa
-
-The latter violates the rule of only using g(SKI) names for files,
-never for directories, but in this case it'd probably be ok.
-
-This assumes that we're generating a new key for each ROA; if we're
-reusing keys (dunno), we'd need a naming scheme like:
-
- rsync://hostname/g0001/g0002/g0003/g(ski)/g0004.roa
-
-For those unfamiliar with the notation (borrowed from Lisp): g0001 etc
-are just "gensym" symbols, ie, the output of some function whose sole
-purpose is to generate meaningless symbols.
-
-See images/repository-structure.pdf for an illustration of the problem
-and solution.
-
-There may be compromise-driven rollover cases in which we will need to
-reissue all of the children of a node whose key has been compromised.
-Whether or not this is necessary depends on whether the master copy of
-the authoritative data is safe somewhere else; if it is, and the
-resource certificates are just a signed representation of an
-authoritative database that has not been compromised, reissuing all of
-the descendants may not be necessary, but if the resource certificates
--are- the database, and one level in it has been compromised, it's
-probably advisable to reissue all the descendants.
diff --git a/docs/sample-irdb-data.sql b/docs/sample-irdb-data.sql
deleted file mode 100644
index df24b48f..00000000
--- a/docs/sample-irdb-data.sql
+++ /dev/null
@@ -1,80 +0,0 @@
--- $Id$
-
--- Copyright (C) 2007-2008 American Registry for Internet Numbers ("ARIN")
---
--- Permission to use, copy, modify, and distribute this software for any
--- purpose with or without fee is hereby granted, provided that the above
--- copyright notice and this permission notice appear in all copies.
---
--- THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH
--- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
--- AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT,
--- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
--- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
--- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
--- PERFORMANCE OF THIS SOFTWARE.
-
-INSERT INTO registrant (IRBE_mapped_id) VALUES ('ARIN');
-INSERT INTO registrant (IRBE_mapped_id) VALUES ('TIER1_ISP1');
-INSERT INTO registrant (IRBE_mapped_id) VALUES ('TIER1_ISP2');
-INSERT INTO registrant (IRBE_mapped_id) VALUES ('JOES_PIZZA');
-
-INSERT INTO resource_class (subject_name, valid_until, registrant_id)
-SELECT 'All ARIN resources', '2099-12-31', registrant_id
-FROM registrant WHERE IRBE_mapped_id = 'ARIN';
-
-INSERT INTO resource_class (subject_name, valid_until, registrant_id)
-SELECT 'Tier 1 ISP foo subject name', '2008-12-31', registrant_id
-FROM registrant WHERE IRBE_mapped_id = 'TIER1_ISP1';
-
-INSERT INTO resource_class (subject_name, valid_until, registrant_id)
-SELECT 'Tier 1 ISP foo subject name', '2009-06-30', registrant_id
-FROM registrant WHERE IRBE_mapped_id = 'TIER1_ISP1';
-
-INSERT INTO resource_class (subject_name, valid_until, registrant_id)
-SELECT 'Tier 1 ISP bar subject name', '2007-07-31', registrant_id
-FROM registrant WHERE IRBE_mapped_id = 'TIER1_ISP2';
-
-INSERT INTO resource_class (subject_name, valid_until, registrant_id)
-SELECT 'arbitrary characters', '2007-12-31', registrant_id
-FROM registrant WHERE IRBE_mapped_id = 'JOES_PIZZA';
-
-INSERT INTO net (start_ip, end_ip, version, resource_class_id)
-SELECT 'DEAD:BEEF:0000:0000:0000:0000:0000:0000', 'DFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF', 6, resource_class_id
-FROM resource_class WHERE subject_name = 'All ARIN resources';
-
-INSERT INTO net (start_ip, end_ip, version, resource_class_id)
-SELECT 'DEAD:BEEF:FACE:0000:0000:0000:0000:0000', 'DEAD:BEEF:FACE:FFFF:FFFF:FFFF:FFFF:FFFF', 6, resource_class_id
-FROM resource_class WHERE subject_name = 'TIER 1 ISP foo subject name' AND valid_until = '2009-06-30';
-
-INSERT INTO net (start_ip, end_ip, version, resource_class_id)
-SELECT 'DEAD:BEEF:FACE:FADE:0000:0000:0000:0000', 'DEAD:BEEF:FACE:FADE:FFFF:FFFF:FFFF:FFFF', 6, resource_class_id
-FROM resource_class WHERE subject_name = 'arbitrary characters' AND valid_until = '2007-12-31';
-
-INSERT INTO net(start_ip, end_ip, version, resource_class_id)
-SELECT '010.000.000.000', '010.255.255.255', 4, resource_class_id
-FROM resource_class WHERE subject_name = 'All ARIN resources';
-
-INSERT INTO net(start_ip, end_ip, version, resource_class_id)
-SELECT '010.128.000.000', '010.191.255.255', 4, resource_class_id
-FROM resource_class WHERE subject_name = 'Tier 1 ISP foo subject name' AND valid_until = '2009-06-30';
-
-INSERT INTO net(start_ip, end_ip, version, resource_class_id)
-SELECT '010.000.000.000', '010.063.255.255', 4, resource_class_id
-FROM resource_class WHERE subject_name = 'Tier 1 ISP foo subject name' AND valid_until = '2009-06-30';
-
-INSERT INTO net(start_ip, end_ip, version, resource_class_id)
-SELECT '010.128.000.000', '010.191.255.255', 4, resource_class_id
-FROM resource_class WHERE subject_name = 'arbitrary characters';
-
-INSERT INTO asn(start_as, end_as, resource_class_id)
-SELECT 12345, 12345, resource_class_id
-FROM resource_class WHERE subject_name = 'Tier 1 ISP foo subject name' AND valid_until = '2009-06-30';
-
-INSERT INTO asn(start_as, end_as, resource_class_id)
-SELECT 23456, 23457, resource_class_id
-FROM resource_class WHERE subject_name = 'Tier 1 ISP foo subject name' AND valid_until = '2009-06-30';
-
-INSERT INTO asn(start_as, end_as, resource_class_id)
-SELECT 34567, 34567, resource_class_id
-FROM resource_class WHERE subject_name = 'Tier 1 ISP foo subject name' AND valid_until = '2008-12-31';
diff --git a/docs/signed-manifests b/docs/signed-manifests
deleted file mode 100644
index d1bd3f5e..00000000
--- a/docs/signed-manifests
+++ /dev/null
@@ -1,74 +0,0 @@
--- $Id$
-
--- Copyright (C) 2007-2008 American Registry for Internet Numbers ("ARIN")
---
--- Permission to use, copy, modify, and distribute this software for any
--- purpose with or without fee is hereby granted, provided that the above
--- copyright notice and this permission notice appear in all copies.
---
--- THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH
--- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
--- AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT,
--- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
--- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
--- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
--- PERFORMANCE OF THIS SOFTWARE.
-
--- Signed manifests for RPKI repositories. Relying parties use object
--- (as opposed to channel) security for everything in this design
--- repository, which is the right thing to do for various reasons but
--- leaves us open to attacks which intercept the rsync connection and
--- drop valid objects out of an SIA collection. At present this is
--- not detectable, so we need a mechanism.
---
--- Manifests as described here are modeled on CRLs, because the issues
--- involved in detecting stale manifests, manifest replays, etc are
--- similar to those for CRLs. So we want many of the fields that a
--- CRL has. Syntax differs, though, since RPKI repositories can
--- contain objects not covered by CRLs (eg, ROAs), and reuse CMS as
--- the manifest signature format rather than inventing another one.
---
--- See RFC 3280 section 5 for CRL layout and extensions.
---
--- We're only trying to cover objects in the same SIA collection
--- (directory) as the manifest. We will probably want to name the
--- manifest itself with a name derived from the g(ski) of the cert of
--- which this is the SIA collection. We'll need an EE cert to sign
--- the manifest; the EE cert should probably just use RFC 3779
--- inheritance to cover all the resources that its issuer holds. If we
--- use CMS, we might just want to include the EE cert in the CMS
--- bag of certs.
---
--- Lisp pseudo-code version of my original proposal for what goes
--- inside the CMS wrapper:
---
--- (manifest :version 1
--- :collection-uri "rsync://foo.example/wombat/"
--- :this-update timestamp
--- :next-update timestamp
--- :manifest-serial 17
--- :hash-algorithm :sha256
--- (:name foo.cer :hash aabbccdd...)
--- (:name bar.cer :hash bbccddee...)
--- (:name foo.roa :hash ccddeeff...)
--- (:name baz.crl :hash ddeeff00...)
--- ...)
---
--- Steve Kent came up with something very similar in ASN.1. At this
--- point I think that Steve and I have converged, so here is Steve's
--- ASN.1, which, absent new issues, I expect to implement with
--- OpenSSL's ASN.1 engine.
-
-Manifest ::= SEQUENCE {
- version [0] INTEGER DEFAULT 0, -- first version is 0
- manifestNumber INTEGER, -- to identify unscheduled manifest issuance
- thisUpdate GeneralizedTime, -- this manifest issuance time
- nextUpdate GeneralizedTime, -- next scheduled manifest issuance time
- fileHashAlg OBJECT IDENTIFIER, -- algorithm used to generate file content hash values
- fileList SEQUENCE OF FileAndHash -- list of file name and content hash pairs
-}
-
-FileAndHash ::= SEQUENCE {
- file IA5String -- file name
- hash BIT STRING -- hash of file content
-}
diff --git a/docs/up-down-protocol b/docs/up-down-protocol
deleted file mode 100644
index 4e4aa86c..00000000
--- a/docs/up-down-protocol
+++ /dev/null
@@ -1,8 +0,0 @@
-$Id$
-
-The master copy of the up-down protocol currently lives in a wiki at
-APNIC. A flat text mirror of this document can be found at:
-
-http://subvert-rpki.hactrn.net/wiki-mirror/text/mirin.apnic.net/resourcecerts/wiki/index.php/IR-ISP_Definition
-
-(ie, ../wiki-mirror/text/mirin.apnic.net/resourcecerts/wiki/index.php/IR-ISP_Definition within this repository).