|
|
1.1 root 1: .\" $Source: /usr/src/kerberosIV/man/RCS/kerberos.3,v $
2: .\" $Author: kfall $
3: .\" $Header: /usr/src/kerberosIV/man/RCS/kerberos.3,v 4.10 90/06/25 21:12:11 kfall Exp $
4: .\" Copyright 1989 by the Massachusetts Institute of Technology.
5: .\"
6: .\" For copying and distribution information,
7: .\" please see the file <mit-copyright.h>.
8: .\"
9: .TH KERBEROS 3 "Kerberos Version 4.0" "MIT Project Athena"
10: .SH NAME
11: krb_mk_req, krb_rd_req, krb_kntoln, krb_set_key, krb_get_cred,
12: krb_mk_priv, krb_rd_priv, krb_mk_safe, krb_rd_safe, krb_mk_err,
13: krb_rd_err, krb_ck_repl \- Kerberos authentication library
14: .SH SYNOPSIS
15: .nf
16: .nj
17: .ft B
18: #include <kerberosIV/des.h>
19: #include <kerberosIV/krb.h>
20: .PP
21: .ft B
22: extern char *krb_err_txt[];
23: .PP
24: .ft B
25: int krb_mk_req(authent,service,instance,realm,checksum)
26: KTEXT authent;
27: char *service;
28: char *instance;
29: char *realm;
30: u_long checksum;
31: .PP
32: .ft B
33: int krb_rd_req(authent,service,instance,from_addr,ad,fn)
34: KTEXT authent;
35: char *service;
36: char *instance;
37: u_long from_addr;
38: AUTH_DAT *ad;
39: char *fn;
40: .PP
41: .ft B
42: int krb_kntoln(ad,lname)
43: AUTH_DAT *ad;
44: char *lname;
45: .PP
46: .ft B
47: int krb_set_key(key,cvt)
48: char *key;
49: int cvt;
50: .PP
51: .ft B
52: int krb_get_cred(service,instance,realm,c)
53: char *service;
54: char *instance;
55: char *realm;
56: CREDENTIALS *c;
57: .PP
58: .ft B
59: long krb_mk_priv(in,out,in_length,schedule,key,sender,receiver)
60: u_char *in;
61: u_char *out;
62: u_long in_length;
63: des_cblock key;
64: des_key_schedule schedule;
65: struct sockaddr_in *sender;
66: struct sockaddr_in *receiver;
67: .PP
68: .ft B
69: long krb_rd_priv(in,in_length,schedule,key,sender,receiver,msg_data)
70: u_char *in;
71: u_long in_length;
72: Key_schedule schedule;
73: des_cblock key;
74: struct sockaddr_in *sender;
75: struct sockaddr_in *receiver;
76: MSG_DAT *msg_data;
77: .PP
78: .ft B
79: long krb_mk_safe(in,out,in_length,key,sender,receiver)
80: u_char *in;
81: u_char *out;
82: u_long in_length;
83: des_cblock key;
84: struct sockaddr_in *sender;
85: struct sockaddr_in *receiver;
86: .PP
87: .ft B
88: long krb_rd_safe(in,length,key,sender,receiver,msg_data)
89: u_char *in;
90: u_long length;
91: des_cblock key;
92: struct sockaddr_in *sender;
93: struct sockaddr_in *receiver;
94: MSG_DAT *msg_data;
95: .PP
96: .ft B
97: long krb_mk_err(out,code,string)
98: u_char *out;
99: long code;
100: char *string;
101: .PP
102: .ft B
103: long krb_rd_err(in,length,code,msg_data)
104: u_char *in;
105: u_long length;
106: long code;
107: MSG_DAT *msg_data;
108: .fi
109: .ft R
110: .SH DESCRIPTION
111: This library supports network authentication and various related
112: operations. The library contains many routines beyond those described
113: in this man page, but they are not intended to be used directly.
114: Instead, they are called by the routines that are described, the
115: authentication server and the login program.
116: .PP
117: .I krb_err_txt[]
118: contains text string descriptions of various Kerberos error codes returned
119: by some of the routines below.
120: .PP
121: .I krb_mk_req
122: takes a pointer to a text structure in which an authenticator is to be
123: built. It also takes the name, instance, and realm of the service to be
124: used and an optional checksum. It is up to the application to decide
125: how to generate the checksum.
126: .I krb_mk_req
127: then retrieves a ticket for the desired service and creates an
128: authenticator. The authenticator is built in
129: .I authent
130: and is accessible
131: to the calling procedure.
132: .PP
133: It is up to the application to get the authenticator to the service
134: where it will be read by
135: .I krb_rd_req.
136: Unless an attacker posesses the session key contained in the ticket, it
137: will be unable to modify the authenticator. Thus, the checksum can be
138: used to verify the authenticity of the other data that will pass through
139: a connection.
140: .PP
141: .I krb_rd_req
142: takes an authenticator of type
143: .B KTEXT,
144: a service name, an instance, the address of the
145: host originating the request, and a pointer to a structure of type
146: .B AUTH_DAT
147: which is filled in with information obtained from the authenticator.
148: It also optionally takes the name of the file in which it will find the
149: secret key(s) for the service.
150: If the supplied
151: .I instance
152: contains "*", then the first service key with the same service name
153: found in the service key file will be used, and the
154: .I instance
155: argument will be filled in with the chosen instance. This means that
156: the caller must provide space for such an instance name.
157: .PP
158: It is used to find out information about the principal when a request
159: has been made to a service. It is up to the application protocol to get
160: the authenticator from the client to the service. The authenticator is
161: then passed to
162: .I krb_rd_req
163: to extract the desired information.
164: .PP
165: .I krb_rd_req
166: returns zero (RD_AP_OK) upon successful authentication. If a packet was
167: forged, modified, or replayed, authentication will fail. If the
168: authentication fails, a non-zero value is returned indicating the
169: particular problem encountered. See
170: .I krb.h
171: for the list of error codes.
172: .PP
173: If the last argument is the null string (""), krb_rd_req will use the
174: file /etc/srvtab to find its keys. If the last argument is NULL, it
175: will assume that the key has been set by
176: .I krb_set_key
177: and will not bother looking further.
178: .PP
179: .I krb_kntoln
180: converts a Kerberos name to a local name. It takes a structure
181: of type AUTH_DAT and uses the name and instance to look in the database
182: /etc/aname to find the corresponding local name. The local name is
183: returned and can be used by an application to change uids, directories,
184: or other parameters. It is not an integral part of Kerberos, but is
185: instead provided to support the use of Kerberos in existing utilities.
186: .PP
187: .I krb_set_key
188: takes as an argument a des key. It then creates
189: a key schedule from it and saves the original key to be used as an
190: initialization vector.
191: It is used to set the server's key which
192: must be used to decrypt tickets.
193: .PP
194: If called with a non-zero second argument,
195: .I krb_set_key
196: will first convert the input from a string of arbitrary length to a DES
197: key by encrypting it with a one-way function.
198: .PP
199: In most cases it should not be necessary to call
200: .I krb_set_key.
201: The necessary keys will usually be obtained and set inside
202: .I krb_rd_req. krb_set_key
203: is provided for those applications that do not wish to place the
204: application keys on disk.
205: .PP
206: .I krb_get_cred
207: searches the caller's ticket file for a ticket for the given service, instance,
208: and realm; and, if a ticket is found, fills in the given CREDENTIALS structure
209: with the ticket information.
210: .PP
211: If the ticket was found,
212: .I krb_get_cred
213: returns GC_OK.
214: If the ticket file can't be found, can't be read, doesn't belong to
215: the user (other than root), isn't a regular file, or is in the wrong
216: mode, the error GC_TKFIL is returned.
217: .PP
218: .I krb_mk_priv
219: creates an encrypted, authenticated
220: message from any arbitrary application data, pointed to by
221: .I in
222: and
223: .I in_length
224: bytes long.
225: The private session key, pointed to by
226: .I key
227: and the key schedule,
228: .I schedule,
229: are used to encrypt the data and some header information using
230: .I pcbc_encrypt.
231: .I sender
232: and
233: .I receiver
234: point to the Internet address of the two parties.
235: In addition to providing privacy, this protocol message protects
236: against modifications, insertions or replays. The encapsulated message and
237: header are placed in the area pointed to by
238: .I out
239: and the routine returns the length of the output, or -1 indicating
240: an error.
241: .PP
242: .I krb_rd_priv
243: decrypts and authenticates a received
244: .I krb_mk_priv
245: message.
246: .I in
247: points to the beginning of the received message, whose length
248: is specified in
249: .I in_length.
250: The private session key, pointed to by
251: .I key,
252: and the key schedule,
253: .I schedule,
254: are used to decrypt and verify the received message.
255: .I msg_data
256: is a pointer to a
257: .I MSG_DAT
258: struct, defined in
259: .I krb.h.
260: The routine fills in the
261: .I app_data
262: field with a pointer to the decrypted application data,
263: .I app_length
264: with the length of the
265: .I app_data
266: field,
267: .I time_sec
268: and
269: .I time_5ms
270: with the timestamps in the message, and
271: .I swap
272: with a 1 if the byte order of the receiver is different than that of
273: the sender. (The application must still determine if it is appropriate
274: to byte-swap application data; the Kerberos protocol fields are already taken
275: care of). The
276: .I hash
277: field returns a value useful as input to the
278: .I krb_ck_repl
279: routine.
280:
281: The routine returns zero if ok, or a Kerberos error code. Modified messages
282: and old messages cause errors, but it is up to the caller to
283: check the time sequence of messages, and to check against recently replayed
284: messages using
285: .I krb_ck_repl
286: if so desired.
287: .PP
288: .I krb_mk_safe
289: creates an authenticated, but unencrypted message from any arbitrary
290: application data,
291: pointed to by
292: .I in
293: and
294: .I in_length
295: bytes long.
296: The private session key, pointed to by
297: .I key,
298: is used to seed the
299: .I quad_cksum()
300: checksum algorithm used as part of the authentication.
301: .I sender
302: and
303: .I receiver
304: point to the Internet address of the two parties.
305: This message does not provide privacy, but does protect (via detection)
306: against modifications, insertions or replays. The encapsulated message and
307: header are placed in the area pointed to by
308: .I out
309: and the routine returns the length of the output, or -1 indicating
310: an error.
311: The authentication provided by this routine is not as strong as that
312: provided by
313: .I krb_mk_priv
314: or by computing the checksum using
315: .I cbc_cksum
316: instead, both of which authenticate via DES.
317: .PP
318:
319: .I krb_rd_safe
320: authenticates a received
321: .I krb_mk_safe
322: message.
323: .I in
324: points to the beginning of the received message, whose length
325: is specified in
326: .I in_length.
327: The private session key, pointed to by
328: .I key,
329: is used to seed the quad_cksum() routine as part of the authentication.
330: .I msg_data
331: is a pointer to a
332: .I MSG_DAT
333: struct, defined in
334: .I krb.h .
335: The routine fills in these
336: .I MSG_DAT
337: fields:
338: the
339: .I app_data
340: field with a pointer to the application data,
341: .I app_length
342: with the length of the
343: .I app_data
344: field,
345: .I time_sec
346: and
347: .I time_5ms
348: with the timestamps in the message, and
349: .I swap
350: with a 1 if the byte order of the receiver is different than that of
351: the sender.
352: (The application must still determine if it is appropriate
353: to byte-swap application data; the Kerberos protocol fields are already taken
354: care of). The
355: .I hash
356: field returns a value useful as input to the
357: .I krb_ck_repl
358: routine.
359:
360: The routine returns zero if ok, or a Kerberos error code. Modified messages
361: and old messages cause errors, but it is up to the caller to
362: check the time sequence of messages, and to check against recently replayed
363: messages using
364: .I krb_ck_repl
365: if so desired.
366: .PP
367: .I krb_mk_err
368: constructs an application level error message that may be used along
369: with
370: .I krb_mk_priv
371: or
372: .I krb_mk_safe.
373: .I out
374: is a pointer to the output buffer,
375: .I code
376: is an application specific error code, and
377: .I string
378: is an application specific error string.
379:
380: .PP
381: .I krb_rd_err
382: unpacks a received
383: .I krb_mk_err
384: message.
385: .I in
386: points to the beginning of the received message, whose length
387: is specified in
388: .I in_length.
389: .I code
390: is a pointer to a value to be filled in with the error
391: value provided by the application.
392: .I msg_data
393: is a pointer to a
394: .I MSG_DAT
395: struct, defined in
396: .I krb.h .
397: The routine fills in these
398: .I MSG_DAT
399: fields: the
400: .I app_data
401: field with a pointer to the application error text,
402: .I app_length
403: with the length of the
404: .I app_data
405: field, and
406: .I swap
407: with a 1 if the byte order of the receiver is different than that of
408: the sender. (The application must still determine if it is appropriate
409: to byte-swap application data; the Kerberos protocol fields are already taken
410: care of).
411:
412: The routine returns zero if the error message has been successfully received,
413: or a Kerberos error code.
414: .PP
415: The
416: .I KTEXT
417: structure is used to pass around text of varying lengths. It consists
418: of a buffer for the data, and a length. krb_rd_req takes an argument of this
419: type containing the authenticator, and krb_mk_req returns the
420: authenticator in a structure of this type. KTEXT itself is really a
421: pointer to the structure. The actual structure is of type KTEXT_ST.
422: .PP
423: The
424: .I AUTH_DAT
425: structure is filled in by krb_rd_req. It must be allocated before
426: calling krb_rd_req, and a pointer to it is passed. The structure is
427: filled in with data obtained from Kerberos.
428: .I MSG_DAT
429: structure is filled in by either krb_rd_priv, krb_rd_safe, or
430: krb_rd_err. It must be allocated before the call and a pointer to it
431: is passed. The structure is
432: filled in with data obtained from Kerberos.
433: .PP
434: .SH FILES
435: /usr/include/kerberosIV/krb.h
436: .br
437: /usr/lib/libkrb.a
438: .br
439: /usr/include/kerberosIV/des.h
440: .br
441: /usr/lib/libdes.a
442: .br
443: /etc/kerberosIV/aname
444: .br
445: /etc/kerberosIV/srvtab
446: .br
447: /tmp/tkt[uid]
448: .SH "SEE ALSO"
449: kerberos(1), des_crypt(3)
450: .SH DIAGNOSTICS
451: .SH BUGS
452: The caller of
453: .I krb_rd_req, krb_rd_priv, and krb_rd_safe
454: must check time order and for replay attempts.
455: .I krb_ck_repl
456: is not implemented yet.
457: .SH AUTHORS
458: Clifford Neuman, MIT Project Athena
459: .br
460: Steve Miller, MIT Project Athena/Digital Equipment Corporation
461: .SH RESTRICTIONS
462: COPYRIGHT 1985,1986,1989 Massachusetts Institute of Technology
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.