Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH AUTHSRV 6
2
.SH NAME
3
authsrv, p9any, p9sk1, p9sk2 \- authentication protocols
4
.SH DESCRIPTION
5
This manual page describes
6
the protocols used to authorize connections, confirm the identities
7
of users and machines, and maintain the associated databases.
8
The machine that provides these services is called the
9
.I authentication server
10
(AS).
11
The AS may be a stand-alone machine or a general-use machine such as a CPU server.
12
The network database
13
.IR ndb (6)
14
holds for each public machine, such as a CPU server or
15
file server, the name of the authentication server that machine uses.
16
.PP
17
Each machine contains three values important to authentication; a 56-bit DES
18
key, a 28-byte authentication ID, and a 48-byte authentication domain name.
19
The ID is a user name and identifies who is currently responsible for the
20
kernel running on that machine.
21
The domain name identifies the machines across which the ID is valid.
22
Together, the ID and domain name identify the owner of a key.
23
.PP
24
When a terminal boots,
25
.IR factotum (4)
26
prompts for user name and password.
27
The user name becomes the terminal's authentication ID. 
28
The password is converted using
29
.I passtokey
30
(see
31
.IR authsrv (2))
32
into a 56-bit DES key and saved in memory.
33
The authentication domain is set to the null string.
34
If possible,
35
.I factotum
36
validates the key with the AS
37
before saving it.
38
For Internet machines the correct AS to ask is found using
39
.IR dhcpd (8).
40
.PP
41
When a CPU or file server boots, 
42
.I factotum
43
reads the key, ID, and domain name from
44
non-volatile RAM.
45
This allows servers to reboot without operator intervention.
46
.PP
47
The details of any authentication are mixed with the semantics
48
of the particular service they are authenticating so we describe
49
them one case at a time. The following definitions will be used
50
in the descriptions:
51
.TF nullx
52
.TP
53
.I Ks
54
server's host ID's key
55
.TP
56
.I Kc
57
client's host ID's key
58
.TP
59
.I Kn
60
a nonce key created for a ticket
61
.RB ( key )
62
.TP
63
.IR K { m }
64
message
65
.I m
66
encrypted with key
67
.I K
68
.TP
69
.I CHc
70
an 8-byte random challenge from a client
71
.RB ( chal )
72
.TP
73
.I CHs
74
an 8-byte random challenge from a server
75
.RB ( chal )
76
.TP
77
.I IDs
78
server's ID
79
.RB ( authid )
80
.TP
81
.I DN
82
server's authentication domain name
83
.RB ( authdom )
84
.TP
85
.I IDc
86
client's ID
87
.RB ( hostid ,
88
.BR cuid )
89
.TP
90
.I IDr
91
client's desired ID on server
92
.RB ( uid ,
93
.BR suid )
94
.PD
95
.PP
96
The parenthesized names are the ones used in the
97
.B Ticketreq
98
and
99
.B Ticket
100
structures in
101
.BR <authsrv.h> .
102
.PP
103
The message type constants
104
.IR AuthTreq ,
105
.IR AuthChal ,
106
.IR AuthPass ,
107
.IR AuthOK ,
108
.IR AuthErr ,
109
.IR AuthMod ,
110
.IR AuthApop ,
111
.IR AuthOKvar ,
112
.IR AuthChap ,
113
.IR AuthMSchap ,
114
.IR AuthCram ,
115
and
116
.IR AuthVNC
117
.RB ( type )
118
are defined in
119
.BR <authsrv.h> ,
120
as are the encrypted message types
121
.IR AuthTs ,
122
.IR AuthAs ,
123
.IR AuthAc ,
124
.IR AuthTp ,
125
and
126
.IR AuthHr
127
.RB ( num ).
128
.SS "Ticket Service
129
When a client and server wish to authenticate to each other,
130
they do so using
131
.I tickets
132
issued by the AS.
133
Obtaining tickets from the AS
134
is the client's responsibility.
135
.PP
136
The protocol to obtain a ticket pair is:
137
.TP
138
.IR C \(-> A
139
.IR AuthTreq ,
140
.IR IDs ,
141
.IR DN ,
142
.IR CHs ,
143
.IR IDc ,
144
.IR IDr
145
.sp -\n(PDu
146
.TP
147
.IR A \(-> C
148
.IR AuthOK ,
149
.IR Kc { AuthTc ,
150
.IR CHs ,
151
.IR IDc ,
152
.IR IDr ,
153
.IR Kn },
154
.IR Ks { AuthTs ,
155
.IR CHs ,
156
.IR IDc ,
157
.IR IDr ,
158
.IR Kn }
159
.PP
160
The two tickets are identical except for their type fields
161
and the keys with which they are encrypted.
162
The client and server can each decrypt one of the tickets,
163
establishing a shared secret
164
.IR Kn .
165
.PP
166
The
167
tickets can be viewed as a statement by the
168
AS that
169
``a client possessing the
170
.I Kn
171
key is allowed to authenticate as
172
.IR IDr .''
173
.PP
174
The presence of the server challenge
175
.I CHs
176
in the ticket allows the server to verify the freshness
177
of the ticket pair.
178
.PP
179
The AS sets the
180
.I IDr
181
in the tickets to the requested
182
.I IDr
183
only if
184
.I IDc
185
is allowed to
186
.I "speak for
187
.RI ( q.v. )
188
.IR IDr .
189
If not,
190
the AS sets
191
.I IDr
192
to the empty string.
193
.PP
194
If the users
195
.I IDc
196
or
197
.I IDs
198
do not exist,
199
the AS silently generates one-time
200
random keys to use in place of
201
.I Kc
202
or
203
.IR Ks ,
204
so that clients cannot probe the AS
205
to learn whether a user name is valid.
206
.SS "P9sk1
207
The Plan 9 shared key protocol
208
.I p9sk1
209
allows a client and server to authenticate each other.
210
The protocol is:
211
.TP
212
.IR C \(-> S
213
.I CHc
214
.br
215
The client starts by sending a random challenge to the server.
216
.TP
217
.IR S \(-> C
218
.IR AuthTreq ,
219
.IR IDs ,
220
.IR DN ,
221
.IR CHs ,
222
.IR \- ,
223
.IR \-
224
.br
225
The server replies with a ticket request giving its
226
id and authentication domain along with its own 
227
random challenge.
228
.TP
229
.IR C \(-> S
230
.IR Ks { AuthTs ,
231
.IR CHs ,
232
.IR IDc ,
233
.IR IDr ,
234
.IR Kn },
235
.IR Kn { AuthAc ,
236
.IR CHs }
237
.br
238
The client adds 
239
.I IDc
240
and
241
.I IDr
242
to the ticket request and obtains a ticket pair
243
from the AS as described above.
244
The client relays the server's ticket along with
245
an 
246
.IR authenticator ,
247
the
248
.I AuthAc
249
message.
250
The authenticator proves to the server that the
251
client knows
252
.I Kn
253
and is therefore allowed to authenticate as
254
.IR IDr .
255
(The inclusion of
256
.IR CHs
257
in the authenticator avoids replay attacks.)
258
.TP
259
.IR S \(-> C
260
.IR Kn { AuthAs ,
261
.IR CHc }
262
.br
263
The server replies with its own authenticator,
264
proving to the client that it also knows
265
.I Kn
266
and therefore 
267
.I Ks .
268
.PD
269
.PP
270
.I P9sk2
271
is an older variant of 
272
.I p9sk1
273
used only when connecting to pre-9P2000 remote
274
execution services.
275
It omits the first message and last 
276
messages and therefore does not
277
authenticate the server to the client.
278
.SS "P9any
279
.I P9any
280
is the standard Plan 9 authentication protocol.
281
It consists of a negotiation to determine a common
282
protocol, followed by the agreed-upon protocol.
283
.PP
284
The negotiation protocol is:
285
.TP
286
.IR S \(-> C
287
.B v.2
288
.IB proto@authdom
289
.IB proto@authdom
290
.I ...
291
.sp -\n(PDu
292
.TP
293
.IR C \(-> S
294
.I proto
295
.I dom
296
.sp -\n(PDu
297
.TP
298
.IR S \(-> C
299
.B OK
300
.PP
301
Each message is a NUL-terminated UTF string.
302
The server begins by sending a list of
303
.IR proto ,
304
.I authdom
305
pairs it is willing to use.
306
The client
307
responds with its choice.
308
Requiring the client to wait for the final
309
.B OK
310
ensures that the client will not start
311
the chosen protocol until the server is ready.
312
.PP
313
The above is version 2 of the protocol.
314
Version 1,
315
no longer used,
316
omitted the first message's
317
.B v.2
318
prefix
319
and the 
320
.B OK
321
message.
322
.PP
323
The
324
.I p9any
325
protocol is the protocol used by all
326
Plan 9 services.
327
The file server runs it over special
328
authentication files
329
(see
330
.IR fauth (2)
331
and
332
.IR attach (5)).
333
Other services, such as
334
.IR cpu (1)
335
and
336
.IR exportfs (4),
337
run
338
.I p9any
339
over the network and then 
340
use
341
.I Kn
342
to derive an
343
.IR ssl (3)
344
key to encrypt the rest of their communications.
345
.SS "Password Change
346
Users connect directly to the AS
347
to change their passwords.
348
The protocol is:
349
.TP
350
.IR C \(-> A
351
.IR AuthPass ,
352
.IR IDc ,
353
.IR DN ,
354
.IR CHc ,
355
.IR IDc ,
356
.IR IDc
357
.br
358
The client sends a password change ticket request.
359
.TP
360
.IR A \(-> C
361
.IR Kc { AuthTp ,
362
.IR CHc ,
363
.IR IDc ,
364
.IR IDc ,
365
.IR Kn }
366
.br
367
The server responds with a ticket containing the key
368
.I Kn
369
encrypted with the client's key
370
.IR Kc
371
.TP
372
.IR C \(-> A
373
.IR Kn { AuthPass ,
374
.IR old ,
375
.IR new ,
376
.IR changesecret ,
377
.IR secret }
378
.br
379
The client decrypts the ticket using the old password
380
and then sends back an encrypted password request
381
.RB ( Passwordreq
382
structure)
383
containing the old password and the new password.
384
If
385
.I changesecret
386
is set, the AS also changes
387
the user's 
388
.IR secret ,
389
the password used for non-Plan 9 authentications.
390
.TP
391
.IR A \(-> C
392
.I AuthOK
393
or
394
.IR AuthErr ,
395
64-byte error message
396
.br
397
The AS responds with simply
398
.I AuthOK
399
or with
400
.I AuthErr
401
followed by a 64-byte error message.
402
.SS "Authentication Database
403
An
404
.IR ndb (2)
405
database file 
406
.B /lib/ndb/auth
407
exists for the AS.
408
This database maintains ``speaks for'' relationships, i.e.,
409
it lists which users may speak for other users when
410
authtenticating.
411
The attribute types used by the AS are
412
.B hostid
413
and
414
.BR uid .
415
The value in the
416
.B hostid
417
is a client host's ID.
418
The values in the
419
.B uid
420
pairs in the same entry list which users that host ID
421
make speak for.
422
A uid value of
423
.B *
424
means the host ID may speak for all users.
425
A uid value of
426
.BI ! user
427
means the host ID may not speak for
428
.IR user .
429
For example:
430
.PP
431
.EX
432
hostid=bootes
433
	uid=!sys uid=!adm uid=*
434
.EE
435
.PP
436
is interpreted as
437
.B bootes
438
may speak for any user except
439
.B sys
440
and
441
.BR adm .
442
This property is used heavily on CPU servers.
443
.SS "Foreign Protocols
444
The AS accepts ticket request
445
messages of types other than
446
.I AuthTreq
447
to allow users to
448
authenticate using non-Plan 9 protocols.
449
In these situations, the server communicates
450
directly with the AS.
451
Some protocols must begin without knowing the
452
client's name.  They ignore the client name in the
453
ticket request.
454
All the protocols end
455
with the AS sending
456
an
457
.I AuthOK
458
message containing a server ticket and authenticator.
459
.PP
460
.I AuthOK
461
messages
462
always have a fixed but context-dependent size.
463
The occasional variable-length OK message starts with a
464
.I AuthOKvar
465
byte and a five-byte space-padded decimal length of the
466
data that follows.
467
.PP
468
Anywhere an
469
.I AuthOK
470
message is expected, a
471
.I AuthErr
472
message may be substituted.
473
.de Ok
474
.sp -\n(PDu
475
.TP
476
.IR A \(-> S
477
.IR AuthOK ,
478
.IR Ks { \\$1 ,
479
.IR IDs ,
480
.IR DN ,
481
.IR CHs ,
482
.IR IDs ,
483
.IR IDc ,
484
.IR Kn },
485
.IR Kn { AuthTs ,
486
.IR CHs }
487
..
488
.PP
489
.TP
490
.IR S \(-> A
491
.IR AuthChal ,
492
.IR IDs ,
493
.IR DN ,
494
.IR CHs ,
495
.IR IDs ,
496
.IR IDc
497
.sp -\n(PDu
498
.TP
499
.IR A \(-> S
500
.IR AuthOK ,
501
.IR challenge
502
.sp -\n(PDu
503
.TP
504
.IR S \(-> A
505
.IR response
506
.Ok AuthChal
507
.IP
508
This protocol allows the use of 
509
handheld authenticators such as SecureNet
510
keys and SecureID tokens
511
in programs such as
512
.IR ssh (1)
513
and
514
.I ftpd
515
(see
516
.IR ipserv (8)).
517
.IP
518
.I Challenge
519
and
520
.I response 
521
are text strings,
522
.SM NUL -padded
523
to 16 bytes
524
.RB ( NETCHLEN ).
525
The
526
.I challenge
527
is a random five-digit decimal number.
528
When using a SecureNet key or
529
.I netkey
530
(see
531
.IR passwd (1)),
532
the 
533
.I response
534
is an eight-digit decimal or hexadecimal number
535
that is an encryption of the challenge
536
using the user's DES key.
537
.IP
538
When using a SecureID token,
539
the challenge is ignored.
540
The response is the user's PIN followed by
541
the six-digit number currently displayed
542
on the token.
543
In this case, the AS
544
queries an external RADIUS server
545
to check the response.
546
Use of a RADIUS server requires an entry in
547
the authentication database.  For example:
548
.IP
549
.EX
550
    radius=server-name secret=xyzzy
551
        uid=howard rid=trickey
552
        uid=sape   rid=smullender
553
.EE
554
.IP
555
In this example, the secret
556
.B xyzzy
557
is the hash key used in talking to the RADIUS server.
558
The
559
.BR uid / rid
560
lines map from Plan 9 user ids to RADIUS ids.
561
Users not listed are assumed to have the
562
same id in both places.
563
.TP
564
.IR S \(-> A
565
AuthApop ,
566
.IR IDs ,
567
.IR DN ,
568
.IR CHs ,
569
.IR \- ,
570
.IR \-
571
.sp -\n(PDu
572
.TP
573
.IR A \(-> S
574
.IR AuthOKvar ,
575
.IR challenge
576
.sp -\n(PDu
577
.TP
578
.IR S \(-> A 
579
AuthApop ,
580
.IR IDs ,
581
.IR DN ,
582
.IR CHs ,
583
.IR IDc ,
584
.IR IDc ;
585
hexadecimal MD5 checksum
586
.Ok AuthApop
587
.IP
588
This protocol implements APOP authentication
589
(see
590
.IR pop3 (8)).
591
After receiving a ticket request of type
592
.IR AuthApop ,
593
the AS generates a random challenge
594
of the form
595
.BI < random @ domain >\fR.
596
The client then replies with a new ticket request
597
giving the user name
598
followed by the MD5 checksum of
599
the challenge concatenated with the user's secret.
600
If the response is correct, the authentication
601
server sends back a ticket
602
and authenticator.
603
If the response is incorrect, the client may repeat the
604
ticket request/MD5 checksum message to try again.
605
.IP
606
The 
607
.I AuthCram
608
protocol runs identically to the
609
.I AuthApop
610
protocol, except that the expected MD5 checksum
611
is the keyed MD5 hash using the user's secret as the key
612
(see
613
.I hmac_md5
614
in
615
.IR sechash (2)).
616
.TP
617
.IR S \(-> A
618
.IR AuthChap ,
619
.IR IDs ,
620
.IR DN ,
621
.IR CHs ,
622
.IR \- ,
623
.IR \-
624
.sp -\n(PDu
625
.TP
626
.IR A \(-> S
627
.I challenge
628
.sp -\n(PDu
629
.TP
630
.IR S \(-> A
631
.IR pktid ,
632
.IR IDc ,
633
.IR response
634
.Ok AuthChap
635
.IP
636
This protocol implements CHAP authentication
637
(see
638
.IR ppp (8)).
639
The
640
.I challenge
641
is eight random bytes.
642
The response is a 16-byte MD5 checksum
643
over the packet id, user's secret, and challenge.
644
The reply packet is defined as 
645
.B OChapreply
646
in
647
.BR <authsrv.h> .
648
.TP
649
.IR S \(-> A
650
.IR AuthMSchap ,
651
.IR IDs ,
652
.IR DN ,
653
.IR CHs ,
654
.IR \- ,
655
.IR \-
656
.sp -\n(PDu
657
.TP
658
.IR A \(-> S
659
.I challenge
660
.sp -\n(PDu
661
.TP
662
.IR S \(-> A
663
.IR IDc ,
664
.IR lm-response ,
665
.IR nt-response
666
.Ok AuthMschap
667
.IP
668
This protocol implements Microsoft's MS-CHAP
669
authentication
670
(see
671
.IR ppp (8)).
672
The
673
.I challenge
674
is eight random bytes.
675
The two responses are Microsofts LM and NT hashes.
676
Only the NT hash may be used to authenticate,
677
as the LM hash is considered too weak.
678
The reply packet is defined as
679
.B OMSchapreply
680
in
681
.BR <authsrv.h> .
682
.TP
683
.IR S \(-> A
684
.IR AuthVNC ,
685
.IR IDs ,
686
.IR DN ,
687
.IR CHs ,
688
.IR IDs ,
689
.IR IDc
690
.sp -\n(PDu
691
.TP
692
.IR A \(-> S
693
.IR AuthOKvar ,
694
.I challenge
695
.sp -\n(PDu
696
.TP
697
.IR S \(-> A
698
.I response
699
.Ok
700
.IP
701
This protocol implements VNC authentication
702
(see
703
.I vncs
704
in
705
.IR vnc (1)).
706
The challenge is 16 random bytes, and the response
707
is a DES ECB encryption of the challenge.
708
The method by which VNC converts the user's
709
secret into a DES key is weak, 
710
considering only the first eight bytes of the secret.
711
.PD
712
.SH FILES
713
.TF /lib/ndb/auth.*xxx
714
.TP
715
.B /lib/ndb/auth
716
database file
717
.TP
718
.B /lib/ndb/auth.*
719
hash files for
720
.B /lib/ndb/auth
721
.SH SEE ALSO
722
.IR auth (2),
723
.IR fauth (2),
724
.IR cons (3),
725
.IR attach (5),
726
.IR auth (8)