blob: b05e9cbbe87b7cd2bcf0e3c04a7f4881d4bd5255 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
;;; -*- Lisp -*-
;;; $URL$
;;; $Id$
;;;
;;; This file is psuedocode, I just wanted to take advantage of
;;; emacs's built-in support for languages with reasonable syntax.
;;; Final version will likely be either flat text or ASN.1.
;;;
;;; Signed manifests for RPKI repositories. We're using object (as
;;; opposed to channel) security for everything in the 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 will probably differ, though, since RPKI
;;; repositories can contain objects not covered by CRLs (eg, ROAs),
;;; and we may well decide just to sign the manifest with CMS.
;;;
;;; 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.
;;;
;;; For the moment I assume we're signing with CMS, so the signature
;;; parameters and signature itself are not included below.
(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...)
...)
|