]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/ntp/util/ntp-keygen.texi
MFC r338126: MFV r338092: ntp 4.2.8p12.
[FreeBSD/stable/10.git] / contrib / ntp / util / ntp-keygen.texi
1 \input texinfo    @c -*-texinfo-*-
2 @c %**start of header
3 @setfilename ntp-keygen.info
4 @settitle Ntp-keygen User's Manual
5 @include ../sntp/include/version.texi
6 @paragraphindent 2
7 @c %**end of header
8
9 @ifinfo
10 This file documents the use of the NTP Project's @code{ntp-keygen}
11 program, which generates various keys for @code{ntpd},
12 @end ifinfo
13
14 @direntry
15 * ntp-keygen: (ntp-keygen).                   NTP Key Generation
16 @end direntry
17
18 @titlepage
19 @title NTP Key Generation User's Manual
20 @subtitle ntp-keygen, version @value{VERSION}, @value{UPDATED}
21 @c @author Max @email{foo@ntp.org}
22 @end titlepage
23
24 @c @page
25 @c @vskip 0pt plus 1filll
26
27 @shortcontents
28
29 @menu
30 * Description::                 
31 * ntp-keygen Invocation::       Invoking ntp-keygen
32 * Running the Program::         
33 * Random Seed File::            
34 * Cryptographic Data Files::    
35 @end menu
36
37 @node Top, Description, (dir), (dir)
38 @top NTP Key Generation Program User Manual
39
40 This document describes the use of the NTP Project's @code{ntp-keygen}
41 program, that generates cryptographic data files used by the NTPv4
42 authentication and identity schemes.
43 It can generate message digest keys used in symmetric key cryptography and,
44 if the OpenSSL software
45 library has been installed, it can generate host keys, sign keys,
46 certificates, and identity keys and parameters used by the Autokey
47 public key cryptography.
48 The message digest keys file is generated in a
49 format compatible with NTPv3.
50 All other files are in PEM-encoded
51 printable ASCII format so they can be embedded as MIME attachments in
52 mail to other sites.
53
54 This document applies to version @value{VERSION} of @code{ntp-keygen}.
55
56 @node Description, Running the Program, Top, Top
57 @comment  node-name,  next,  previous,  up
58 @section Description
59
60 This program generates cryptographic data files used by the NTPv4
61 authentication and identity schemes. It can generate message digest
62 keys used in symmetric key cryptography and, if the OpenSSL software
63 library has been installed, it can generate host keys, sign keys,
64 certificates, and identity keys and parameters used by the Autokey
65 public key cryptography. The message digest keys file is generated in a
66 format compatible with NTPv3. All other files are in PEM-encoded
67 printable ASCII format so they can be embedded as MIME attachments in
68 mail to other sites.
69
70 When used to generate message digest keys, the program produces a file
71 containing ten pseudo-random printable ASCII strings suitable for the
72 MD5 message digest algorithm included in the distribution.
73 If the
74 OpenSSL library is installed, it produces an additional ten hex-encoded
75 random bit strings suitable for the SHA1 and other message digest
76 algorithms.
77 The message digest keys file must be distributed and stored
78 using secure means beyond the scope of NTP itself.
79 Besides the keys
80 used for ordinary NTP associations, additional keys can be defined as
81 passwords for the ntpq and ntpdc utility programs.
82
83 The remaining generated files are compatible with other OpenSSL
84 applications and other Public Key Infrastructure (PKI) resources.
85 Certificates generated by this program are compatible with extant
86 industry practice, although some users might find the interpretation of
87 X509v3 extension fields somewhat liberal.
88 However, the identity keys
89 are probably not compatible with anything other than Autokey.
90
91 Some files used by this program are encrypted using a private password.
92 The @code{-p} option specifies the password for local encrypted files and the
93 @code{-q} option the password for encrypted files sent to remote sites.
94 If no password is specified, the host name returned by the Unix
95 @code{gethostname()} function, normally the DNS name of the host, is used.
96
97 The @kbd{pw} option of the @code{crypto} configuration command
98 specifies the read password for previously encrypted local files.
99 This must match the local password used by this program.
100 If not specified, the host name is used.
101 Thus, if files are generated by this program without password,
102 they can be read back by ntpd without password, but only on the same
103 host.
104
105 Normally, encrypted files for each host are generated by that host and
106 used only by that host, although exceptions exist as noted later on
107 this page.
108 The symmetric keys file, normally called @code{ntp.keys}, is
109 usually installed in @code{/etc}.
110 Other files and links are usually installed
111 in @code{/usr/local/etc}, which is normally in a shared filesystem in
112 NFS-mounted networks and cannot be changed by shared clients.
113 The location of the keys directory can be changed by the keysdir
114 configuration command in such cases.
115 Normally, this is in @code{/etc}.
116
117 This program directs commentary and error messages to the standard
118 error stream @code{stderr} and remote files to the standard output stream
119 @code{stdout} where they can be piped to other applications or redirected to
120 files.
121 The names used for generated files and links all begin with the
122 string @code{ntpkey} and include the file type,
123 generating host and filestamp,
124 as described in the @ref{Cryptographic Data Files} section below.
125
126 @node Running the Program, Random Seed File, Description, Top
127 @comment  node-name,  next,  previous,  up
128 @section Running the Program
129
130 To test and gain experience with Autokey concepts, log in as root and
131 change to the keys directory, usually @code{/usr/local/etc}.
132 When run for the
133 first time, or if all files with names beginning @code{ntpkey}] have been
134 removed, use the @code{ntp-keygen} command without arguments to generate a
135 default RSA host key and matching RSA-MD5 certificate with expiration
136 date one year hence.
137 If run again without options, the program uses the
138 existing keys and parameters and generates only a new certificate with
139 new expiration date one year hence.
140
141 Run the command on as many hosts as necessary.
142 Designate one of them as the trusted host (TH) using @code{ntp-keygen}
143 with the @code{-T} option and configure
144 it to synchronize from reliable Internet servers.
145 Then configure the other hosts to synchronize to the TH directly or indirectly.
146 A certificate trail is created when Autokey asks the immediately
147 ascendant host towards the TH to sign its certificate, which is then
148 provided to the immediately descendant host on request.
149 All group hosts should have acyclic certificate trails ending on the TH.
150
151 The host key is used to encrypt the cookie when required and so must be
152 RSA type.
153 By default, the host key is also the sign key used to encrypt signatures.
154 A different sign key can be assigned using the @code{-S} option
155 and this can be either RSA or DSA type.
156 By default, the signature
157 message digest type is MD5, but any combination of sign key type and
158 message digest type supported by the OpenSSL library can be specified
159 using the @code{-c} option.
160
161 The rules say cryptographic media should be generated with proventic
162 filestamps, which means the host should already be synchronized before
163 this program is run.
164 This of course creates a chicken-and-egg problem
165 when the host is started for the first time.
166 Accordingly, the host time
167 should be set by some other means, such as eyeball-and-wristwatch, at
168 least so that the certificate lifetime is within the current year.
169 After that and when the host is synchronized to a proventic source, the
170 certificate should be re-generated.
171
172 Additional information on trusted groups and identity schemes is on the
173 Autokey Public-Key Authentication page.
174
175 @include invoke-ntp-keygen.texi
176
177 @node Random Seed File, Cryptographic Data Files, Running the Program, Top
178 @comment  node-name,  next,  previous,  up
179 @section Random Seed File
180
181 All cryptographically sound key generation schemes must have means to
182 randomize the entropy seed used to initialize the internal
183 pseudo-random number generator used by the OpenSSL library routines.
184 If a site supports ssh, it is very likely that means to do this are
185 already available.
186 The entropy seed used by the OpenSSL library is contained in a file,
187 usually called @code{.rnd}, which must be available when
188 starting the @code{ntp-keygen} program or @code{ntpd} daemon.
189
190 The OpenSSL library looks for the file using the path specified by the
191 @code{RANDFILE} environment variable in the user home directory, whether root
192 or some other user.
193 If the @code{RANDFILE} environment variable is not
194 present, the library looks for the @code{.rnd} file in the user home
195 directory.
196 Since both the @code{ntp-keygen} program and @code{ntpd} daemon must run
197 as root, the logical place to put this file is in @code{/.rnd} or
198 @code{/root/.rnd}.
199 If the file is not available or cannot be written, the program exits
200 with a message to the system log.
201
202 @node Cryptographic Data Files,  , Random Seed File, Top
203 @comment  node-name,  next,  previous,  up
204 @section Cryptographic Data Files
205
206 File and link names are in the @code{form ntpkey_key_name.fstamp},
207 where @code{key} is the key or parameter type,
208 @code{name} is the host or group name and
209 @code{fstamp} is the filestamp (NTP seconds) when the file was created).
210 By convention, key names in generated file names include both upper and
211 lower case characters, while key names in generated link names include
212 only lower case characters. The filestamp is not used in generated link
213 names.
214
215 The key name is a string defining the cryptographic key type.
216 Key types include public/private keys host and sign, certificate cert
217 and several challenge/response key types.
218 By convention, client files used for
219 challenges have a par subtype, as in the IFF challenge IFFpar, while
220 server files for responses have a key subtype, as in the GQ response
221 GQkey.
222
223 All files begin with two nonencrypted lines. The first line contains
224 the file name in the format @code{ntpkey_key_host.fstamp}.
225 The second line contains the datestamp in conventional Unix date format.
226 Lines beginning with @code{#} are ignored.
227
228 The remainder of the file contains cryptographic data encoded first
229 using ASN.1 rules, then encrypted using the DES-CBC algorithm with
230 given password and finally written in PEM-encoded printable ASCII text
231 preceded and followed by MIME content identifier lines.
232
233 The format of the symmetric keys file, ordinarily named @code{ntp.keys},
234 is somewhat different than the other files in the interest of backward
235 compatibility.
236 Ordinarily, the file is generated by this program, but
237 it can be constructed and edited using an ordinary text editor.
238
239 @example
240 # ntpkey_MD5key_hms.local.3564038757
241 # Sun Dec  9 02:45:57 2012
242
243  1 MD5 "]!ghT%O;3)WJ,/Nc:>I  # MD5 key
244  2 MD5 lu+H^tF46BKR-6~p{V_5  # MD5 key
245  3 MD5 :lnoVsE%Y}z*avh%EtNC  # MD5 key
246  4 MD5 |fdZrf0sF~@PHZ;w-i^V  # MD5 key
247  5 MD5 IyAG>O"}y"LmCRS!*bHC  # MD5 key
248  6 MD5 ">e\A@>hT/661ri52,,H  # MD5 key
249  7 MD5 c9x=M'CfLxax9v)PV-si  # MD5 key
250  8 MD5 E|=jvFVov?Bn|Ev=&aK\  # MD5 key
251  9 MD5 T!c4UT&`(m$+m+B6,`Q0  # MD5 key
252 10 MD5 JVF/1=)=IFbHbJQz..Cd  # MD5 key
253 11 SHA1 6dea311109529e436c2b4fccae9bc753c16d1b48  # SHA1 key
254 12 SHA1 7076f373d86c4848c59ff8046e49cb7d614ec394  # SHA1 key
255 13 SHA1 5f48b1b60591eb01b7cf1d33b7774f08d20262d3  # SHA1 key
256 14 SHA1 eed5ab9d9497319ec60cf3781d52607e76720178  # SHA1 key
257 15 SHA1 f283562611a04c964da8126296f5f8e58c3f85de  # SHA1 key
258 16 SHA1 1930da171297dd63549af50b29449de17dcf341f  # SHA1 key
259 17 SHA1 fee892110358cd4382322b889869e750db8e8a8f  # SHA1 key
260 18 SHA1 b5520c9fadd7ad3fd8bfa061c8821b65d029bb37  # SHA1 key
261 19 SHA1 8c74fb440ec80f453ec6aaa62b9baed0ab723b92  # SHA1 key
262 20 SHA1 6bc05f734306a189326000970c19b3910f403795  # SHA1 key
263 @end example
264
265                   Figure 1. Typical Symmetric Key File
266
267 Figure 1 shows a typical symmetric keys file used by the reference
268 implementation.
269 Each line of the file contains three fields, first an
270 integer between 1 and 65535, inclusive, representing the key identifier
271 used in the server and peer configuration commands.
272 Next is the key type for the message digest algorithm,
273 which in the absence of the
274 OpenSSL library must be MD5 to designate the MD5 message digest
275 algorithm.
276 If the OpenSSL library is installed, the key type can be any
277 message digest algorithm supported by that library.
278 However, if
279 compatibility with FIPS 140-2 is required, the key type must be either
280 SHA or SHA1.
281 The key type can be changed using an ASCII text editor.
282
283 An MD5 key consists of a printable ASCII string less than or equal to
284 16 characters and terminated by whitespace or a # character.
285 An OpenSSL
286 key consists of a hex-encoded ASCII string of 40 characters, which is
287 truncated as necessary.
288
289 Note that the keys used by the @code{ntpq} and @code{ntpdc} programs are
290 checked against passwords requested by the programs and entered by hand,
291 so it
292 is generally appropriate to specify these keys in human readable ASCII
293 format.
294
295 The @code{ntp-keygen} program generates a MD5 symmetric keys file
296 @code{ntpkey_MD5key_hostname.filestamp}.
297 Since the file contains private
298 shared keys, it should be visible only to root and distributed by
299 secure means to other subnet hosts.
300 The NTP daemon loads the file @code{ntp.keys}, so @code{ntp-keygen}
301 installs a soft link from this name to the generated file.
302 Subsequently, similar soft links must be installed by
303 manual or automated means on the other subnet hosts.
304 While this file is
305 not used with the Autokey Version 2 protocol, it is needed to
306 authenticate some remote configuration commands used by the @code{ntpq} and
307 @code{ntpdc} utilities.