Updated gnulib and added hash-pjw-bare
[gnutls.git] / doc / protocol / draft-benaloh-pct-01.txt
blobf9e61ba096e128853e2133ca4baeb40d1d64b164
2 Internet Draft                              Daniel Simon
3                                                     Microsoft Corp.
4                                                     April 1996
6             The Private Communication Technology Protocol
7                      <draft-benaloh-pct-01.txt>
9 1. Status of this Memo
11 This document is an Internet-Draft.  Internet-Drafts are working
12 documents of the Internet Engineering Task Force (IETF), its areas,
13 and its working groups. Note that other groups may also distribute
14 working documents as Internet-Drafts.
16 Internet-Drafts are draft documents valid for a maximum of six months
17 and may be updated, replaced, or obsoleted by other documents at any
18 time. It is inappropriate to use Internet-Drafts as reference
19 material or to cite them other than as "work in progress".
21 To learn the current status of any Internet-Draft, please check the
22 "1id-abstracts.txt" listing contained in the Internet-Drafts Shadow
23 Directories on ds.internic.net (US East Coast), nic.nordu.net
24 (Europe), ftp.isi.edu (US West Coast), or munnari.oz.au (Pacific Rim).
26 This Internet-Draft expires 10 October 1996.
29 2. Abstract
31 This document specifies Version 2 of the Private Communication
32 Technology (PCT) protocol, a security protocol that provides privacy
33 over the Internet.  The protocol is intended to prevent eavesdropping 
34 on connection-based communications in client/server applications, 
35 with at least one of the two always being authenticated, and each 
36 having the option of requiring authentication of the other.  PCT is 
37 somewhat similar to SSL ([1]); however, PCT version 1 corrects
38 or improves on several weaknesses of SSL, and version 2 also adds a 
39 number of new features.  PCT version 2 is fully compatible with PCT 
40 version 1.
43 3. Introduction
45 The Private Communication Technology (PCT) Protocol is designed to
46 provide privacy between two communicating applications (a client and a
47 server), and to authenticate at least one of the two (typically the
48 server) to the other.  The PCT Protocol is application 
49 protocol-independent.  A "higher level" application protocol (e.g. 
50 HTTP, FTP, TELNET, etc.) can layer on top of the PCT Protocol 
51 transparently.
53 In the PCT protocol, all data is transmitted in the form of 
54 variable-length records, each of which has a record header.  These
55 records are used to transmit both PCT protocol messages (including
56 handshake, error, and key management messages) and application data
57 messages.  Exchanges of records between a client and server are 
58 grouped into "connections", which are in turn grouped into "sessions".  
59 Every PCT connection belongs to some particular session.
61 Every PCT protocol connection begins with a handshake phase, during 
62 which a sequence of handshake messages (comprising the PCT Handshake 
63 Protocol) are exchanged, which negotiate a (symmetric) session key 
64 for the connection, as well as performing the requested 
65 authentications based on certified asymmetric public (signature or 
66 key exchange) keys (or on previously shared private "password" keys).  
67 Once transmission of application protocol data messages begins in a 
68 connection, all data (including error and key management messages) is 
69 encrypted using encryption keys derived from a "master key" exchanged 
70 during some handshake phase of the connection's session, as well as 
71 from the handshake messages that began the connection.  In addition 
72 to encryption and authentication, the PCT protocol verifies the 
73 integrity of messages using a hash function-based message 
74 authentication code (MAC).
76 PCT assumes a reliable transport protocol (e.g. TCP) for PCT record 
77 transmission and reception during the handshake phase (and 
78 afterwards as well in version 1); however, use of datagram records 
79 in version 2 makes it possible for individual records to be sent 
80 independently (as "datagrams"), with neither order nor eventual 
81 delivery guaranteed.  
83 It should be noted that the PCT protocol does not specify any details
84 about verification of identities or certificates with respect to 
85 account administrators, certification authorities, revocation lists, 
86 and so on.  Rather, it is assumed that protocol implementations have 
87 access to a "black box" which is capable of ruling on the validity of 
88 received identities and certificates in a manner satisfactory to the 
89 implementation's user.  Such a ruling may, for instance, involve 
90 remote consultation with a trusted service, or even with the actual 
91 user through a text or graphic interface.
93 The PCT protocol's compatibility with, and differences from, SSL 
94 ([1]) are outlined in the specification of PCT version 1 ([2]).  
95 PCT version 2 is fully compatible with PCT version 1, in that an 
96 implementation of version 1 is a valid (though less feature-rich) 
97 implementation of version 2.  If either the client or server (or 
98 both) identifies itself during the handshake phase as using PCT 
99 version 1, then the session conforms to the PCT version 1 
100 specification, and features introduced in version 2 are not available.
101 PCT version 1 compatibility details are given in section 8.
103 PCT version 2 is different from PCT version 1 in the following 
104 respects:
106 - PCT version 2 has a revised record format which allows handshake 
107   records, error records and data records, as well as "key management" 
108   and "datagram" records (two new record types) to be explicitly 
109   recognized and distinguished from each other based on header 
110   information.  Record headers can also indicate continuations of 
111   previous records, allowing protocol messages of any type to span 
112   multiple records, just as user data already does in PCT version 1.  
113   Finally, encapsulating user data in a new "data message" format 
114   allows the invocation (using assigned data message types) of 
115   intermediate processing, such as compression/decompression,
117 - PCT version 2 "datagram" records are independently decryptable, 
118   allowing encrypted data to be sent securely across unreliable 
119   transports, where neither delivery nor correct order are 
120   guaranteed.
122 - PCT version 2 "key management" records allow encryption and/or
123   message authentication keys to be temporarily changed within a 
124   session, to support the transport of pre-encrypted data.
126 - PCT version 2 adds a "closing connection" key management message to 
127   ensure that connections aren't prematurely closed by someone 
128   unauthorized to do so.
130 - PCT version 2 message authentication is altered to include record
131   headers.
133 - The handshake phase of PCT version 2 allows a wider, more symmetrical
134   variety of authentication options:  either client or server or both 
135   may be authenticated, each by means of either a key exchange or 
136   signature public key and certificate.  
138 - PCT version 2 allows a new "private" authentication type, in which 
139   authentication is based on a previously shared identity-associated
140   private key, rather than a certified public key.
143 4. PCT Record Protocol Specification
145 4.1 Notation
147 The following notation is used in this specification to represent
148 data field formats in various protocol messages:
150 char MSG_EXAMPLE
151 char FIELD1
152 char FIELD2
153 char THING_LENGTH[2]
154 char ANOTHER_THING_LENGTH[4]
155 char THING_DATA[([0] << 8)|[1]]
156 char ANOTHER_THING_DATA[([0]<<24)|([1]<<16)|([2]<<8)|[3]]
159 The order is presented top to bottom, with the topmost field being 
160 transmitted first.  The "FIELD1" and "FIELD2" fields are each one 
161 byte long; the "THING_LENGTH" and "ANOTHER_THING_LENGTH" fields have 
162 lengths of two and four bytes, respectively, as indicated by the 
163 numbers in square brackets following the field labels.  Their bytes 
164 are indexed by their offset from the beginning of the field, starting 
165 with THING_LENGTH[0] and ANOTHER_THING_LENGTH[0], which are the
166 first bytes transmitted in their respective fields.
168 In the "THING_DATA" and "ANOTHER_THING_DATA" entries, the values in
169 square brackets indicate byte offset indices in THING_LENGTH and
170 ANOTHER_THING_LENGTH, respectively.  As presented above, the notation 
171 refers to combining the bytes of the LENGTH field in order to form an 
172 unsigned integer, with the bytes arranged in decreasing order of 
173 significance.  This integer defines the number of bytes of data in 
174 the corresponding DATA field.  For example, if THING_LENGTH[0] were 
175 one and THING_LENGTH[1] were four then the THING_DATA array would be 
176 exactly 260 bytes long.  And if the values of the four bytes of 
177 ANOTHER_THING_LENGTH were zero, one, two and four, respectively, then 
178 ANOTHER_THING_DATA would be exactly 66,052 bytes long.  This 
179 shorthand form is used throughout the specification; occasionally, a 
180 "THING_DATA" field is referred to as "THING", with the word "DATA" 
181 omitted.
183 Individual bits within a data field are denoted as follows:
185 LEAST_SIGNIFICANT_BIT       := 0x0001
186 NEXT_LEAST_SIG_BIT          := 0x0002
187 THIRD_LEAST_SIG_BIT         := 0x0004
190 These bit identifiers correspond to the least, second-least and 
191 third-least significant bits (in that order) in a two-byte data 
192 field.  The associated hexadecimal values consist of all zero bits
193 except for the identified bit.
195 Computations involving a hash function (sometimes iterated) are 
196 denoted as follows:
198 COMPUTATION_RESULT_i = Hash( "ASCII string hash input 1"^i, 
199 HASH_INPUT_2, HASH_INPUT_3^i, Hash( "ASCII string hash input 4",
200 HASH_INPUT_5, i ) )
202 The values in quotation marks are treated as (sequences of) ASCII
203 characters; "x"^i (or VARIABLE^i) denotes i copies of the string 
204 "x" (or variable VARIABLE, respectively) concatenated together.  The 
205 parameters are input into the hash function in the order presented; 
206 the variable i, wherever it appears as an input value, is input as a 
207 single-byte unsigned integer.  If any input has a length which is not
208 an integral number of bytes, then (fewer than eight) zero bits are
209 appended to its last byte to produce an input which is an integral 
210 number of bytes.  The value of COMPUTATION_RESULT is obtained by 
211 concatenating the COMPUTATION_RESULT_i values in order, for values of 
212 i in a specified range.  (If no subscript i is present in the 
213 specified formula, then the implied range includes only the value 1.)  
214 If the resulting value requires truncation, then the truncation is 
215 performed by removing bits from the end to obtain a string of the 
216 required length.
218 In the case of elements of specifically named records or messages, 
219 the names of record or message elements have prefixes that identify 
220 the messages in which they appear.  These prefixes are sometimes 
221 omitted in the text when the containing messages are obvious, or 
222 when the same elements have more than one possible prefix.
225 4.2 PCT Record Format
227 4.2.1 Record header format
229 A PCT record consists of a four-byte header followed by a 
230 variable-length body.  The maximum length of the body is 32763 
231 bytes. 
233 The PCT record header formats differ in versions 1 and 2.  The 
234 version 2 record header will be described in this section; its 
235 compatibility with the version 1 header (which is described fully 
236 in [2]) is explained in section 8.
238 The PCT version 2 record header has the following structure:
240 char RH_RECORD_LENGTH[2]
241 char RH_RECORD_TYPE[2]
243 RECORD_LENGTH is an unsigned integer representing the length of the
244 (cleartext) data following the length field in the record header
245 (including the RH_RECORD_TYPE field and the subsequent record body).
246 The first (most significant) bit of the first (most significant) 
247 byte of this field is set to one, for backward compatibility reasons
248 (see section 9); this bit must be reset to zero to obtain the
249 correct unsigned integer value.  Note that if encryption expands the 
250 length of the data, the length of the (fully or partially encrypted) 
251 record body plus RH_RECORD_TYPE field will not match the value in 
252 RECORD_LENGTH; the effect of each cipher on data length is described 
253 in section 6.1.5.
255 RECORD_TYPE is a two-byte field indicating the type of contents in the 
256 record, and in particular, how the record should be processed.  PCT 
257 version 2 defines a number of record type values for specific record 
258 types; other record types are used to identify PCT version 1 (or 
259 SSL version 2 or 3) connections, for appropriate processing.  These 
260 are RT_VERSION_1_CH, RT_VERSION_1_SH, RT_SSL_VERSION_2_CH, 
261 RT_SSL_VERSION_2_SH and RT_SSL_VERSION_3, respectively.  (Note that 
262 type RT_SSL_VERSION_3 is defined only on the first, or most 
263 significant, byte; the second, or least significant byte can have 
264 any value.)  The normal PCT version 2 record types are RT_HANDSHAKE, 
265 RT_DATAGRAM, RT_KEY_MGMT, RT_ERROR, and RT_USER_DATA; their 
266 associated record data formats are described in section 4.3.  All
267 other defined record types are reserved, and must never be used.
268 One of them, RT_CD_RESERVED, is also explicitly defined to preclude 
269 use in future versions.
272 4.3 PCT Record Body Formats
274 4.3.1 Handshake Record Body Format
276 PCT version 2 Handshake records (those with RECORD_TYPE 
277 RT_HANDSHAKE) have a very simple body format:
279 char HS_MSG_TYPE[2]
280 char HS_RECORD_FLAGS[2]
281 char HS_HANDSHAKE_DATA[RH_RECORD_LENGTH - 6]
283 The possible HS_MSG_TYPE values are HS_CLIENT_HELLO,
284 HS_SERVER_HELLO, HS_CLIENT_MASTER_KEY, HS_SERVER_VERIFY, and
285 HS_CLIENT_VERIFY.  HS_RECORD_FLAGS is a two-byte field containing 
286 informational flags about the handshake record.  The only two flags 
287 defined in PCT version 2 are the last (least significant) two bits 
288 of HS_RECORD_FLAGS:
290 HS_FLAG_TO_BE_CONTD         :=  0x0001
291 HS_FLAG_CONTINUATION        :=  0x0002
293 The last (least significant) bit, HS_FLAG_TO_BE_CONTD, indicates 
294 when set that the next record received of the same type is to be 
295 considered a continuation of the current one.  The 
296 second-least-significant bit, HS_FLAG_CONTINUATION, indicates when 
297 set that the record is to be considered a continuation of the 
298 previous record received of the same type.  (For PCT version 1 
299 compatibility reasons, a CLIENT_HELLO message must not be continued 
300 over more than one handshake record.)  The remaining flag bits are 
301 reserved, and must be set to zero.  
303 The HS_HANDSHAKE_DATA field contains data from a PCT handshake 
304 message; the structure of these messages is described in section 
305 5.2.  Note that a single handshake message may stretch across more 
306 than one handshake record; in that case the appropriate flags are set 
307 in the record header.  (A restriction on how a handshake message is
308 fragmented among records is given in section 5.2.)
310 4.3.2 Datagram Records
312 A datagram record is an independently decryptable data record; its
313 enclosed data message can be decrypted, and its MAC checked, 
314 regardless of whether previous records were delivered in order (or 
315 at all).  Datagrams can hence be used if the underlying transport
316 does not guarantee in-order delivery of records; for example, it 
317 makes possible the transmission of "out-of-band" data for rapid 
318 delivery in a TCP connection.
320 The format of PCT version 2 datagram records is as follows: 
322 char DG_ENCRYPTED_KEY_LENGTH[2]
323 char DG_ENCRYPTED_KEY_DATA[([0] << 8)|[1]]
324 char DG_ENCRYPTED_DATA[ENCRYPTED_LENGTH]
325 char DG_MAC_DATA[MAC_LENGTH]
327 The DG_ENCRYPTED_KEY_DATA field contains the key information necessary
328 to perform decryption and MAC verification of the datagram record; its
329 contents are described in section 6.1.3.  The DG_ENCRYPTED_DATA field 
330 contains an encryption of ACTUAL_DATA (consisting of the ACTUAL_LENGTH
331 bytes of the datagram's enclosed data message).  The DG_MAC_DATA field 
332 contains the "Message Authentication Code" (MAC); its contents are 
333 described in section 7.3.  Note that ACTUAL_LENGTH can be calculated 
334 directly as RECORD_LENGTH - ENCRYPTED_KEY_LENGTH - MAC_LENGTH - 4.  The 
335 length of the encrypted datagram record body plus RH_RECORD_TYPE field
336 may be greater than RECORD_LENGTH, as a result of expansion during 
337 encryption; see section 6.1.5.
340 4.3.3  Other Record Types
342 The bodies of PCT version 2 key management, error and user data 
343 records (those with RECORD_TYPE RT_KEY_MGMT, RT_ERROR and 
344 RT_USER_DATA, respectively) contain encrypted data, in the following 
345 data format:
347 char DT_ENCRYPTED_DATA[ENCRYPTED_LENGTH]
348 char DT_MAC_DATA[MAC_LENGTH]
350 The ENCRYPTED_DATA field contains an encryption of ACTUAL_DATA 
351 (consisting of the ACTUAL_LENGTH bytes of the enclosed data message). 
352 The MAC_DATA field contains the "Message Authentication Code" (MAC);
353 its contents are described in section 7.3.  ACTUAL_LENGTH can be 
354 calculated directly as RECORD_LENGTH - MAC_LENGTH - 2.
357 4.4 Key Management Messages
359 Key management messages have the following format:
361 char KM_KEY_MGMT_TYPE[2]
362 char KM_NEW_HASH_TYPE[2]
363 char KM_NEW_CIPHER_TYPE[4]
364 char KM_WRITE_KEY_LENGTH[2]
365 char KM_WRITE_KEY_DATA[([0] << 8)|[1]]
367 There are four possible values of KM_KEY_MGMT_TYPE:
368 KM_TYPE_FIXED_KEY (setting up the transmission of pre-encrypted data), 
369 KM_TYPE_RESUME_KEY (used to end transmission of pre-encrypted data), 
370 KM_TYPE_REDO_HANDSHAKE (triggering a new run of the handshake 
371 protocol), and KM_TYPE_CLOSE_CONN (preceding the closure of a 
372 connection).
374 4.4.1 Preencrypted data
376 A KM_KEY_MGMT_TYPE value of KM_TYPE_FIXED_KEY indicates that the key 
377 management message contains a fixed encryption key with which 
378 subsequent data records will be encrypted until further notice.  
379 Using this type of key management message, a client or server can 
380 send data that has been pre-encrypted and stored in encrypted form.  
381 Note that pre-encrypted data can be pre-MAC'd as well.  (See section 
382 7.3.)  Note also that a key management message of this type must not 
383 be sent unless both client and server have indicated support for the 
384 pre-encrypted data feature during the handshake phase associated with 
385 this connection; see sections 5.2.1 and 5.2.2.
387 In a message of type KM_TYPE_FIXED_KEY, KM_NEW_CIPHER_TYPE contains a 
388 cipher type code, and KM_NEW_HASH_TYPE contains a hash function type 
389 code (see sections 6.2 and 6.3, respectively).  These types must be
390 supported by the receiver of this message, as indicated in during the 
391 handshake phase for this connection.  (See sections 5.2.1 and 5.2.2.)  
392 The fixed encryption key (WRITE_KEY) is sent in the field 
393 KM_WRITE_KEY_DATA. 
395 Note that the encryption and MAC calculation used for the key 
396 management message itself, and for subsequent non-data records, are 
397 not altered.  However, subsequent data records in the same direction 
398 are encrypted using the WRITE_KEY sent in the KM_WRITE_KEY_DATA 
399 field, until a key management message of type KM_TYPE_FIXED_KEY or 
400 KM_TYPE_RESUME_KEY is sent and received, or until the connection 
401 closes.  (Note that pre-encrypted data is not "nested"; a 
402 KM_TYPE_FIXED_KEY message is treated as a KM_TYPE_RESUME_KEY message 
403 immediately followed by a KM_TYPE_FIXED_KEY message.)  
405 4.4.2 Restoring original key
407 A key management message of type KM_TYPE_RESUME_KEY restores the value 
408 of the encryption key used for data records transmitted in the same 
409 direction to the value originally negotiated during the handshake 
410 phase of the current connection.  This key is used until the 
411 connection closes, or until a key management message of type 
412 KM_TYPE_FIXED_KEY or KM_TYPE_REDO_HANDSHAKE is received.  
414 In this message, the KM_CIPHER_TYPE and KM_HASH_TYPE messages are set 
415 to their original values negotiated during the handshake phase for 
416 the current connection.  (See section 5.2.2.)  The remaining data 
417 fields are empty, and their length is zero.
420 4.4.3 Closing connection
422 If both client and server indicated support for the "closing 
423 connection" feature during the handshake phase of the current 
424 connection (see sections 5.2.1 and 5.2.2), then the connection is 
425 "closure-monitored", and closure of a connection is handled in a 
426 special way.  Whenever a client or server is about to close a 
427 closure-monitored connection without an error, at any point following 
428 the completion of the handshake phase of the protocol, an exchange of 
429 key management messages of type KM_TYPE_CLOSE_CONN is initiated 
430 first.  In both messages, the KM_NEW_CIPHER_TYPE and KM_NEW_HASH_TYPE 
431 fields contain the current cipher and hash types, respectively, and 
432 the remaining data fields are empty, with length zero.  The sender of 
433 one of these messages simply waits for a message of the same type to 
434 be received in reply, then closes the connection; a receiver of such 
435 a message who has not yet sent one replies with a message of the same 
436 type, then closes the connection.  A closure-monitored connection 
437 closed without an error before receipt of a message of this type 
438 results in a CONN_BROKEN error (see section 4.6).
441 4.4.4  Redo handshake
443 If both client and server indicated support for the "redo handshake" 
444 feature during the handshake phase of the current connection (see 
445 sections 5.2.1 and 5.2.2), then the connection is "redo-enabled", and 
446 either the client or the server may request, at any time after the 
447 handshake phase has been completed for a connection, that another 
448 handshake phase be performed for that connection.  For example, 
449 either party may request another handshake phase instead of closing 
450 the connection in order to avoid allowing a sequence number to "wrap" 
451 beyond 0xFFFFFFFF (see section 7.3).  In addition, it is recommended 
452 that implementations enforce limits on the duration of both 
453 connections and sessions, with respect to the total number of bytes 
454 sent, the number of records sent, the actual time elapsed since the 
455 beginning of the connection or session, and, in the case of sessions, 
456 the number of reconnections made.  These limits serve to ensure that 
457 keys are not used more or longer than it is safe to do so; hence the 
458 limits may depend on the type and strength of cipher, key exchange and 
459 authentication used, and may, at the implementer's discretion, include 
460 indications from the application as to the sensitivity of the data 
461 being transmitted or received.  They may be enforced using closure of 
462 the connection or (in a redo-enabled connection) "redo handshake" key 
463 management messages.
465 To request a new handshake phase for the current connection, the 
466 sender (client or server) sends a key management message of type 
467 KM_TYPE_REDO_HANDSHAKE.  The KM_NEW_CIPHER_TYPE and KM_NEW_HASH_TYPE
468 fields contain the current cipher and hash types, respectively, and
469 the remaining data fields are empty, with length zero.
471 There are several cases to consider to ensure that messages are 
472 dealt with in the correct order.  The following rules ensure that the
473 first messages in the redone handshake are always immediately preceded
474 by a "redo handshake" key management message.
476 If the client initiates the "redo handshake", it sends the "redo 
477 handshake" message immediately followed by a normal CLIENT_HELLO 
478 handshake message; the server, on receiving the "redo handshake" 
479 message, may be in one of two states.  If the last message it sent 
480 was a "redo handshake" message, then it simply waits for the 
481 CLIENT_HELLO message; otherwise, it sends a "redo handshake" message 
482 in response, and then waits for the CLIENT_HELLO message. 
484 If the server initiates the "redo handshake", then the server sends 
485 the "redo handshake" message and simply waits for a "Redo Handshake" 
486 message in response; this "redo handshake" message should be 
487 immediately followed by a normal CLIENT_HELLO handshake message. The 
488 client, on receiving the server's "redo handshake" message, may be in 
489 one of two states.  If the last two messages it sent were a "redo 
490 handshake" message followed by a CLIENT_HELLO message, then it simply 
491 waits for a SERVER_HELLO handshake message; otherwise, it sends a 
492 "redo handshake" message in response, followed by a CLIENT_HELLO 
493 message, and then waits for a SERVER_HELLO message.
495 In all cases, the sender of the "redo handshake" message continues to 
496 process incoming messages, but may not send any non-handshake messages 
497 until the new handshake completes.  If the connection is 
498 closure-monitored (see section 4.4.3), then the sending of an 
499 unprovoked "closing connection" key management message between the 
500 sending of a "redo handshake" message and the completion of the 
501 subsequent handshake is not permitted.  However, in such connections 
502 the sender of a "redo handshake" message must be prepared to receive a
503 "closing connection" message instead of a "redo handshake" message; in 
504 this case the sender responds with a "closing connection" message and 
505 closes the connection.
507 The handshake phase that follows a "redo handshake" message exchange 
508 is a normal one in most respects; the client may request the 
509 reconnection of an old session or request that a new session be 
510 initiated, and the server, on receiving a reconnection request, can 
511 accept the reconnection or demand that a new session be initiated 
512 instead.  If a new session is being established, then both client and 
513 server must request the same type of authentication requested in the 
514 previous session; if one or the other was not authenticated in the 
515 previous session, then requesting authentication from the 
516 non-authenticated party in the new handshake phase is permitted.  Both
517 parties must verify that the specifications negotiated previously in 
518 the session (cipher type, key exchange type, certificate type and 
519 certifier, hash function type, signature types, and so on), as well as 
520 any certificates exchanged, are identical to those found in the new 
521 handshake phase (with the exception of new types and certificates for 
522 an authentication performed in this handshake, but not in the previous 
523 one).  A mismatch results in a SPECS_MISMATCH or BAD_CERTIFICATE 
524 error (see section 4.6.)  This ensures that the security properties 
525 of the communication channel do not change for the worse.
528 4.5  Data messages
530 Data messages contain user data to be delivered back to the 
531 application using PCT.  Each data record or datagram record contains
532 exactly one data message (corresponding to the ACTUAL_DATA field 
533 in the description of these records), and data messages are never 
534 continued across multiple messages.
536 PCT version 2 Data messages have the following format:
538 char DM_MESSAGE_TYPE[2]
539 char DM_MESSAGE_DATA[MESSAGE_LENGTH]
541 The only defined MESSAGE_TYPE in PCT version 2 is DM_TYPE_USER_DATA;
542 the data in messages of this type is presented directly to the 
543 application.  However, implementations of PCT can assign types to 
544 other values to indicate types of preprocessing, such as particular 
545 compression/decompression algorithms, to be performed before passing 
546 the data in MESSAGE_DATA to the application.  Such implementations
547 should allow messages to be nested in the obvious way, with each 
548 preprocessing step yielding another data message of the correct 
549 format, and the last step yielding a data message of type  
550 DM_TYPE_USER_DATA.  The permissible message types for a particular
551 connection are negotiated during the handshake phase; see sections 
552 5.2.1 and 5.2.2.  An unrecognized message type results in an 
553 ILLEGAL_MESSAGE error (see section 4.6).
555 For message type DM_TYPE_USER_DATA, the DM_MESSAGE_DATA field 
556 contains user data to be passed to the application.  For other 
557 message types, DM_MESSAGE_DATA contains data which, after the 
558 preprocessing determined by the message type, yields another data 
559 message.  MESSAGE_LENGTH (for the data message directly contained in
560 the data or datagram record) is calculated as ACTUAL_LENGTH - 2, or 
561 RECORD_LENGTH - ENCRYPTED_KEY_LENGTH - MAC_LENGTH - 6 if the message 
562 is contained in a datagram record and RECORD_LENGTH - MAC_LENGTH - 4 
563 if it is contained in a data record.  
565 4.6 Error messages
567 Error handling in the PCT protocol is very simple.  When an error is
568 detected before a connection is closed, the detecting party sends a
569 message to the other party indicating the error so that both parties
570 will know about it, and then closes the connection.  In the case of
571 closure-monitored connections (see section 4.4.3), the error message
572 replaces the "closing connection" key management message.  Receiving 
573 an error message also causes the receiving party to close the 
574 connection.  (No "closing connection" message is ever sent in reply to 
575 an error message before closure.)  
577 Servers and clients should not make any further use of any keys, 
578 challenges, connection identifiers, or session identifiers associated 
579 with a connection aborted due to an error.  It is recommended that 
580 implementations perform some kind of alert or logging function when 
581 errors are generated to facilitate monitoring of various types of 
582 attack on the system.
584 Error messages have the following format:
586 char ER_ERROR_TYPE[2]
587 char ER_ERROR_INFO_LENGTH[2]
588 char ER_ERROR_INFO_DATA[([0] << 8)|[1]]
590 The ERROR_INFO_LENGTH field is zero except in the case of the
591 SPECS_MISMATCH error message, which has a two-byte ERROR_INFO_DATA
592 field.  Note that when an error message is sent before the end of
593 the handshake phase of the protocol, the record containing it is left 
594 unencrypted, and its MAC is omitted.
596 The following errors are defined in PCT version 2:
598 PCT_ERR_BAD_CERTIFICATE
600 This error occurs when the client or server receives a handshake 
601 message in which a key-exchange public key certificate is invalid, 
602 either because one or more of the signatures in the certificate is 
603 invalid, or because the identity or attributes on the certificate 
604 are in some way incorrect.
606 PCT_ERR_CLIENT_AUTH_FAILED
608 This error occurs when the server receives a CLIENT_MASTER_KEY or
609 CLENT_VERIFY message from the client in which the client's 
610 authentication response is incorrect.  The certificate may be 
611 invalid, the signature may be invalid, or the contents of the signed 
612 response may be incorrect.
614 PCT_ERR_CONN_BROKEN
616 This error occurs when a closure-monitored connection (see section
617 4.4.3) is closed without an error message or a "closing connection" 
618 key management message having been received.  Since this error only
619 occurs after a connection has been closed, no error message is sent.
621 PCT_ERR_ILLEGAL_MESSAGE
623 This error occurs under a number of circumstances.  For example, it
624 occurs when an unrecognized handshake message is encountered, or when 
625 the value of CH_OFFSET is to large for its CLIENT_HELLO message.
627 PCT_ERR_INTEGRITY_CHECK_FAILED
629 This error occurs when either the client or the server receives a
630 record in which the MAC_DATA is incorrect.  It is also recommended
631 that such a record be treated as if had not been received, in order 
632 to ensure that applications do not receive and process invalid data
633 before learning that it has failed its integrity check.  
635 PCT_ERR_SERVER_AUTH_FAILED
637 This error occurs when the client receives a SERVER_HELLO or
638 SERVER_VERIFY message in which the authentication response is
639 incorrect.
641 PCT_ERR_SPECS_MISMATCH
643 This error occurs when a server cannot find a cipher, hash function,
644 certificate type, or key exchange algorithm it supports in the lists
645 supplied by the client in the CLIENT_HELLO message.  This error may 
646 also occur as a result of a mismatch in cipher specifications or 
647 client authentication requests between the initial specifications and 
648 those that resulted from a redo handshake sequence.
650 The error message for this error includes a two-byte informational
651 field, with eight flags defined as follows:
653 SPECS_MISMATCH_CIPHER           = 0x0001
654 SPECS_MISMATCH_HASH             = 0x0002
655 SPECS_MISMATCH_EXCH             = 0x0004
656 SPECS_MISMATCH_SIG              = 0x0008
657 SPECS_MISMATCH_CERT             = 0x0010
658 SPECS_MISMATCH_CERTIFIER        = 0x0020
659 SPECS_MISMATCH_COMBINATION      = 0x0040
661 Each flag is set if and only if the corresponding list resulted in 
662 a mismatch.  For example, if and only if the SPECS_MISMATCH error 
663 message is being sent because server failed to find a certificate 
664 type it supports in the list supplied by the client in the 
665 CH_CERT_LIST_DATA field, then the SPECS_MISMATCH_CERT flag in
666 the error message would be non-zero.  The SPECS_MISMATCH_COMBINATION
667 flag indicates that while there were matches found in each
668 individual category, all available certificates were incompatible
669 with all the type entries in at least one of the relevant lists
670 (CH_CERT_LIST_DATA, CH_CERTIFIER_LIST_DATA, CH_EXCH_LIST_DATA and 
671 CH_SIG_LIST_DATA).
674 5. PCT Handshake Phase
676 5.1 PCT handshake protocol overview
678 5.1.1  PCT handshake protocol introduction
680 The PCT Handshake Protocol (version 2) is performed during the 
681 handshake phase at the start of every connection, and is used to 
682 negotiate security enhancements (authentication, symmetric 
683 encryption, and message integrity) to data sent during the rest of 
684 the connection.
686 The version 2 PCT Handshake Protocol consists of five messages, sent
687 respectively by the client, then server, then client, then server, 
688 then client, in that order.  (Moreover, under certain circumstances, 
689 some or all of the last three messages are omitted.)  The messages 
690 are named, in order, CLIENT_HELLO, SERVER_HELLO, CLIENT_MASTER_KEY, 
691 SERVER_VERIFY, and CLIENT_VERIFY.
693 The general contents of these messages depend upon two criteria:  
694 how/if a "master key" for the session is to be exchanged, and how/if 
695 each of the client and server are to be authenticated.  At least one 
696 of the two must be authenticated by some means; authentication of 
697 either--or both--may be based on either a key exchange, a digital 
698 signature, or (for one of the two) a previously shared "password" 
699 key, or, in the case of a connection in the same session as a 
700 previous one, on a "master key" shared previously in the session.  
702 The first criterion is determined by the client and server together:
703 first, the CLIENT_HELLO message may contain a request to "reconnect" 
704 using a previously shared master key from a particular session (in 
705 which case no new key exchange is necessary).  The SERVER_HELLO 
706 message will either confirm a requested continuation of the session 
707 through the new connection, or require that a new session be 
708 initiated, with a new key exchange.  PCT version 2 supports 
709 RSA {TM} -based key exchange (see [14], [3]), Diffie-Hellman key 
710 exchange (see [4], [15]) and FORTEZZA KEA token key exchange.  The 
711 chosen key exchange is used by client and server in the case of a new 
712 session to obtain a new shared master key.  This master key is used to 
713 derive keys for encryption and message integrity (or "message 
714 authentication") for the connection and for other connections 
715 associated with the same session.  Note that key exchanges have an 
716 implicit associated direction, with a master key being, in effect, 
717 sent from one party to the other (literally in the case of RSA key 
718 exchange, and more metaphorically in the case of 
719 Diffie-Hellman/FORTEZZA KEA key exchange).  Hence a direction must 
720 also be chosen for the exchange.  In fact, the parties may agree to 
721 perform two key exchanges, one in each direction; in that case, the 
722 master key for the session is computed using both of the sent keys.  
723 In this document, the term "encrypted master key" refers either to an 
724 RSA-encrypted master key, or to the second (typically uncertified) 
725 Diffie-Hellman/FORTEZZA KEA public value sent in a Diffie-Hellman or 
726 FORTEZZA KEA key exchange.  The key exchange is said to be directed 
727 towards the receiver of this encrypted master key.
729 The second criterion is determined in a similar fashion:  if the
730 connection is the first of a new session, then the client may request 
731 authentication of the server by key exchange, or by digital signature, 
732 or by private password, or by any one of a specified subset of these 
733 options.  The client also offers the server a choice among the client 
734 authentication options (from among these choices) available.  The 
735 server, in turn, selects a preferred authentication method if a choice 
736 is offered, and may make a similar request from among the client 
737 authentication options offered.  All these authentications are "linked"
738 to the key exchange performed during the handshake, so that not only
739 the identity of the authenticated party, but also that party's 
740 association to the handshake's key exchange as performed, is verified.
742 If no key exchange is performed, then both client and server are
743 authenticated using the shared master key for the reconnected session,
744 rather than any of the methods described above.
746 In addition to key exchange and authentication, the handshake protocol
747 performs two other tasks:  negotiation of cryptographic parameters, 
748 and handshake verification.  The first is accomplished by the 
749 CLIENT_HELLO and SERVER_HELLO messages.  The CLIENT_HELLO includes a
750 list of codes for acceptable types of symmetric cipher and 
751 cryptographic hash function for use during the session, as well as
752 key exchange and signature algorithms, certificate types and 
753 certifiers, and authentication methods acceptable for use during the 
754 handshake protocol.  The server responds in the SERVER_HELLO message 
755 with its choices from among these lists of acceptable types.  The 
756 second task is performed during the first authentication; it is based 
757 on a cryptographic hash of all the handshake message data passed up to 
758 that point.  Verification of this authenticated hash value by its 
759 receiver assures that the handshake was not tampered with in transit.  
762 5.1.2  PCT handshake authentication
764 The four types of authentication permissible in PCT version 2 are
765 key-exchange, digital signature, private password, and reconnection.
766 Each follows a particular protocol flow, which is essentially 
767 independent of which party is being authenticated (except regarding
768 the assignment of roles to the client and server).  In each case, 
769 client and server both issue random challenges (in the CLIENT_HELLO 
770 and SERVER_HELLO messages, respectively); these challenges, and
771 all information exchanged up to and including the completion of 
772 the key exchange(s), are incorporated into an authentication 
773 response by the party being authenticated (the "responder", as 
774 opposed to the "challenger", to whom the response is sent).  Hence 
775 the authentication response cannot be sent until the sending of both 
776 challenges, as well as the key exchange(s), have been completed 
777 (although it may appear in the last message which contributes to one 
778 of these).
780 In key-exchange-based authentication, the responder sends a certified 
781 public key, which the authenticating party (the "challenger") uses to 
782 send a master key.  In the case of Diffie-Hellman/FORTEZZA KEA key 
783 exchange, the challenger's value is normally randomly chosen, whereas 
784 the responder's is fixed and certified; the master key computed by 
785 the challenger can also be derived using the responder's private key 
786 and the challenger's sent value.  In the case of RSA key exchange, the 
787 master key is randomly chosen at the time of the key exchange by the 
788 challenger and encrypted using the responder's certified public key.  
789 The responder then combines the received master key (which may first 
790 be combined with another sent master key, in the case of two-way key 
791 exchange) with all handshake message data sent so far, including both 
792 challenges and all of the key exchange data, to compute a response.  
793 This response is in the form of a keyed hash, which is verified by the
794 challenger to confirm that the responder could derive the master key
795 correctly, and therefore holds the correct private key.  (A keyed hash
796 is simply the application of a cryptographic hash function to a key 
797 and some other input data; the assumed properties of the hash function 
798 make the function result for any other data input infeasible to 
799 compute for anyone not possessing the key.)
801 A key-exchange-based authentication therefore has the following 
802 message flow:
804 Challenger              Responder
805 ----------              ---------
807 Challenger's            Responder's
808 Challenge               Challenge
810                         [Certified public        
811                         key-exchange key]
813 Random encrypted 
814 master key/public
815 Diffie-Hellman value
817                         Keyed hash response
820 The challenges always appear in the CLIENT_HELLO and SERVER_HELLO
821 messages.  The certified key may not need to be sent, if the 
822 responder already possesses it (perhaps from a previous session).
823                                     
824 In signature-based authentication, the responder simply sends a 
825 certified digital signature public key, accompanied by a digital
826 signature, using the associated private key, of a cryptographic hash 
827 of all handshake messages up to the one being sent.  (Note that this 
828 value is therefore derived from the completed key exchange, as well
829 as both challenges).  The challenger verifies the signature using
830 the responder's certified public key.  A signature-based 
831 authentication has the following message flow:
833 Challenger              Responder
834 ----------              ---------
836 Challenger's            Responder's
837 Challenge               Challenge
839         Key Exchange(s)
841                         Certified public
842                         signature key,
843                         signature response
845 Again, the challenge messages always appear in the CLIENT_HELLO and 
846 SERVER_HELLO messages.  The public key certificate may not be 
847 necessary, but is sent regardless, since it can accompany the 
848 digital signature in the same message, and therefore has no cost in 
849 extra messages.  A certificate-identifying code may be used in its
850 place if understood by both parties; see section 6.4.
852 Password-based authentication is similar to signature-based 
853 authentication; the exchanged master key is combined with the
854 shared password and all the handshake message data sent so far,
855 including the identity of the responder, the exchanged master key 
856 and both challenges, to produce a keyed hash response which is sent 
857 by the responder and verified by the challenger. 
859 A special case of this authentication is a doubly-certified 
860 Diffie-Hellman key exchange, in which one party  is authenticated by 
861 certified Diffie-Hellman key-exchange public key, and the challenger's 
862 sent value is not random but rather another certified Diffie-Hellman 
863 public key.  In this case, the challenger's identity is represented 
864 by the certificate for the public value sent, and the exchanged 
865 master key received by the responder is also treated simultaneously 
866 as the challenger's password.  (If both parties are to be 
867 authenticated by certified Diffie-Hellman key exchange, then each 
868 sends a randomly chosen public value to the other, and the final 
869 master key is obtained by combining the two keys exchanged.) 
871 It is recommended that shared private keys used for password-based
872 authentication be machine-generated and cryptographically random in 
873 the same sense as the master key (see section 6.1.3).  However, 
874 because the distribution of password-style shared private keys is
875 outside the scope of this protocol, and is therefore vulnerable to 
876 possible insecure implementations, the following constraints on 
877 password-based authentication are imposed:  
879 1.  Only one of the client and server, not both, may be 
880 authenticated using password-based authentication.
882 2.  Password-based authentication may only be used if the other party 
883 is also authenticated, using either key exchange- or signature-based 
884 authentication.
886 3.  If the other party is authenticated using signature-based 
887 authentication, then the password-based authentication response must 
888 be sent only after the other party's authentication response has been 
889 sent and verified.
891 These constraints protect poorly chosen password-style shared private 
892 keys from off-line brute force attacks.  However, even a well-chosen
893 shared private key is vulnerable if not kept strictly confidential
894 by both parties sharing it.  Implementations must therefore ensure 
895 this confidentiality.  Poorly-chosen or poorly-guarded passwords are
896 of course still vulnerable to other attacks.
898 A password-based authentication has the following message flow:
900 Challenger              Responder
901 ----------              ---------
903 Challenger's            Responder's
904 Challenge               Challenge
906         Key Exchange(s)
908                         responder's identity/
909                         certified D-H public
910                         value, keyed hash response
913 Finally, in the case of authentication based on a master key exchanged
914 earlier in the session, the response is computed from both challenges,
915 the shared master key, and the session identifier.  (The client's 
916 response is in fact implicit; by computing a correct MAC for its first
917 data message, the client demonstrates its possession of the session's
918 master key.)  This authentication has the following flow:
920 Challenger              Responder
921 ----------              ---------
923 Challenger's            Responder's
924 Challenge               Challenge
926                         keyed hash response
929 5.1.3  Handshake key exchange
931 In the full handshake protocol, authentications are interleaved with 
932 at least one key exchange (and with each other, if both client and 
933 server are being authenticated).  The interleaving is designed to 
934 compress the authentications and key exchange(s) into as few 
935 messages as possible.  For example, a client has the option of 
936 sending an encrypted public key and/or (possibly certified) 
937 key-exchange public key in the CLIENT_HELLO message, along with its 
938 challenge.  The latter allows the client to "receive" a 
939 client-directed key exchange, while the former initiates a 
940 server-directed key exchange.  However, the client may not have the 
941 server's key-exchange public key, and may not anticipate a request for 
942 a client-directed key exchange; hence, sending of the encrypted master 
943 key and/or client key-exchange certificate may be postponed to the 
944 CLIENT_MASTER_KEY message.
946 In general, each possible key exchange has a "regular" and "quick"
947 flow.  A client-directed key exchange may occur beginning in the
948 CLIENT_MASTER_KEY message, when the client sends a (possibly 
949 certified) key-exchange public key, then continues in the 
950 SERVER_VERIFY message with the server sending an encrypted master 
951 key.  In the quick version, the client may (or may not) send the 
952 (certified) public key in the CLIENT_HELLO message, and the server, 
953 upon receiving it (or having received it at some time in the past) 
954 sends an encrypted master key in the SERVER_HELLO message.  Similarly, 
955 normal server-directed key exchange begins in the SERVER_HELLO message
956 with a (possibly certified) key-exchange public key, and continues 
957 with an encrypted master key in the following CLIENT_MASTER_KEY 
958 message.  In the quick version, the client, having received the 
959 server's public key previously, sends an encrypted master key 
960 immediately, in the CLIENT_HELLO message.
962 5.1.4  PCT Handshake Protocol flow
964 The contents of PCT version 2 handshake protocol can be summarized as
965 follows:
967 The CLIENT_HELLO message contains a random authentication challenge
968 to the server and a request for the type and level of cryptography,
969 certification, authentication and (if necessary) digital signature
970 to be used for the session, if it is to be a new one.  If the client 
971 is attempting to continue an old session, then it also supplies that 
972 session's identifier.  The client can also send a "quick 
973 certificate", in anticipation of a client authentication request from 
974 the server, and even a "quick master key", if the client already has 
975 a satisfactory server's key-exchange public key.
977 If the server accepts the old session identifier, then the 
978 SERVER_HELLO message contains a response to the client's challenge, 
979 and a random connection identifier which doubles as a random challenge
980 to the client.  The handshake is then finished (although an 
981 authentication of the client is implicit in the MAC included with the 
982 client's first data message).  
984 In the case of a new session, the SERVER_HELLO message contains a
985 random connection identifier; this identifier doubles as an 
986 authentication challenge to the client if the server desires client 
987 authentication.  The server also responds with its choices for type 
988 and level of cryptography, certification, authentication and (if 
989 necessary) digital signature (from among those offered by the 
990 client).  In addition, the server sends a certificate for the type of 
991 authentication requested by the client (if any), and sends a "quick 
992 master key" and/or "quick response" in response to the client's 
993 "quick certificate" and/or "quick master key", respectively, if 
994 appropriate.  In the latter case, the response may require an
995 accompanying digital signature public-key certificate or "identity
996 indicator" (directing the client to the correct shared password), 
997 and the handshake protocol completes at this point if no client 
998 authentication is required.  
1000 The CLIENT_MASTER_KEY message sent by the client (assuming that it
1001 is necessary) includes a (possibly certified) key-exchange public key, 
1002 if requested by the server.  It also contains an encrypted master key,
1003 if the server sent a key-exchange public key, and an authentication 
1004 response (accompanied by an identity indicator or digital signature 
1005 public key certificate, if appropriate) if client authentication by 
1006 signature or password was requested, and the key exchange has been 
1007 completed.  If the server's authentication response has also been 
1008 received (or was not required), then the handshake protocol completes 
1009 at this point.
1011 The SERVER_VERIFY message sent next by the server, if necessary, 
1012 contains an encrypted master key sent to the client, if requested,
1013 and/or an authentication response (possibly accompanied by a digital
1014 signature public key certificate or identity indicator) to the 
1015 encrypted master key sent in the previous message.  Unless the former 
1016 requires an authentication response, the protocol completes at this
1017 point.
1019 Finally, the CLIENT_VERIFY message, if needed, contains the client's 
1020 authentication response to the key exchange completed by the 
1021 encrypted master key sent in the SERVER_VERIFY message. 
1023 Usually the client or server can safely begin sending data records 
1024 on the underlying transport immediately following its own last 
1025 handshake message, without waiting for a response even if one is 
1026 expected.  In most instances, therefore, PCT adds only a single
1027 round-trip to the connection's setup cost.  Sometimes the cost is
1028 even less; for instance, a server can begin sending data immediately
1029 after sending the SERVER_HELLO message if the client initiated a 
1030 quick server-directed key exchange and only server authentication
1031 is required, or if a successful reconnection of an established 
1032 session has occurred (note that in this case the client cannot send 
1033 data until receiving the SERVER_HELLO message containing the server's 
1034 challenge).
1037 5.2  PCT Handshake messages
1039 PCT version 2 Handshake messages are sent in handshake records, whose
1040 format is described in section 4.3.1.  These records are sent in the 
1041 clear (unencrypted), although some of the key-exchange-related fields 
1042 involve (public-key) encryption.  A single handshake message may span
1043 across more than one handshake record; however, only data fields 
1044 associated with four-byte length fields may do so.  These fields are 
1045 always the last ones in a message; the remaining ones (including all 
1046 length fields) must be contained within the first handshake record 
1047 used for the handshake message.  (Note that for PCT version 1 
1048 compatibility reasions, the CLIENT_HELLO message has no such fields.)
1050 5.2.1 CLIENT_HELLO 
1052 char CH_SESSION_ID_DATA[30]
1053 char CH_CHALLENGE_DATA[30]
1054 char CH_CLIENT_VERSION[2]
1055 char CH_OFFSET[2]
1056 char CH_CIPHER_LIST_LENGTH[2]
1057 char CH_HASH_LIST_LENGTH[2]
1058 char CH_CERT_LIST_LENGTH[2]
1059 char CH_EXCH_LIST_LENGTH[2]
1060 char CH_KEY_ARG_LENGTH[2]
1061 char CH_MSG_LIST_LENGTH[2]
1062 char CH_SIG_LIST_LENGTH[2]
1063 char CH_CERTIFIER_LIST_LENGTH[2]
1064 char CH_QUICK_PUBLIC_VALUE_LENGTH[2]
1065 char CH_QUICK_SERVER_PUBLIC_VALUE_LENGTH[2]
1066 char CH_QUICK_ENCRYPTED_KEY_LENGTH[2]
1067 char CH_AUTH_OPTIONS[2]
1068 char CH_CIPHER_LIST_DATA[([0] << 8)|[1]]
1069 char CH_HASH_LIST_DATA[([0] << 8)|[1]]
1070 char CH_CERT_LIST_DATA[([0] << 8)|[1]]
1071 char CH_EXCH_LIST_DATA[([0] << 8)|[1]]
1072 char CH_KEY_ARG_DATA[([0] << 8)|[1]]
1073 char CH_MSG_LIST_DATA[([0] << 8)|[1]]
1074 char CH_SIG_LIST_DATA[([0] << 8)|[1]]
1075 char CH_CERTIFIER_LIST_DATA[([0] << 8)|[1]]
1076 char CH_QUICK_PUBLIC_VALUE_DATA[([1] << 8)|[1]]
1077 char CH_QUICK_SERVER_PUBLIC_VALUE_DATA[([0] << 8)|[1]]
1078 char CH_QUICK_ENCRYPTED_KEY_DATA[([0] << 8)|[1]]
1080 When a client first connects to a server it is required to send the
1081 CLIENT_HELLO message.  The server is expecting this message from the
1082 client as its first message. It is an ILLEGAL_MESSAGE error for a
1083 client to send anything else as its first message.  The CLIENT_HELLO
1084 message begins with two fixed-length fields followed by a two-byte 
1085 version number and an offset to the variable length data.  The 
1086 version number field CH_CLIENT_VERSION is always set to 
1087 PCT_VERSION_V2 in PCT version 2.  The CH_OFFSET field contains the 
1088 number of bytes used by the various fields (length fields plus the 
1089 AUTH_OPTIONS field) that follow the offset field and precede the 
1090 variable-length fields.  For PCT version 2, this offset value is 
1091 always PCT_CH_OFFSET_V2, i.e., 24.  However, inclusion of this field 
1092 will allow future versions to be compatible with version 2, even if 
1093 the number of these fields changes, just as inclusion of this field 
1094 helps make PCT version 2 CLIENT_HELLO messages understandable to PCT 
1095 version 1 servers.
1097 The CH_CHALLENGE_DATA field is a string of 30 bytes of random bits, to
1098 be used as authentication challenge data from the client.  The 
1099 CHALLENGE_DATA should be cryptographically random, in the same sense 
1100 as the MASTER_KEY (see section 6.1.3).  If the client finds a 
1101 session identifier in its cache for the server, then that 
1102 session-identifier data is sent in the field CH_SESSION_ID_DATA.  
1103 Otherwise, the special PCT_SESSION_ID_NONE value is used.  In either 
1104 case, the client specifies in CIPHER_LIST_DATA, HASH_LIST_DATA,
1105 EXCH_LIST_DATA and SIG_LIST_DATA its preferred choices of symmetric 
1106 cipher, key lengths, hash function, asymmetric key exchange algorithm
1107 and digital signature algorithm.  However, if a session identifier is 
1108 sent, then these choices are only relevant in the case where the 
1109 server cannot recognize the session identifier, and a new session 
1110 must therefore be initiated.  If the server recognizes the session, 
1111 then these fields are ignored by the server.  Similarly, if the 
1112 client requires server authentication in the event of a new session 
1113 initiation, then the CERT_LIST_DATA and CERTIFIER_LIST_DATA lists 
1114 contain the client's preferred choices of certificate type and 
1115 certifier; otherwise, these lists are empty, and their length is 
1116 zero.  Finally, the MSG_LIST_DATA list contains a list of data
1117 message types (other than the DM_TYPE_USER_DATA) supported by the 
1118 client; if the client supplies a session identifier and the server
1119 recognizes it, then this list is ignored, and the list negotiated
1120 previously in the session is used instead.
1122 The AUTH_OPTIONS field contains the values of twelve flags that 
1123 determine the flow of the remainder of the protocol if a new session 
1124 is being initiated.  The flags are associated with the twelve 
1125 low-order bits of the AUTH_OPTIONS field, and are named, in order 
1126 (from least to most significant bit), as follows:
1128 CH_DEMAND_KEY_EXCH_SEND     :=  0x0001
1129 CH_DEMAND_AUTH_KEY_EXCH     :=  0x0002
1130 CH_DEMAND_AUTH_SIG          :=  0x0004 
1131 CH_DEMAND_AUTH_PASSWORD     :=  0x0008 
1132 CH_OFFER_KEY_EXCH_RECEIVE   :=  0x0010
1133 CH_OFFER_AUTH_KEY_EXCH      :=  0x0020
1134 CH_OFFER_AUTH_SIG           :=  0x0040 
1135 CH_OFFER_AUTH_PASSWORD      :=  0x0080
1136 CH_REQUEST_RECONNECT        :=  0x0100
1137 CH_REQUEST_CLOSURE_MON      :=  0x0200
1138 CH_REQUEST_REDO_ENABLE      :=  0x0400
1139 CH_OFFER_CERTIFIER_TRYOUT   :=  0x0800
1141 If the CH_DEMAND_KEY_EXCH_SEND flag is set to one, then the client
1142 requires that the server accept an encrypted master key from the 
1143 client as part of the key exchange.  If the CH_OFFER_KEY_EXCH_RECEIVE 
1144 flag is set to one, then the client is willing to receive an encrypted 
1145 master key from the server as part of the key exchange.  If both flags
1146 are set, then both conditions hold; the client requires that the 
1147 server receive a key exchange, and will also accept one, at the 
1148 server's option.  In the case of uncertified Diffie-Hellman/FORTEZZA 
1149 KEA key exchange, the flags simply refer to the "receiver" sending the 
1150 public value first, followed by the "sender"; in other cases, the 
1151 holder of the private key associated with the RSA public key or 
1152 certified Diffie-Hellman/FORTEZZA KEA public value is always the 
1153 "receiver".  (Doubly certified Diffie-Hellman/FORTEZZA KEA key 
1154 exchange is discussed in section 5.1.2.)  Note that both client and 
1155 server are assumed willing to be the (possibly sole) sender of an 
1156 encrypted master key; hence, even if the CH_DEMAND_KEY_EXCH_SEND flag 
1157 is set to zero, and the CH_OFFER_KEY_EXCH_RECEIVE flag is set to one, 
1158 the client has neither ruled out being the sender, nor demanded to be 
1159 the receiver, of an encrypted master key.  
1161 The six AUTH flags refer to types of authentication:  the client
1162 requires the server to authenticate by one of the means for which the
1163 associated CH_DEMAND_AUTH flag is set to one, and offers to 
1164 authenticate itself, at the server's option, by any of the means for 
1165 which the associated CH_OFFER_AUTH flag is set to one.  (The
1166 abbreviations "KEY_EXCH", "SIG" and "PASSWORD" stand for 
1167 key-exchange-based, digital signature-based and shared password-based
1168 authentication, respectively.)  The settings of the flags must be
1169 consistent with at least one key exchange and one authentication 
1170 occurring; i.e., at least one of the six authentication flags and at 
1171 least one of the two key exchange flags must be set to one.  Moreover,
1172 the constraints on password-based authentication must be obeyed.  (See
1173 sections 5.1.2 and 7.2.)
1175 The CH_REQUEST_RECONNECT flag indicates, when set to one, that the 
1176 client is requesting that the current connection be part of an 
1177 existing session; in this case, the CH_SESSION_ID field must contain
1178 that session's identifier.  The CH_REQUEST_CLOSURE_MON flag 
1179 indicates, when set to one, that the client wishes the current session 
1180 to be closure-monitored (see section 4.4.3).  The 
1181 CH_REQUEST_REDO_ENABLE flag indicates, when set to one, that the 
1182 client wishes the current session to be redo-enabled (see section 
1183 4.4.4).  Finally, the CH_OFFER_CERTIFIER_TRYOUT flag indicates, when
1184 set to one, that the list of acceptable certifiers in 
1185 CH_CERTIFIER_LIST is not exhaustive (see below).
1187 The CIPHER_LIST_DATA field contains a list of possible symmetric
1188 ciphers supported by the client, in order of (the client's)
1189 preference.  Each element in the list is a four-byte field, of which
1190 the first two bytes contain a code representing a cipher type, the
1191 third byte contains the encryption key length in bits (0-255), and the
1192 fourth byte contains the MAC key length in bits, minus 64 (values
1193 0-255, representing lengths 64-319; this encoding enforces the
1194 requirement that the MAC key length be at least 64 bits).  The entire
1195 list's length in bytes (four times the number of elements) is placed
1196 in CIPHER_LIST_LENGTH.
1198 The HASH_LIST_DATA field contains a list of possible hash functions
1199 supported by the client, in order of (the client's) preference.  The
1200 server will choose one of these to be used for computing MACs and
1201 deriving keys.  Each element in the list is a two-byte field
1202 containing a code representing a hash function choice.  The entire
1203 length of the list (twice the number of elements) is placed in
1204 HASH_LIST_LENGTH.
1206 The CERT_LIST_DATA field contains a list of possible certificate
1207 formats supported by the client, in order of (the client's)
1208 preference.  Each element in the list is a two-byte field containing a
1209 code representing a certificate format.  The entire length of the list
1210 (twice the number of elements) is placed in CERT_LIST_LENGTH.
1212 The EXCH_LIST_DATA field contains a list of possible asymmetric key
1213 exchange algorithms supported by the client, in order of (the
1214 client's) preference.  Each element in the list is a two-byte field
1215 containing a code representing a key exchange algorithm type.  The 
1216 entire length of the list (twice the number of elements) is placed 
1217 in EXCH_LIST_LENGTH.
1219 The KEY_ARG_DATA field contains an initialization vector to be used in
1220 a reconnected session when the cipher type is a block cipher (see 
1221 section 6.1.5).  If a new session is being requested (i.e., if the 
1222 CH_REQUEST_RECONNECT flag is set to zero), then KEY_ARG_LENGTH must 
1223 be zero.
1225 The MSG_LIST_DATA field contains a list of data message types (other
1226 than DM_TYPE_USER_DATA) supported by the client.  Each element in the
1227 list is a two-byte field containing a code representing a data message
1228 type.  The entire length of the list (twice the number of elements) is
1229 placed in MSG_LIST_LENGTH.
1231 The SIG_LIST_DATA field contains a list of possible signature 
1232 algorithms supported by the client, in order of (the client's) 
1233 preference.  Each element in the list is a two-byte field containing 
1234 a code representing a signature algorithm type.  The entire length 
1235 of the list (twice the number of elements) is placed in 
1236 SIG_LIST_LENGTH.
1238 The CERTIFIER_LIST_DATA field contains a list of identifiers of 
1239 possible certificate sources recognized by the client, in order of 
1240 (the client's) preference.  Each element in the list is a 
1241 zero-delimited string.  The entire length of the list is placed in 
1242 CERTIFIER_LIST_LENGTH.  A client may indicate, by setting the 
1243 CH_OFFER_CERTIFIER_TRYOUT flag to one, that the certifier list does
1244 not imply rejection of all other certifiers; for example, the client
1245 may provide an abbreviated (or even empty) certifier list to avoid 
1246 constructing an exhaustive list of accepted certifiers, or may lack 
1247 a naming convention for certifiers known to be compatible with that 
1248 of the server.  The client may still in that case reject a 
1249 certificate offered by the server.
1251 The CH_QUICK_PUBLIC_VALUE_DATA field may, at the client's option, 
1252 contain a (possibly certified) key-exchange public key.  If the 
1253 field is non-empty, then the CH_OFFER_KEY_EXCH_RECEIVE flag must 
1254 be set to one.  If the CH_OFFER_AUTH_KEY_EXCH flag is also set to 
1255 one, then the CH_QUICK_PUBLIC_VALUE_DATA field, if non-empty, 
1256 contains a certificate (including key-exchange public key); otherwise 
1257 the field, if non-empty, contains an uncertified key exchange public 
1258 value.  The exact format of this field is described in section 
1259 6.1.2.  If the client expects the server to demand client 
1260 authentication by key exchange, then this public key/certificate may 
1261 expedite the expected key exchange/authentication; however, the server
1262 may still indicate in the subsequent SERVER_HELLO message that a 
1263 public key or certificate of another type (or from a different 
1264 certifier) is required.
1266 The CH_QUICK_SERVER_PUBLIC_VALUE_DATA and CH_QUICK_ENCRYPTED_KEY_DATA 
1267 fields may, at the client's option, contain, respectively, the public
1268 value from a key-exchange public key certificate attributed to the 
1269 server, and an encrypted master key (or Diffie-Hellman/FORTEZZA KEA 
1270 public value) decryptable by the holder of the private key associated 
1271 with the certified key-exchange public key.  The format of these 
1272 fields is described in section 6.1.2.  If the client already 
1273 possesses a certified key-exchange public key belonging to the server,
1274 then use of these fields will expedite the resulting key exchange.  
1275 However, in unusual circumstances, the server may still "disavow" the 
1276 key exchange--that is, refuse to receive it, and offer only some 
1277 other key exchange type, direction or certificate.  (For example, the 
1278 public key used by the client may be incorrect or out-of-date.)  Note 
1279 that if these fields are used by the client, then the 
1280 CH_REQUEST_KEY_EXCH_SEND flag must be set to one.  
1282 The server, on receiving a CLIENT_HELLO message, checks the version
1283 number and the offset field to determine where the variable-length
1284 data fields start.  (The OFFSET value should be at least
1285 PCT_CH_OFFSET_V2 for versions 2 and higher.)  The server then checks 
1286 whether the CH_REQUEST_RECONNECT flag is set to one, and if so, 
1287 whether it recognizes the SESSION_ID.  In that case, the server 
1288 responds with a SERVER_HELLO message with the SH_ACCEPT_RECONNECT 
1289 flag set, and the appropriate values (see below) in the RESPONSE and 
1290 CONNECTION_ID fields.  
1292 Otherwise, it examines the CIPHER_LIST and HASH_LIST lists in the 
1293 CLIENT_HELLO message to select a cipher and hash function.  The 
1294 server also examines the AUTH_OPTIONS flags and CERT_LIST, 
1295 CERTIFIER_LIST, SIG_LIST and EXCH_LIST lists to select a key 
1296 exchange type and direction(s) and an authentication combination for 
1297 itself (including authentication type, certificate type and 
1298 certifier) which is acceptable to both the client and the server, if 
1299 one or more of the CH_DEMAND_AUTH flags were set.  Finally, the 
1300 server examines the same lists to choose a sublist from each with 
1301 which it is compatible, if it requires client authentication as well.  
1302 If such selections are possible, then the server sends a SERVER_HELLO 
1303 message to the client as described below; otherwise, the server 
1304 detects a SPECS_MISMATCH error.   The server also examines the quick
1305 key-exchange public value (if sent) for compatibility, and/or 
1306 decrypts the quick encrypted master key, if possible.
1309 5.2.2 SERVER_HELLO  
1311 char SH_SERVER_VERSION[2]
1312 char SH_AUTH_OPTIONS[2]
1313 char SH_CIPHER_SPECS_DATA[4]
1314 char SH_HASH_SPECS_DATA[2]
1315 char SH_EXCH_SPECS_DATA[2]
1316 char SH_CONNECTION_ID_DATA[30]
1317 char SH_SESSION_ID_DATA[30]
1318 char SH_ALT_CIPHER_LIST_LENGTH[2]
1319 char SH_ALT_HASH_LIST_LENGTH[2]
1320 char SH_MSG_LIST_LENGTH[2]
1321 char SH_EXCH_LIST_LENGTH[2]
1322 char SH_CERT_LIST_LENGTH[2]
1323 char SH_SIG_LIST_LENGTH[2]
1324 char SH_QUICK_ENCRYPTED_KEY_LENGTH[2]
1325 char SH_RESPONSE_LENGTH[2]
1326 char SH_CERTIFIER_LIST_LENGTH[4]
1327 char SH_PUBLIC_VALUE_LENGTH[4]
1328 char SH_SIG_CERT_LENGTH[4]
1329 char SH_ALT_CIPHER_LIST_DATA[([0] << 8)|[1]]
1330 char SH_ALT_HASH_LIST_DATA[([0] << 8)|[1]]
1331 char SH_MSG_LIST_DATA[([0] << 8)|[1]]
1332 char SH_EXCH_LIST_DATA[([0] << 8)|[1]]
1333 char SH_CERT_LIST_DATA[([0] << 8)|[1]]
1334 char SH_SIG_LIST_DATA[([0] << 8)|[1]]
1335 char SH_QUICK_ENCRYPTED_KEY_DATA[([0] << 8)|[1]]
1336 char SH_RESPONSE_DATA[([0] << 8)|[1]]
1337 char SH_CERTIFIER_LIST_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1338 char SH_PUBLIC_VALUE_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1339 char SH_SIG_CERT_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1341 The server sends this message after receiving the client's
1342 CLIENT_HELLO message.  The PCT version number in SH_SERVER_VERSION 
1343 is always the maximum protocol version that the server supports; the 
1344 remainder of the SERVER_HELLO message and all subsequent messages 
1345 will conform to the format specified by the protocol version 
1346 corresponding to the minimum of the client and server protocol 
1347 version numbers, as indicated by the CH_CLIENT_VERSION and 
1348 SH_SERVER_VERSION fields.  Unless there is an error, the server always 
1349 returns a random value 30 bytes in length in the CONNECTION_ID field.  
1350 This value doubles as challenge data if the server requests client 
1351 authentication, and should therefore be random in the same sense as 
1352 the challenge data in the CLIENT_HELLO message.
1354 The SH_AUTH_OPTIONS field contains twelve flags, associated with the
1355 twelve low-order bits of the SH_AUTH_OPTIONS field; they are named,
1356 in order (from least to most significant bit), as follows:
1358 SH_ACCEDE_KEY_EXCH_RECEIVE  :=  0x0001
1359 SH_ACCEDE_AUTH_KEY_EXCH     :=  0x0002
1360 SH_ACCEDE_AUTH_SIG          :=  0x0004 
1361 SH_ACCEDE_AUTH_PASSWORD     :=  0x0008 
1362 SH_ACCEPT_KEY_EXCH_SEND     :=  0x0010
1363 SH_ACCEPT_AUTH_KEY_EXCH     :=  0x0020
1364 SH_ACCEPT_AUTH_SIG          :=  0x0040 
1365 SH_ACCEPT_AUTH_PASSWORD     :=  0x0080
1366 SH_ACCEPT_RECONNECT         :=  0x0100
1367 SH_ACCEPT_CLOSURE_MON       :=  0x0200
1368 SH_ACCEPT_REDO_ENABLE       :=  0x0400
1369 SH_OFFER_CERTIFIER_TRYOUT   :=  0x0800
1371 The SH_ACCEPT_CLOSURE_MON flag is set to one if and only if the 
1372 CH_REQUEST_CLOSURE_MON flag is set to one, and the server also 
1373 prefers the current connection to be closure-monitored (see section
1374 4.4.3).  The SH_ACCEPT_REDO_ENABLE flag is set to one if and only if
1375 the CH_REQUEST_REDO_ENABLE flag is set to one, and the server also
1376 prefers the current connection to be redo-enabled (see section 4.4.4).
1378 If the server recognizes the contents of the CH_SESSION_ID_DATA 
1379 field of the CLIENT_HELLO message as session identifier for a session
1380 for which the master key is still available to the server, then the
1381 SH_ACCEPT_RECONNECT flag in the SH_AUTH_OPTIONS field is set to one.
1382 Also, the SH_SESSION_ID_DATA field echoes the CH_SESSION_ID_DATA 
1383 field.  Moreover, the server sets the CIPHER_SPECS_DATA and 
1384 HASH_SPECS_DATA fields to the values stored along with the session 
1385 identifier.  There are two subcases:  (1) If the SH_EXCH_SPECS_DATA 
1386 value does not refer to a TOKEN type (see section 6.1), then the 
1387 CLIENT_MAC, SERVER_MAC, CLIENT_WRITE, and SERVER_WRITE keys are 
1388 rederived using the MASTER_KEY from the old session, as well as the 
1389 CONNECTION_ID and CH_CHALLENGE values from the SERVER_HELLO and 
1390 CLIENT_HELLO messages, respectively, for this connection.  (2) If the 
1391 SH_EXCH_SPECS_DATA refers to a TOKEN type, then the keys from the 
1392 ongoing session continue to be used.  In order to obtain fresh key 
1393 material or reset the sequence number, TOKEN implementations must use 
1394 the redo handshake mechanism (KM_REDO_HANDSHAKE key management 
1395 message), or else not request (or not accept) reconnections of an 
1396 established session.  When this mechanism is used with a TOKEN 
1397 exchange type, the client must set the CH_REQUEST_RECONNECT flag to
1398 one and send PCT_SESSION_ID_NONE in the CH_SESSION_ID_DATA field of 
1399 the subsequent CLIENT_HELLO message.  (See section 4.4.4.)
1401 In the case of a reconnection, all the remaining data fields are 
1402 empty except for SH_RESPONSE_DATA, whose contents are described in 
1403 section 7.2.  Also, all of the flags in SH_AUTH_OPTIONS are set to 
1404 zero except SH_ACCEPT_RECONNECT and possibly SH_ACCEPT_CLOSURE_MON 
1405 and/or SH_ACCEPT_REDO_ENABLE.
1406        
1407 If the server does not recognize the session identifier provided by
1408 the client (or if the CH_REQUEST_RECONNECT flag was set to zero), 
1409 then the server sets the SH_ACCEPT_RECONNECT flag to zero in the 
1410 SH_AUTH_OPTIONS field.  A unique session identifier (which must not 
1411 equal PCT_SESSION_ID_NONE) is also placed in the SH_SESSION_ID_DATA 
1412 field; this value need not be cryptographically random, but values 
1413 should not be used repeatedly (a continually increasing counter, for 
1414 instance, would be sufficient).  The server then selects any choice 
1415 with which it is compatible, from each of the CH_CIPHER_LIST, 
1416 CH_HASH_LIST and CH_EXCH_LIST lists supplied in the CLIENT_HELLO 
1417 message.  (These values are returned to the client in the 
1418 SH_CIPHER_SPECS_DATA, SH_HASH_SPECS_DATA and SH_EXCH_SPECS_DATA 
1419 fields, respectively.)  If no cipher type (respectively, hash type, 
1420 key exchange type) from the CH_CIPHER_LIST (respectively, 
1421 CH_HASH_LIST, CH_EXCH_LIST) is acceptable to the server, then a 
1422 SPECS_MISMATCH error occurs.
1424 Alternate cipher and hash types from CH_CIPHER_LIST and CH_HASH_LIST, 
1425 respectively, with which the server is compatible may be placed in the 
1426 SH_ALT_CIPHER_LIST and SH_ALT_HASH_LIST lists (whose formats are 
1427 identical to those of CH_CIPHER_LIST and CH_HASH_LIST, respectively); 
1428 these lists can then be used by the client in determining whether 
1429 pre-encrypted, pre-MAC'd data will be understandable to the server.  
1430 (Filling these lists is optional for the server; an empty list simply 
1431 means that the client has no assurance that the server supports any 
1432 cipher or hash type other than the one selected for the session.)  
1433 Finally, the SH_MSG_LIST list contains a list of those data message 
1434 types from CH_MSG_LIST which the server also supports; the format of 
1435 the two message type lists is identical.
1437 The server also examines the CH_AUTH_OPTIONS flags to select server 
1438 authentication and key exchange options acceptable to both (as 
1439 indicated by the CH_AUTH_OPTIONS flags and the server's own 
1440 requirements/compatibilities), and to offer a set of acceptable
1441 client authentication options.  In particular, these must include a 
1442 server authentication type if any of the CH_DEMAND_AUTH flags is set 
1443 to one, at least one client authentication type if client 
1444 authentication is required by the server, and a key exchange 
1445 direction (or two) acceptable to both client and server, as indicated 
1446 by the CH_DEMAND_KEY_EXCH_SEND and CH_OFFER_KEY_EXCH_RECEIVE flags 
1447 and the server's own requirements.  (The restrictions on 
1448 password-based authentication must also be obeyed; see section 5.1.2.)
1449 If no such set of types is available that is acceptable to both client
1450 and server, then a SPECS_MISMATCH error occurs.  If at least one such 
1451 set of types is found, then the server sets the associated flags in 
1452 SH_AUTH_OPTIONS (at most one SH_ACCEDE_AUTH flag and at least one 
1453 SH_ACCEDE/ACCEPT_KEY_EXCH flag); these determine the type of server 
1454 authentication to be performed, if any, and the direction of the key 
1455 exchange(s), as well as the set of client authentication options 
1456 acceptable to the server.  The type of the key exchange(s) (they must 
1457 both be of the same type, if there are two) is selected by the server,
1458 and indicated by the code in the SH_EXCH_SPECS field.
1460 If the server requires client authentication, then the server also
1461 selects those choices from the CH_SIG_LIST, CH_CERT_LIST and 
1462 CH_CERTIFIER_LIST lists that are also acceptable 
1463 CH_OFFER_CERTIFIER_TRYOUT is set to one).  These server-selected 
1464 lists are placed in the SH_SIG_LIST_DATA, SH_CERT_LIST_DATA and 
1465 SH_CERTIFIER_LIST_DATA fields, respectively; their format is 
1466 identical to those of the corresponding fields in the CLIENT_HELLO 
1467 message.  If the server does not require client authentication, then 
1468 the SH_SIG_LIST, SH_CERT_LIST and SH_CERTIFIER_LIST fields are 
1469 empty, and their length is zero.  The server may also, like the 
1470 client, demand certificate-based authentication but set the 
1471 SH_OFFER_CERTIFIER_TRYOUT flag to one.  In this case, the server 
1472 simply reserves the right to reject certificates from unacceptable 
1473 certifiers, and its list of acceptable ones is not assumed 
1474 exhaustive.
1476 If the SH_ACCEDE_KEY_EXCH_RECEIVE flag is set to one and the
1477 CH_QUICK_SERVER_CERT field is either empty or contains an 
1478 incorrect public value, then the SH_PUBLIC_VALUE_DATA field contains 
1479 a (possibly certified) key-exchange public key of a type compatible 
1480 with the chosen key exchange type specified in the 
1481 SH_EXCH_SPECS_DATA field.  If, moreover, the 
1482 SH_ACCEDE_AUTH_KEY_EXCH flag is set to one, then the key-exchange 
1483 public key is contained in a certificate whose type and certifier 
1484 are found in the CH_CERT_LIST and CH_CERTIFIER_LIST lists, 
1485 respectively (if CH_CERTIFIER_LIST is non-empty).  Otherwise, the 
1486 public key is uncertified.  The format of the SH_PUBLIC_VALUE_DATA
1487 field is described in section 6.1.2.  If the 
1488 SH_ACCEDE_KEY_EXCH_RECEIVE flag is set to zero, then the 
1489 SH_PUBLIC_VALUE_DATA field is empty, and its length is zero.
1491 If the client sent an acceptable key-exchange public key certificate
1492 in the CH_QUICK_PUBLIC_VALUE field of the CLIENT_HELLO message, then 
1493 the server responds with an RSA-encrypted master key (or randomly 
1494 chosen Diffie-Hellman/FORTEZZA KEA public value) in the 
1495 SH_QUICK_ENCRYPTED_KEY field of the SERVER_HELLO message.  (The 
1496 format of this field is described in section 6.1.2.)
1498 If the client sent an acceptable certified server key-exchange 
1499 public key and encrypted master key in the CH_QUICK_SERVER_CERT and 
1500 CH_QUICK_ENCRYPTED_KEY fields of the CLIENT_HELLO message, and if the 
1501 SH_ACCEPT_KEY_EXCH_SEND flag in the SH_AUTH_OPTIONS field is set to
1502 zero, then the key exchange is completed, and the server must place an
1503 authentication response, constructed as described in section 7.2, in 
1504 SH_RESPONSE_DATA if one of the CH_DEMAND_AUTH flags is set to one.  If 
1505 the SH_ACCEDE_AUTH_SIG flag is set to one, then the SH_SIG_CERT_DATA 
1506 field contains a certified digital signature public key acceptable to 
1507 the client (as indicated by the CH_SIG_LIST, CH_CERT_LIST and 
1508 CH_CERTIFIER_LIST lists), in the format of a PUBLIC_VALUE field of
1509 type PV_CERTIFICATE (see section 6.1.2).  If the 
1510 SH_ACCEDE_AUTH_PASSWORD flag is set to one, then an identity indicator 
1511 (such as an account identifier or, in the case of doubly certified 
1512 Diffie-Hellman key exchange, a certificate for the Diffie-Hellman 
1513 public value supplied by the server in the key exchange) is placed in 
1514 the SH_SIG_CERT_DATA field.  Otherwise the SH_SIG_CERT_DATA field is 
1515 empty, and its length is zero.  
1517 When the client receives a SERVER_HELLO message, it checks whether the
1518 server has accepted a reconnection of an old session or is
1519 establishing a new session.  If the session is an old one, then the 
1520 client establishes the new CLIENT_WRITE_KEY, SERVER_WRITE_KEY, 
1521 CLIENT_MAC_KEY and SERVER_MAC_KEY according to the cipher-specific 
1522 rules described in section 6.1.4.  The client then checks the 
1523 contents of the RESPONSE_DATA field in the SERVER_HELLO message for 
1524 correctness.  If the response exactly matches the value calculated by 
1525 the client (following the procedures in sections 7.1 and 7.2), then 
1526 the handshake is finished, and the client proceeds to the 
1527 CLIENT_MASTER_KEY messsage, if necessary, or else begins sending 
1528 data; otherwise, a SERVER_AUTH_FAILED error occurs.
1530 If a new session is being initiated, the client records the chosen
1531 cipher, hash, key exchange and signature types, and the lists of
1532 alternate cipher and hash types and supported data message types.
1533 If certificate-based client authentication is required the client 
1534 checks the list of certificate types and certifiers to see if it has
1535 a satisfactory certificate; lack of one results in a SPECS_MISMATCH
1536 error.  If an acceptable quick encrypted master key was sent, the 
1537 client decrypts the master key for use in obtaining a MAC_KEY and 
1538 WRITE_KEY for each transmission direction as described in section 
1539 6.1.4.  Finally, if a non-empty RESPONSE_DATA field was included, then
1540 the client checks it for correctness.   If it exactly matches the 
1541 value calculated by the client (following the procedures in sections 
1542 7.1 and 7.2), then the client proceeds to the CLIENT_MASTER_KEY 
1543 handshake message (or, if the handshake is completed, begins sending 
1544 data); otherwise, a SERVER_AUTH_FAILED error occurs.
1547 5.2.3 CLIENT_MASTER_KEY 
1549 char CMK_ENCRYPTED_KEY_LENGTH[2]
1550 char CMK_RESPONSE_LENGTH[2]
1551 char CMK_SIG_CERT_LENGTH[4]
1552 char CMK_PUBLIC_VALUE_LENGTH[4]
1553 char CMK_ENCRYPTED_KEY_DATA[([0] << 8)|[1]]
1554 char CMK_RESPONSE_DATA[([0] << 8)|[1]]
1555 char CMK_SIG_CERT_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1556 char CMK_PUBLIC_VALUE_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1558 The client sends this message after receiving the SERVER_HELLO message
1559 from the server if not all the key exchanges and authentications (as
1560 indicated by the SH_AUTH_OPTIONS field) have yet been completed.
1562 If SH_ACCEPT_AUTH_SIG is set to one, and no other client 
1563 authentication option is both acceptable to the server and preferred
1564 by the client, then CMK_SIG_CERT_DATA contains a certified digital 
1565 signature public key acceptable to the server (as indicated by the 
1566 (SH_CERT_LIST, SH_CERTIFIER_LIST and SH_SIG_LIST lists), in the form 
1567 of a PUBLIC_VALUE field of type PV_CERTIFICATE (see section 6.1.2).  
1568 If SH_ACCEPT_AUTH_PASSWORD is set to one, then CMK_SIG_CERT_DATA 
1569 contains an identity indicator (such as an account identifier, or, in 
1570 the case of doubly certified Diffie-Hellman key exchange, a 
1571 certificate for the Diffie-Hellman public value supplied by the 
1572 server in the key exchange).  Otherwise the CMK_SIG_CERT_DATA field 
1573 is empty, and its length is zero.
1575 If SH_ACCEPT_KEY_EXCH_SEND is set to one, and an acceptable 
1576 encrypted master key has not already been sent in the 
1577 SH_QUICK_ENCRYPTED_KEY field of the SERVER_HELLO message, then 
1578 CMK_PUBLIC_VALUE_DATA contains an RSA key exchange public key or 
1579 Diffie-Hellman/FORTEZZA KEA public value.  If 
1580 SH_ACCEPT_AUTH_KEY_EXCH is set to one, and no other client 
1581 authentication option is both acceptable to the server and preferred
1582 by the client, then this public value is contained in a certificate 
1583 acceptable to the server (as indicated by the SH_EXCH_SPECS_DATA 
1584 field and the SH_CERT_LIST and SH_CERTIFIER_LIST lists); otherwise, 
1585 the value is uncertified.  If the SH_ACCEPT_KEY_EXCH_SEND flag is set 
1586 to zero, or if an acceptable encrypted master key was sent in the 
1587 SERVER_HELLO message, then CMK_PUBLIC_VALUE_DATA is empty.  
1589 If SH_ACCEDE_KEY_EXCH_RECEIVE is set to one, and if 
1590 SH_PUBLIC_VALUE_DATA was not empty (indicating that the contents of 
1591 the CH_QUICK_ENCRYPTED_KEY field in the CLIENT_HELLO message were 
1592 either absent or not acceptable), then CMK_ENCRYPTED_KEY contains an 
1593 RSA-encrypted master key (or randomly chosen Diffie-Hellman/FORTEZZA 
1594 KEA public value); see section 6.1.2.  If SH_ACCEDE_KEY_EXCH_RECEIVE 
1595 is set to one, or if SH_PUBLIC_VALUE_DATA is empty, then 
1596 CMK_ENCRYPTED_KEY is empty, with length zero.
1598 If all key exchanges are completed by the sending of the 
1599 CLIENT_MASTER_KEY message, and if one of the SH_ACCEPT_AUTH flags is 
1600 set to one, then the contents of the CMK_RESPONSE field are as 
1601 described in section 7.2; otherwise, this field is empty, and its 
1602 length is zero.
1604 Upon receiving a CLIENT_MASTER_KEY message, the server verifies the
1605 certificates and/or authentication response, if they are required; 
1606 errors in any of these result in a BAD_CERTIFICATE or 
1607 CLIENT_AUTH_FAILED error, respectively.  If an encrypted master key 
1608 was sent, the server decrypts the master key for use in obtaining a 
1609 MAC_KEY and WRITE_KEY for each transmission direction as described in
1610 section 6.1.4.  The server then proceeds to the SERVER_VERIFY 
1611 message, if necessary, or else begins transmitting data.
1614 5.2.4 SERVER_VERIFY 
1616 char SV_ENCRYPTED_KEY_LENGTH[2]
1617 char SV_RESPONSE_LENGTH[2]
1618 char SV_SIG_CERT_LENGTH[4]
1619 char SV_ENCRYPTED_KEY_DATA[([0] << 8)|[1]]
1620 char SV_RESPONSE_DATA[([0] << 8)|[1]]
1621 char SV_SIG_CERT_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1623 The server sends this message upon receiving a valid CLIENT_MASTER_KEY
1624 message from the client, if not all key exchanges and authentications
1625 have been completed.
1627 If SH_SIG_CERT_DATA was empty, and either SH_ACCEDE_AUTH_SIG or 
1628 SH_ACCEDE_AUTH_PASSWORD is set to one, then the SV_SIG_CERT_DATA 
1629 field must not be empty.  If SH_ACCEDE_AUTH_SIG is set to one, 
1630 then SV_SIG_CERT_DATA must contains a certified digital signature 
1631 public key acceptable to the client (as indicated by the 
1632 (CH_SIG_LIST, CH_CERT_LIST and CH_CERTIFIER_LIST lists), in the form
1633 of a PUBLIC_VALUE field of type PV_CERTIFICATE (see section 6.1.2).  
1634 If SH_ACCEPT_AUTH_PASSWORD is set to one, then SV_SIG_CERT_DATA 
1635 contains an identity indicator (such as an account identifier, or, in 
1636 the case of doubly certified Diffie-Hellman key exchange, a 
1637 certificate for the Diffie-Hellman public value supplied  by the 
1638 server in the key exchange).  Otherwise the SV_SIG_CERT_DATA field is 
1639 empty, and its length is zero.
1641 If SH_ACCEPT_KEY_EXCH_SEND is set to one, and if 
1642 CMK_PUBLIC_VALUE_DATA was not empty (indicating that the contents of 
1643 the SH_QUICK_ENCRYPTED_KEY field in the SERVER_HELLO message were 
1644 either absent or not acceptable), then SV_ENCRYPTED_KEY contains an 
1645 RSA-encrypted master key (or randomly chosen Diffie-Hellman/FORTEZZA 
1646 KEA public value).  The format of this field is described in section
1647 6.1.2.  If SH_ACCEPT_KEY_EXCH_SEND is set to one, or if 
1648 CMK_PUBLIC_VALUE is empty, then SV_ENCRYPTED_KEY is empty, with 
1649 length zero.
1651 If one of the SH_ACCEPT_AUTH flags is set to one, then the contents 
1652 of the SV_RESPONSE field are as described in section 7.2; otherwise, 
1653 this field is empty, and its length is zero.
1655 Upon receiving the SERVER_VERIFY message, the client verifies the
1656 certificates and/or authentication response, if they are required; 
1657 errors in any of these result in a BAD_CERTIFICATE or 
1658 SERVER_AUTH_FAILED error, respectively.  If an encrypted master key 
1659 was sent, the client decrypts the master key for use in obtaining a 
1660 MAC_KEY and WRITE_KEY for each transmission direction as described 
1661 in section 6.1.4.  The client then proceeds to the CLIENT_VERIFY 
1662 message, if necessary, or else begins transmitting data.
1665 5.2.5 CLIENT_VERIFY 
1667 char CV_RESPONSE_LENGTH[2]
1668 char CV_SIG_CERT_LENGTH[4]
1669 char CV_RESPONSE_DATA[([0] << 8)|[1]]
1670 char CV_SIG_CERT_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1672 The client sends this message upon receiving a valid SERVER_VERIFY
1673 message from the client, if client authentication has not been 
1674 completed.  This message is never necessary unless 
1675 SH_ACCEPT_KEY_EXCH_SEND was set to one.
1677 If either SH_ACCEDE_AUTH_SIG or SH_ACCEDE_AUTH_PASSWORD is set to one, 
1678 then the CV_SIG_CERT_DATA  field must not be empty.  If 
1679 SH_ACCEDE_AUTH_SIG is set to one, then CV_SIG_CERT_DATA must contain
1680 a certified digital signature public key acceptable to the server (as 
1681 indicated by the (SH_SIG_LIST, SH_CERT_LIST and SH_CERTIFIER_LIST 
1682 lists), in the form of a PUBLIC_VALUE field of type PV_CERTIFICATE 
1683 (see section 6.1.2).  If SH_ACCEPT_AUTH_PASSWORD is set to one, then 
1684 CV_SIG_CERT_DATA contains an identity indicator (such as an account 
1685 identifier, or, in the case of doubly certified Diffie-Hellman key 
1686 exchange, a certificate for the Diffie-Hellman public value supplied 
1687 by the server in the key exchange).  Otherwise the CV_SIG_CERT_DATA 
1688 field is empty, and its length is zero.  The contents of the 
1689 CV_RESPONSE field are as described in section 7.2.
1691 Upon receiving the CLIENT_VERIFY message, the server verifies the
1692 certificate, if required, and the authentication response; errors in 
1693 either of these result in a BAD_CERTIFICATE or CLIENT_AUTH_FAILED 
1694 error, respectively.  The server may then begin transmitting data.
1697 6.  Algorithm and Certificate Types
1699 6.1  Key exchange algorithms
1701 6.1.1  Key exchange algorithm types
1703 PCT version 2 permits the following key exchange types:
1705 PCT_EXCH_RSA_PKCS1
1706 PCT_EXCH_RSA_PKCS1_TOKEN_DES
1707 PCT_EXCH_RSA_PKCS1_TOKEN_DES3
1708 PCT_EXCH_RSA_PKCS1_TOKEN_RC2
1709 PCT_EXCH_RSA_PKCS1_TOKEN_RC4
1710 PCT_EXCH_DH_PKCS3
1711 PCT_EXCH_DH_PKCS3_TOKEN_DES
1712 PCT_EXCH_DH_PKCS3_TOKEN_DES3
1713 PCT_EXCH_FORTEZZA_TOKEN
1715 Note that the token-based key exchange types (those types whose 
1716 labels contain the word TOKEN) specify cipher as well (including, 
1717 implicitly, the FORTEZZA KEA key exchange type); if one of these is 
1718 chosen, then its choice of cipher overrides whatever choice of 
1719 cipher appears in the SH_CIPHER_SPECS_DATA field of the SERVER_HELLO 
1720 message.
1722 These key exchanges may use the (QUICK_)PUBLIC_VALUE field in any 
1723 handshake message, as well as the (QUICK_)ENCRYPTED_KEY field in the 
1724 subsequent handshake message.  The (first) public value sent is said 
1725 to be sent by (or previously obtained from) the "receiver", and the 
1726 second value by the "sender".  If the sender is the client, then the 
1727 key exchange is said to be "server-directed"; if the sender is the 
1728 server, then it is said to be "client-directed".
1731 6.1.2  Key exchange field formats
1733 The format of the (QUICK_)PUBLIC_VALUE field in any handshake 
1734 message in which it appears is as follows:
1736 char PV_PUBLIC_VALUE_TYPE[2]
1737 char PV_USER_INFO_LENGTH[4]
1738 char PV_PARAMETER_1_LENGTH[2]
1739 char PV_PARAMETER_2_LENGTH[2]
1740 char PV_USER_INFO_DATA[([0] << 24)|([1] << 16)|([2] << 8)|[3]]
1741 char PV_PARAMETER_1_DATA[([0] << 8)|[1]]
1742 char PV_PARAMETER_2_DATA[([0] << 8)|[1]]
1744 There are five permissible values for PUBLIC_VALUE_TYPE.  If 
1745 PV_TYPE_CERTIFICATE is specified, then a certificate of a type 
1746 acceptable to the key exchange sender (as indicated by the 
1747 CH_CERT_LIST in the CLIENT_HELLO message, or the SH_CERT_LIST list, 
1748 in the SERVER_HELLO message, as appropriate) appears in the
1749 PV_USER_INFO field, and both PV_PARAMETER fields are empty, with 
1750 length zero.  (The PV_PARAMETER_1_LENGTH field contains the
1751 two-byte certificate type code identifying the type of the 
1752 certificate sent; this field is not, however, interpreted as the 
1753 length of the PV_PARAMETER_1_LENGTH field, which is still empty;
1754 see section 6.4.)  If PV_TYPE_PKCS_TOKEN is specified, then the 
1755 PV_USER_INFO field contains a PKCS-format public key of the type 
1756 (RSA or Diffie-Hellman) indicated by the SH_EXCH_SPECS field in the 
1757 SERVER_HELLO message.  If PV_TYPE_KEA is specified, then the 
1758 PV_USER_INFO field contains a KEA public value exactly as generated 
1759 by the FORTEZZA token, and both PV_PARAMETER fields are empty, with 
1760 length zero.  If PV_TYPE_EPHEMERAL_RSA is specified, then 
1761 PV_USER_INFO contains the RSA modulus from the RSA public value 
1762 being sent; PV_PARAMETER_1 contains the associated RSA exponent; and 
1763 PV_PARAMETER_2 is empty, with length zero.  If PV_TYPE_EPHEMERAL_DH 
1764 is specified, then PV_USER_INFO contains the actual Diffie-Hellman 
1765 public value; PV_PARAMETER_1 contains the generator used to 
1766 construct it; and PV_PARAMETER_2 contains the prime modulus used to 
1767 construct it.  For both EPHEMERAL public value types, the values in 
1768 all fields are represented with the most significant byte first, and 
1769 in descending order, with the least significant byte last.
1771 The (QUICK_)ENCRYPTED_KEY_DATA field in any handshake message in
1772 which it appears has the following format:
1774 char EK_ENCRYPTED_KEY_1_LENGTH[2]
1775 char EK_ENCRYPTED_KEY_2_LENGTH[2]
1776 char EK_ENCRYPTED_KEY_3_LENGTH[2]
1777 char EK_KEY_ARG_LENGTH[2]
1778 char EK_ENCRYPTED_KEY_1_DATA[([0] << 8)|[1]]
1779 char EK_ENCRYPTED_KEY_2_DATA[([0] << 8)|[1]]
1780 char EK_ENCRYPTED_KEY_3_DATA[([0] << 8)|[1]]
1781 char EK_KEY_ARG_DATA[([0] << 8)|[1]]
1783 Details of the use of these subfields is described below.
1786 6.1.3  Master key exchange 
1788 For the PCT_EXCH_RSA_PKCS1 key exchange type, a MASTER_KEY value is
1789 generated by the sender, which should be random in the following
1790 strong sense: attackers must not be able to predict any of the bits in
1791 the MASTER_KEY.  It is recommended that the bits used be either truly
1792 random and uniformly generated (using some random physical process) or
1793 else generated using a cryptographically secure pseudorandom number
1794 generator, which was in turn seeded with a truly random and uniformly
1795 generated seed.  This MASTER_KEY value is encrypted using the 
1796 receiver's (possibly certified) public encryption key, as obtained 
1797 from the (QUICK_)PUBLIC_VALUE_DATA field of some handshake message 
1798 (or possibly some time earlier, if the key is certified).  The 
1799 encryption must follow the RSA PKCS#1 standard format (see [3]), 
1800 block type 2.  This encryption is sent to the server in the 
1801 EK_ENCRYPTED_KEY_1_DATA subfield in the (QUICK_)ENCRYPTED_KEY_DATA 
1802 field of the handshake message following the one containing the public
1803 value used (or the sender's first  handshake message, if the public 
1804 key was obtained at an earlier time).  The encrypted key is decrypted 
1805 by the receiver to obtain the MASTER_KEY.  If two key exchanges of 
1806 this type are performed (one in each direction), then the MASTER_KEY 
1807 value is simply the concatenation of the two values, in the order in 
1808 which they were sent.  Use of the ENCRYPTED_KEY_2_DATA subfield is
1809 described in section 6.1.5; the ENCRYPTED_KEY_3_DATA subfield is left
1810 empty, with length zero.
1812 For the PCT_EXCH_DH_PKCS3 key exchange type, a random private value x
1813 (generated in the same way as the MASTER_KEY above) and corresponding
1814 public value y are generated by the sender following RSA PKCS#3
1815 standard format (see [4]). The value y is then sent to the receiver 
1816 in the EK_ENCRYPTED_KEY_1_DATA subfield of the 
1817 (QUICK_)ENCRYPTED_KEY_DATA field of some handshake message.  The 
1818 sender's private value x, along with the (possibly certified) public 
1819 value y' included in the (QUICK_)PUBLIC_VALUE_DATA field of the 
1820 previous handshake message (or possibly obtained earlier), is used to 
1821 generate the MASTER_KEY.  The receiver uses its private value, x', 
1822 along with the y value sent by the sender, to obtain the same 
1823 MASTER_KEY value.  If two key exchanges of this type are performed 
1824 (one in each direction), then the MASTER_KEY is simply the 
1825 concatenation of the two values, in the order in which they were sent.
1826 Use of the ENCRYPTED_KEY_2_DATA subfield is described in section 
1827 6.1.5; the ENCRYPTED_KEY_3_DATA subfield is left empty, with length 
1828 zero.
1830 For the various TOKEN key exchange types, an encrypted 
1831 CLIENT_WRITE_KEY is contained in the ENCRYPTED_KEY_1_DATA subfield, 
1832 and an encrypted SERVER_WRITE_KEY is contained in the 
1833 ENCRYPTED_KEY_2_DATA subfield of the (QUICK_)ENCRYPTED_KEY field.
1834 The format of the data is defined by the token implementation.  For 
1835 example, in the case of FORTEZZA tokens, the ENCRYPTED_KEY_1_DATA 
1836 subfield (like the (QUICK_)PUBLIC_VALUE field sent before it, or 
1837 obtained earlier), contains a KEA public value generated by the token 
1838 for key exchange.  The result is a CLIENT_WRITE_KEY shared by sender 
1839 and receiver, which is used, along with the initialization vector in
1840 the accompanying EK_KEY_ARG_DATA field, if needed (see section 
1841 6.1.5), to encrypt the SERVER_WRITE_KEY sent in the 
1842 ENCRYPTED_KEY_2_DATA subfield.  In all token types, this shared 
1843 encryption key is used to encrypt a 128-bit MASTER_KEY value for 
1844 MAC_KEY derivation (as described below).  This MASTER_KEY is sent in 
1845 the EK_ENCYRYPTED_KEY_3_DATA field of the ENCRYPTED_KEY_DATA subfield 
1846 accompanying the encryption key material, and uses the initialization 
1847 vector in the accompanying EK_KEY_ARG_DATA field, if needed (see 
1848 section 6.1.5).
1850 The length of the MASTER_KEY depends on the key exchange type, and on
1851 how many key exchanges were performed.  It is 128 bits if one RSA 
1852 key exchange was performed, and 256 bits if two exchanges were 
1853 performed and the results concatenated.  For Diffie-Hellman key
1854 exchange, it is the length of the receiver's public value if one key
1855 exchange was performed, and the sum of the lengths of each receiver's 
1856 public value if two key exchanges were performed.  For token-based 
1857 key exchange types, the MASTER_KEY (which is only relevant for MAC 
1858 derivation) is 128 bits long.
1861 6.1.4  Key derivation
1863 The CLIENT_WRITE_KEY_SEED and SERVER_WRITE_KEY_SEED are used (for 
1864 non-token key exchange types) to compute the CLIENT_WRITE_KEY and
1865 SERVER_WRITE_KEY, respectively.  They are computed as follows:
1867 CLIENT_WRITE_KEY_SEED_i = Hash( i, "cw", MASTER_KEY, "cw"^i, 
1868 SH_CONNECTION_ID_DATA, "cw"^i, SH_SESSION_ID_DATA,"cw"^i, 
1869 CH_CHALLENGE_DATA, "cw"^i )
1871 SERVER_WRITE_KEY_SEED_i = Hash( i, "svw", MASTER_KEY, "svw"^i, 
1872 SH_CONNECTION_ID_DATA, "svw"^i, CH_CHALLENGE_DATA, "svw"^i )
1874 The function "Hash" is the one determined by the value of
1875 SH_HASH_SPECS_DATA (see section 5.2.2).  The value of i ranges from 
1876 1 to m, where m is the negotiated encryption key length (the value in 
1877 the third byte of the SH_CIPHER_SPECS_DATA field) divided by the hash 
1878 output length, in bits, rounded up to the nearest integer.  This 
1879 resulting string is then truncated if necessary to produce a string 
1880 of the correct length.
1882 When a token key exchange type is used, no WRITE_KEY_SEED values are
1883 computed, and the client and server WRITE_KEY values are defined by 
1884 the specific key exchange method for the token.  For example, the 
1885 encryption keys exchanged in the KEA key exchange process described 
1886 in section 6.1.3 become the CLIENT_WRITE_KEY and SERVER_WRITE_KEY for 
1887 the session.
1889 The CLIENT_MAC_KEY_SEED and SERVER_MAC_KEY_SEED are always computed 
1890 as follows:
1892 CLIENT_MAC_KEY_SEED_i = Hash( i, MASTER_KEY, "cmac"^i, 
1893 SH_CONNECTION_ID_DATA, "cmac"^i, SH_SESSION_ID_DATA, "cmac"^i, 
1894 CH_CHALLENGE_DATA, "cmac"^i )
1896 SERVER_MAC_KEY_SEED_i = Hash( i, MASTER_KEY, "svmac"^i, 
1897 SH_CONNECTION_ID_DATA, "svmac"^i, CH_CHALLENGE_DATA, "svmac"^i )
1899 The function "Hash" is the one determined by the value of
1900 SH_HASH_SPECS_DATA (see section 5.2.2).  The value of i ranges from
1901 1 through m, where m is the negotiated MAC key length (64 plus the 
1902 value in the fourth byte of the SH_CIPHER_SPECS_DATA field) divided 
1903 by the hash output length, in bits, rounded up to the nearest integer.
1904 The resulting string is then truncated if necessary to produce a 
1905 string (CLIENT_MAC_KEY_SEED or SERVER_MAC_KEY_SEED) of the correct 
1906 MAC_KEY length.  This string is then padded, by repeatedly appending 
1907 the byte PCT_MAC_KEY_PAD_BYTE , until it is the standard key length 
1908 for the hash function used in MAC computation (each hash function has 
1909 an associated standard MAC key length; see section 6.3).  This final 
1910 result is the MAC_KEY (CLIENT_MAC_KEY or SERVER_MAC_KEY).
1912 Note that tokens which are capable of deriving keys using "keyed
1913 hashes", as described above, are free to use the PCT_EXCH_RSA_PKCS1
1914 or PCT_EXCH_DH_PKCS3 key exchange type to exchange the MASTER_KEY,
1915 and then to derive the rest of the keys normally.  The TOKEN key
1916 exchange types are for tokens that cannot do such keyed-hash key
1917 derivation, and can only use an exchanged key for bulk encryption
1918 (of, for example, the MASTER_KEY value used for MAC_KEY derivation).
1919 Such tokens can exchange multiple keys by using an initially 
1920 exchanged encryption key to encrypt other keys, as described above.
1922 Key derivation for datagram records is somewhat different from normal
1923 key derivation.  In a datagram record, the necessary key information 
1924 is contained in the DG_ENCRYPTED_KEY field at the beginning of a 
1925 datagram record.  Its ENCRYPTED_KEY_1_DATA subfield contains a 
1926 16-byte random value, which should be cryptographically random in the 
1927 same sense as the MASTER_KEY (see section 6.1.3).  This value is used 
1928 to generate the new WRITE_KEY (in the case of non-token key exchange 
1929 types) and the MAC_KEY for the datagram.  These are generated by 
1930 computing a temporary MASTER_KEY as follows:
1932 TEMP_MASTER_KEY_i = Hash( i, MASTER_KEY, "tmk"^i, 
1933 ENCRYPTED_KEY_1_DATA )
1935 The function "Hash" is the one determined by the value of
1936 SH_HASH_SPECS_DATA in the most recent SERVER_HELLO handshake message
1937 for this connection (see section 5.2.2).  The value of i ranges from
1938 1 through m, where m is 128 divided by the hash output length, in 
1939 bits, rounded up to the nearest integer.  The resulting concatenated
1940 string is then truncated if necessary to produce a 128-bit string.  
1941 The new WRITE_KEYs (in the case of non-token key exchange types) and 
1942 new MAC_KEYs are then computed normally, except that MASTER_KEY is 
1943 replaced with TEMP_MASTER_KEY.
1945 If the current keys were generated using a token-type key exchange, 
1946 then the DG_ENCRYPTED_KEY_2_DATA subfield contains the key information 
1947 necessary to decrypt the datagram, encrypted in a manner that the 
1948 token can decrypt.  (Note that the token type must support this type 
1949 of context-independent encryption of keys; otherwise, this type of key 
1950 management message is not permitted.)  For example, when FORTEZZA 
1951 tokens are used, the DG_ENCRYPTED_KEY_2_DATA subfield contains the 
1952 WRITE_KEY encrypted, as a key, using the current WRITE_KEY.  
1954 The DG_KEY_ARG_DATA subfield contains an arbitrary initialization 
1955 vector, whose use is also explained in section 6.1.5, if a block 
1956 cipher is being used; otherwise, the field is empty, and its length is
1957 zero.
1959 6.1.5  Key expansion and cipher use
1961 Every cipher has an associated standard key length (see section 6.2).
1962 When a non-token key exchange type has been used, and encryption keys 
1963 of standard length for the specified cipher have been specified in 
1964 the SH_CIPHER_SPECS field, then the values of CLIENT_WRITE_KEY and 
1965 SERVER_WRITE_KEY are simply CLIENT_WRITE_KEY_SEED and 
1966 SERVER_WRITE_KEY_SEED, respectively, and the ENCRYPTED_KEY_2_DATA
1967 subfield accompanying the encrypted master key(s) is empty.  
1968 Otherwise, the EK_ENCRYPTED_KEY_2_DATA subfield(s) accompanying the 
1969 encrypted master key(s) in the key exchange(s) contain(s) random 
1970 "salt" for encryption key derivation.  (The salt should be 
1971 cryptographically random in the same sense as the MASTER_KEY; see 
1972 section 6.1.3.)  If only one key exchange occurred, then the salt data
1973 used (which we will call CLEAR_KEY_DATA) is just the value in the 
1974 ENCRYPTED_KEY_2_DATA subfield accompanying the encrypted master key; 
1975 if two key exchanges are used, then both EK_ENCRYPTED_KEY_2_DATA 
1976 fields accompanying the encrypted master keys contain this random 
1977 data, and CLEAR_KEY_DATA is their concatenation, in the order in which 
1978 they were sent.  When a key length is specified which is less than the 
1979 standard key length for the specified cipher, then keys of the 
1980 specified length are derived normally as described in section 6.1.4, 
1981 and then "expanded" to derive standard-length keys.  The expansion 
1982 proceeds as follows:
1984 1.  Assign to d the result of dividing the standard key length for 
1985 the cipher, in bits, by the output length of the hash function, in 
1986 bits, rounded up to the nearest integer.
1988 2.  Divide CLEAR_KEY_DATA sequentially into d equal subsegments.
1989 (Note that the length of the CLEAR_KEY_DATA field must therefore be a
1990 multiple of d bytes, and that no two of its d equal parts, when so
1991 divided, may be identical.)  Denote these subsegments CLEAR_KEY_DATA_1
1992 through CLEAR_KEY_DATA_d.
1994 3.  Compute the d hash values
1996 WRITE_KEY_i := Hash( i, "sl"^i, WRITE_KEY_SEED, "sl"^i, 
1997 CLEAR_KEY_DATA_i ).
1999 The function "Hash" is the one determined by the value of
2000 SH_HASH_SPECS_DATA.  The WRITE_KEY_SEED is the encryption key seed 
2001 value (CLIENT_WRITE_KEY_SEED or SERVER_WRITE_KEY_SEED) being expanded 
2002 to standard length. 
2004 4.  Concatenate WRITE_KEY_1 through WRITE_LENGTH_KEY_d, and then 
2005 truncate as necessary to produce the WRITE_KEY which is actually used 
2006 for encryption.
2008 The EK_KEY_ARG_DATA subfield accompanying the (last) encrypted master 
2009 key contains a random eight-byte value to be used as an initialization 
2010 vector (IV) for the first encrypted message when a block cipher (any 
2011 cipher except RC4) is used.  The IV for the first block encrypted in 
2012 any subsequent encrypted message is simply the last encrypted block 
2013 of the previous message.  The EK_KEY_ARG_DATA subfield is empty when 
2014 cipher type PCT_CIPHER_RC4 (or key exchange type 
2015 PCT_EXCH_RSA_PKCS1_TOKEN_RC4) is used.
2017 The use of a block cipher also may cause the data length to increase
2018 during encryption, because the ciphertext produced by block ciphers
2019 must always be an integer multiple of the cipher's block size.  Hence 
2020 when a block cipher is used, the length of the (fully or partially)
2021 encrypted record must be computed from the RH_RECORD_LENGTH value in 
2022 the record header.  ENCRYPTED_LENGTH, the length of the encrypted 
2023 portion of a record, is computed as the smallest multiple of the 
2024 cipher's block size that is at least ACTUAL_LENGTH, where 
2025 ACTUAL_LENGTH, the length of the encrypted data before encryption, is 
2026 computed as RH_RECORD_LENGTH minus the lengths of the unencrypted 
2027 portions of the record body (RH_RECORD_LENGTH - MAC_LENGTH - 
2028 DG_ENCRYPTED_KEY_LENGTH - 4 in the case of a datagram record, and 
2029 RH_RECORD_LENGTH - MAC_LENGTH - 2 in the case of other encrypted record 
2030 types).  If a block cipher is not used for encryption, then the length 
2031 of the encrypted data is unchanged by encryption, and the length of the 
2032 record body is therefore simply RH_RECORD_LENGTH.  Otherwise, the 
2033 length of the entire encrypted record body is ENCRYPTED_LENGTH + 
2034 DG_MAC_LENGTH + DG_ENCRYPTED_KEY_LENGTH + 2 in the case of datagram
2035 records, and ENCRYPTED_LENGTH + MAC_LENGTH for other encrypted 
2036 record types.
2039 6.2  Cipher Types
2041 PCT version 2 permits the following cipher types to be specified:
2043 PCT_CIPHER_DES
2044 PCT_CIPHER_IDEA
2045 PCT_CIPHER_RC2
2046 PCT_CIPHER_RC4
2047 PCT_CIPHER_DES_112
2048 PCT_CIPHER_DES_168
2050 Each of these types is denoted by a two-byte code, and is followed in
2051 CIPHER_SPECS_DATA fields by two one-byte length specifications, as
2052 described in section 5.2.1.  An encryption length specification of
2053 zero associated with any cipher denotes the choice of no encryption; a
2054 key exchange is performed in such cases solely to share keys for MAC
2055 computation.
2057 PCT_CIPHER_DES denotes DES (see [5]).  Its standard key length is 56
2058 bits.  PCT_CIPHER_DES_112 and PCT_CIPHER_DES_168 denote ciphers in
2059 which the input is first encrypted under DES with a first key, then
2060 "decrypted" under DES with a second key, then encrypted under DES with
2061 a third key.  For PCT_CIPHER_DES_112, the first and third keys are
2062 identical, and correspond to the initial 56 bits of the 112-bit
2063 WRITE_KEY.  The second key corresponds to the final 56 bits of the
2064 WRITE_KEY.  For PCT_CIPHER_DES_168, the three keys are distinct, and
2065 correspond to the first, second, and third 56-bit subsegments of the
2066 WRITE_KEY.  All three of these DES-based cipher types have 64-bit data
2067 blocks and are used with cipher block chaining (CBC).
2069 The standard key lengths for PCT_CIPHER_DES_112 and PCT_CIPHER_DES_168
2070 are 112 bits and 168 bits, respectively.  If a key length less than
2071 the standard length is specified for one of these ciphers (or for
2072 PCT_CIPHER_DES), then the WRITE_KEY_SEED is calculated, then expanded 
2073 to the standard length as described above.
2075 Note that before use, each 56-bit DES key must be "adjusted" to add
2076 eight parity bits to form an eight-byte DES key (see [5]).  Similarly,
2077 if the specified WRITE_KEY length is less than its corresponding
2078 standard length, then each WRITE_KEY_SEED is expanded to the standard
2079 length using CLEAR_KEY_DATA as described above, to produce one, two,
2080 or three keys of 56 bits each, which are then each "adjusted" by
2081 adding parity bits to form an eight-byte key.
2083 PCT_CIPHER_IDEA denotes the IDEA block cipher (see [6]), with 64-bit
2084 data blocks and cipher block chaining.  This cipher has a standard key
2085 length of 128 bits.
2087 PCT_CIPHER_RC2 denotes the RC2 block cipher, with 64-bit blocks and
2088 cipher block chaining.  Like IDEA, this cipher has a standard key
2089 length of 128 bits.
2091 PCT_CIPHER_RC4 denotes the RC4 stream cipher.  Like the IDEA and RC2
2092 block ciphers, this cipher has a standard key length of 128 bits.
2094 6.3  Hash Types
2096 PCT version 2 permits the following hash function types to be
2097 specified:
2099 PCT_HASH_MD5
2100 PCT_HASH_MD5_TRUNC_64
2101 PCT_HASH_SHA
2102 PCT_HASH_SHA_TRUNC_80
2104 The "truncated" hash types (PCT_HASH_MD5_TRUNC_64 and 
2105 PCT_HASH_SHA_TRUNC_80) are identical to their non-truncated versions
2106 (PCT_HASH_MD5 and PCT_HASH_SHA, respectively), with the following
2107 exception:  when used in the second ("outer") iteration of a MAC
2108 or authentication response, their output is truncated to half its 
2109 normal length.  (Hence the resulting MAC or authentication response 
2110 is also only half the normal length of the hash function's output.)
2111   
2112 PCT_HASH_MD5 denotes the MD5 hash function (see [7]), with 128-bit
2113 output.  (Hence PCT_HASH_MD5_TRUNC_64 has 64-bit output in the cases
2114 described above.)  PCT_HASH_SHA denotes the Secure Hash Algorithm 
2115 (see [8]), with 160-bit output.  (Hence PCT_HASH_SHA_TRUNC_80 has
2116 80-bit output in the cases described above.)  The standard MAC key length
2117 for all of the above hash functions is 512 bits.
2120 6.4  Certificate Types
2122 PCT version 2 permits the following certificate types to be specified:
2124 PCT_CERT_X509
2125 PCT_CERT_PKCS7
2126 PCT_CERT_PRIVATE
2128 THese types apply equally to the client's and server's certificates.
2129 PCT_CERT_X509 denotes a CCITT X.509 standard-conformant certificate 
2130 (see [10]).  PCT_CERT_PKCS7 denotes an RSA PKCS#7 standard-conformant 
2131 certificate (see [11]).  PCT_CERT_PRIVATE denotes a private format 
2132 understood by both the client and server; for instance, it may refer 
2133 to an account identifier using which a certificate lookup can be 
2134 performed on some agreed-upon certificate database.
2137 6.5  Signature Types
2139 PCT version 2 permits the following signature key types to be
2140 specified:
2142 PCT_SIG_RSA_MD5
2143 PCT_SIG_RSA_SHA
2144 PCT_SIG_DSA_SHA
2146 PCT_SIG_RSA_MD5 denotes the signature scheme consisting of hashing 
2147 the data to be signed using the MD5 hash algorithm, and then 
2148 performing an RSA private-key signature function (the inverse of RSA 
2149 encryption) on the result.  The signature must conform to RSA PKCS#1, 
2150 block type 1 (see [3]).  PCT_SIG_RSA_SHA denotes the same signature 
2151 scheme with SHA substituted for MD5.  PCT_SIG_DSA_SHA denotes the 
2152 signature scheme consisting of hashing the data to be signed using 
2153 the SHA hash algorithm, then computing a signature of the resulting 
2154 value using the Digital Signature Algorithm (DSA; see [12]).
2156 7.  Response and verification formats
2158 7.1  Prelude verification
2160 In order to guard against alteration of handshake messages before the
2161 master key has been exchanged (and MACs therefore made possible), a
2162 "prelude verification" is incorporated into every authentication 
2163 response.  Basically, the prelude verification is a cryptographic hash 
2164 of all handshake messages up to and including the one in which the 
2165 first authentication response is included (with the response field
2166 itself omitted).  
2168 Whichever message contains it, the prelude verification value is 
2169 computed as:
2171 VERIFY_PRELUDE_DATA = Hash( "vpd", CLIENT_HELLO, SERVER_HELLO , 
2172 CLIENT_MASTER_KEY, SERVER_VERIFY, CLIENT_VERIFY ) ).
2174 For the purposes of this computation, the handshake messages are 
2175 assumed to contain their associated message headers (i.e., their 
2176 HS_MSG_TYPE and HS_RECORD_FLAGS fields) and record headers.  Also, the 
2177 message in which the first non-empty RESPONSE_DATA field is sent is 
2178 assumed for this computation not to include its RESPONSE_DATA field 
2179 (although its correct length is included), and subsequent messages in 
2180 the handshake are assumed to be empty, zero-length values.
2182 The hash function used is the one specified in SH_HASH_SPECS_DATA.  
2183 Note that the client and server need only keep a "running hash" of all 
2184 the values passed in each handshake message as they appear, 
2185 terminating at the appropriate point to compute the value of 
2186 VERIFY_PRELUDE_DATA.
2189 7.2  Authentication responses
2191 The format of an authentication response depends on the type of 
2192 authentication required.  Because each type of authentication 
2193 response may be sent in one of several possible handshake messages
2194 (and by either party), the formats are described separately 
2195 here, and apply wherever the authentication response (RESPONSE_DATA)
2196 field is non-empty.
2198 In the case of key exchange-based authentication, the contents of the
2199 RESPONSE_DATA field are computed as follows:
2201 RESPONSE_DATA = Hash( MAC_KEY, Hash( "ke", VERIFY_PRELUDE_DATA ) ).
2203 In the case of digital signature-based authentication, the contents
2204 of the RESPONSE_DATA field are computed as follows: 
2206 RESPONSE_DATA = Signature( VERIFY_PRELUDE_DATA ).
2208 In the case of private "password"-based authentication, the contents
2209 of the RESPONSE_DATA field are computed as follows: 
2211 RESPONSE_DATA = Hash( MAC_KEY, Hash( "ppw", IDENTITY, PASSWORD, 
2212 VERIFY_PRELUDE_DATA ) ).
2214 Finally, in the case of authentication of a reconnection of a
2215 previously established session, the contents of the RESPONSE_DATA 
2216 field are computed as follows:
2218 RESPONSE_DATA = Hash( MAC_KEY, Hash( "recon", VERIFY_PRELUDE_DATA ) ).
2220 The computation of the VERIFY_PRELUDE_DATA value is described in 
2221 section 7.1.  The MAC_KEY is the CLIENT_MAC_KEY if the field is in 
2222 the CLIENT_MASTER_KEY or CLIENT_VERIFY message, and SERVER_MAC_KEY if 
2223 the field is in the SERVER_HELLO or SERVER_VERIFY message.  (The 
2224 origin of these MAC keys is described in section 6.1.4.)  
2225 The hash function choice used is determined by the 
2226 SH_HASH_SPECS_DATA field in this SERVER_HELLO message.  
2228 When a digital signature is used, the signature algorithm is 
2229 determined by the type of signature public key found in the 
2230 certificate passed in the SIG_CERT_DATA field accompanying the 
2231 RESPONSE_DATA field.  (Note that the signature algorithm may itself 
2232 require that a hash function be applied to the data being signed, 
2233 apart from the one used to compute the value in VERIFY_PRELUDE_DATA.)
2235 When a private password is used, IDENTITY is the identity of the
2236 client or server being authenticated (the contents of the 
2237 SIG_CERT_DATA field accompanying the response), and PASSWORD is the
2238 shared private key used in the authentication.  (Note that the same 
2239 shared password can in principle be used to authenticate either the 
2240 client to the server or vice versa, although not both simultaneously.)  
2241 In the case of a doubly certified Diffie-Hellman key exchange, the 
2242 password is simply the response sender's MAC key generated as a result 
2243 of the key exchange; it is considered equivalent to a password because 
2244 it does not change from connection to connection or from session to 
2245 session.
2248 7.3  Message Authentication Codes
2250 All PCT version 2 records which are encrypted also include a message 
2251 authentication code (MAC).  This value allows the receiver to verify
2252 that the record containing it has originated with the correct party,
2253 and has not been inserted or tampered with by someone else in 
2254 transit.
2256 The basic PCT MAC is in the form of a keyed hash of the encrypted
2257 data; that is, a MAC function based on a cryptographic hash function 
2258 is computed on the encrypted data and the sender's MAC key.  (The 
2259 derivation of MAC keys is described in section 6.1.)  The 
2260 cryptographic hash function used is determined by the code contained 
2261 in the SH_HASH_SPECS_DATA field in the most recent SERVER_HELLO 
2262 message sent during a successful handshake phase this session.  A 
2263 list of cryptographic hash functions permitted in PCT version 2, and 
2264 their associated codes and output lengths, is given in section 6.3.  
2265 The MAC is placed in the MAC_DATA field of the record in which it is
2266 found; its length (MAC_LENGTH) is the output length of the hash 
2267 function used.
2269 The MAC value is computed differently for datagram records and for
2270 other records.  In datagram records, the MAC is computed as follows:
2272 DG_MAC_DATA = Hash( MAC_KEY, Hash( RECORD_HEADER_DATA, 
2273 DG_ENCRYPTED_KEY_LENGTH, DG_ENCRYPTED_KEY_DATA, DG_ENCRYPTED_DATA ) )
2275 If the client is sending the record, then the MAC_KEY is the
2276 CLIENT_MAC_KEY; if the server is sending the record, then the MAC_KEY
2277 is the SERVER_MAC_KEY.  (The derivation of these keys is described 
2278 in section 6.1.)  RECORD_HEADER_DATA contains the four-byte contents 
2279 of the datagram record's record header, as described in section 4.2.1.  
2281 For other records containing MACs, the MAC is computed as follows:
2283 DT_MAC_DATA = Hash( MAC_KEY, Hash( DATA_TYPE, RECORD_HEADER_DATA, 
2284 DT_ENCRYPTED_DATA, SEQUENCE_NUMBER ) )
2286 If the client is sending the record, then the MAC_KEY is the
2287 CLIENT_MAC_KEY; if the server is sending the record, then the MAC_KEY
2288 is the SERVER_MAC_KEY.  (The details of the derivation of these keys
2289 are given in section 6.1.4.)  The value of DATA_TYPE is either the 
2290 empty string, or the four-byte ASCII string "pecd" if the record 
2291 contains pre-encrypted data (see section 4.4.1).  RECORD_HEADER_DATA 
2292 contains the four-byte contents of the record header described in 
2293 section 4.2.1.
2295 SEQUENCE_NUMBER is the value (represented in network byte order, or 
2296 "big endian" order) of a counter which is incremented by both the 
2297 sender and the receiver.  For each transmission direction, a pair 
2298 of counters is kept (one by the sender, one by the receiver).  
2299 Before the first (handshake) record is sent or received in a PCT 
2300 connection all sequence number counters are initialized to zero 
2301 (except in the case of a restarting connection with a token-based 
2302 exchange type, in which case the entire cipher state is preserved; 
2303 see section 5.2.2).  The sender's sender-to-receiver sequence 
2304 number is incremented after every record sent, and the receiver's 
2305 sender-to-receiver sequence number is incremented after every record 
2306 received.  (Note that this increment occurs regardless of whether or 
2307 not a record is, or has, a continuation record.)  Sequence number 
2308 counters are 32-bit unsigned quantities, and may not increment past 
2309 0xFFFFFFFF.  (See section 4.4.4.)
2311 MACs for pre-encrypted data can be (mostly) precomputed as well.
2312 The inner invocation of the hash function in the computation of 
2313 DT_MAC_DATA contains information that will be known at encryption 
2314 time, assuming non-datagram transmission and receiver support for 
2315 the hash function chosen by the sender for MAC calculation.  Hence, 
2316 the output of this inner invocation of the hash function can be 
2317 stored along with the pre-encrypted data, and the MAC calculated 
2318 efficiently at transmission time using the normal MAC_KEY, the 
2319 pre-calculated hash value, and the hash function used in the 
2320 pre-calculation.  A separate sequence number is used for MACs in 
2321 pre-encrypted data records until a KM_TYPE_RESUME_KEY message or 
2322 another KM_TYPE_FIXED_KEY message is sent and received.  This 
2323 sequence number begins at zero for the first data record sent and 
2324 received after the KM_TYPE_FIXED_KEY message, and is incremented for 
2325 each data record sent.  Replays of non-pre-encrypted data as 
2326 pre-encrypted data are prevented by the DATA_TYPE value "pecd", which
2327 cannot correspond to a record header prefix, in the MAC computation.
2329 In addition to the special sequence number for pre-encrypted data, 
2330 the normal sequence number for the same transmission direction 
2331 continues to increment normally as pre-encrypted data messages are 
2332 sent and received.  This original sequence number is returned to use,
2333 thus incremented, when the next key management message of type 
2334 KM_TYPE_RESUME_KEY or KM_TYPE_FIXED_KEY is sent and received.
2336 The receiver of an encrypted record containing a MAC uses the
2337 appropriate MAC_KEY and the received value of ENCRYPTED_DATA to 
2338 compute the correct value of MAC_DATA.  The computed MAC_DATA must 
2339 agree bit for bit with the transmitted MAC_DATA.  If the two are not 
2340 identical, then an INTEGRITY_CHECK_FAILED error occurs, and it is 
2341 recommended that the record be treated as though it had not been 
2342 received.  (See section 4.6.)
2345 8.  Constants
2347 Following is a list of constant values used in the PCT protocol
2348 version 1.
2350 8.1  Record and message type codes
2352 These codes are each placed in the record or message type fields of
2353 PCT records and messages.
2355 RT_HANDSHAKE                :=  0x0301
2356 RT_KEY_MGMT                 :=  0x0302
2357 RT_DATAGRAM                 :=  0x0303
2358 RT_ERROR                    :=  0x0304
2359 RT_USER_DATA                :=  0x0305
2360 RT_PCT_VERSION_1_CH         :=  0x0180
2361 RT_PCT_VERSION_1_SH         :=  0x0280
2362 RT_SSL_VERSION_2_CH         :=  0x0100
2363 RT_SSL_VERSION_3_CH         :=  0x00**
2364 RT_CD_RESERVED              :=  0x6364
2365 RT_KR_RESERVED              :=  0x6B72
2366 RT_ESCROW                   :=  0x0310
2368 HS_CLIENT_HELLO                 :=      0x0000
2369 HS_SERVER_HELLO                 :=      0x0001
2370 HS_CLIENT_MASTER_KEY            :=      0x0002
2371 HS_SERVER_VERIFY                :=      0x0003
2372 HS_CLIENT_VERIFY                :=      0x0004
2374 KM_TYPE_FIXED_KEY       :=  0x0001
2375 KM_TYPE_RESUME_KEY      :=  0x0002
2376 KM_TYPE_REDO_HANDSHAKE  :=  0x0003
2377 KM_TYPE_CLOSE_CONN      :=  0x0004
2379 DM_TYPE_USER_DATA       :=  0x0000
2381 PV_TYPE_CERTIFICATE     :=  0x0001
2382 PV_TYPE_PKCS_TOKEN      :=  0x0002
2383 PV_TYPE_KEA             :=  0x0003
2384 PV_TYPE_EPHEMERAL_RSA   :=  0x0004
2385 PV_TYPE_EPHEMERAL_DH    :=  0x0005
2387 EW_TYPE_MASTER_KEY      :=  0x0001
2388 EW_TYPE_WRITE_KEYS      :=  0x0002
2390 8.2  Specification Type Codes
2392 These are codes used to specify types of cipher, key exchange, hash
2393 function, certificate, and digital signature in the protocol.
2395 PCT_EXCH_RSA_PKCS1              :=      0x0001
2396 PCT_EXCH_RSA_PKCS1_TOKEN_DES    :=      0x0002
2397 PCT_EXCH_RSA_PKCS1_TOKEN_DES3   :=      0x0003
2398 PCT_EXCH_RSA_PKCS1_TOKEN_RC2    :=      0x0004
2399 PCT_EXCH_RSA_PKCS1_TOKEN_RC4    :=      0x0005
2400 PCT_EXCH_DH_PKCS3               :=      0x0006
2401 PCT_EXCH_DH_PKCS3_TOKEN_DES     :=      0x0007
2402 PCT_EXCH_DH_PKCS3_TOKEN_DES3    :=      0x0008
2403 PCT_EXCH_FORTEZZA_TOKEN         :=      0x0009
2405 PCT_CIPHER_DES          :=      0x0001
2406 PCT_CIPHER_IDEA         :=      0x0002
2407 PCT_CIPHER_RC2          :=      0x0003
2408 PCT_CIPHER_RC4          :=      0x0004
2409 PCT_CIPHER_DES_112      :=      0x0005
2410 PCT_CIPHER_DES_168      :=      0x0006
2412 PCT_HASH_MD5            :=      0x0001
2413 PCT_HASH_MD5_TRUNC_64   :=      0x0002
2414 PCT_HASH_SHA            :=      0x0003
2415 PCT_HASH_SHA_TRUNC_80   :=      0x0004
2416 PCT_HASH_DES_DM         :=      0x0005
2418 PCT_CERT_NONE           :=      0x0000
2419 PCT_CERT_X509           :=      0x0001
2420 PCT_CERT_PKCS7          :=      0x0002
2421 PCT_CERT_PRIVATE        :=        0x0003
2423 PCT_SIG_NONE            :=      0x0000
2424 PCT_SIG_RSA_MD5         :=      0x0001
2425 PCT_SIG_RSA_SHA         :=      0x0002
2426 PCT_SIG_DSA_SHA         :=      0x0003
2428 8.3  Error Codes
2430 These codes are used to identify errors, when they occur, in error
2431 messages.
2433 PCT_ERR_BAD_CERTIFICATE         :=      0x0001
2434 PCT_ERR_CLIENT_AUTH_FAILED      :=      0x0002
2435 PCT_ERR_ILLEGAL_MESSAGE         :=      0x0003
2436 PCT_ERR_INTEGRITY_CHECK_FAILED  :=      0x0004
2437 PCT_ERR_SERVER_AUTH_FAILED      :=      0x0005
2438 PCT_ERR_SPECS_MISMATCH          :=      0x0006
2439 PCT_ERR_CONN_BROKEN               :=        0x0007
2441 8.4  Miscellaneous Codes
2443 These include PCT version 1 escape type codes, version numbers, 
2444 and assorted constants associated with the PCT protocol.
2446 PCT_VERSION_V2                  :=      0x0002
2448 PCT_SESSION_ID_NONE             :=      0x00 (32 bytes of zeros)
2449 PCT_MAC_KEY_PAD_BYTE              :=        0x36
2451 PCT_ET_OOB_DATA                 :=      0x01
2452 PCT_ET_REDO_CONN                :=      0x02
2454 PCT_CH_OFFSET_V1                :=      0x000A
2455 PCT_CH_OFFSET_V2                :=      0x0018
2457 PCT_MAX_RECORD_LENGTH_2_BYTE_HEADER :=  32767
2458 PCT_MAX_RECORD_LENGTH_3_BYTE_HEADER :=  16383
2459 PCT_MAX_RECORD_LENGTH_V2            :=  32763
2462 9.  PCT version 1 compatibility
2464 PCT version 1 is a subset of PCT version 2; however, because of 
2465 differing formats, connections are identified as either using version
2466 1 or version 2.  The identification occurs during the handshake phase;
2467 a value of RT_PCT_VERSION_1_CH in the RH_RECORD_TYPE field of a
2468 record header indicates a PCT version 1 CLIENT_HELLO message, and a 
2469 value of RT_PCT_VERSION_1_SH in the RH_RECORD_TYPE field of a
2470 record header indicates a PCT version 1 SERVER_HELLO message.  If
2471 the former is the first record received in a connection, it signals
2472 to the receiver that it is expected to be a server in a PCT version
2473 1 connection.  The client and server then follow the PCT version 1 
2474 protocol for the remainder of the connection.  If the latter is the
2475 response received to a PCT version 2 CLIENT_HELLO message, it signals
2476 to the receiver that it is expected to be a client in a PCT version 1
2477 type connection.  The client and server then follow the PCT version
2478 1 protocol for the remainder of the connection.  The PCT version 1 
2479 protocol is specified in [2].
2481 Note that a PCT version 1 server implementation that correctly uses
2482 the CH_OFFSET field to determine the location of the data fields in
2483 the CLIENT_HELLO message can successfully interpret a PCT version 2
2484 CLIENT_HELLO message, and reply with a PCT version 1 SERVER_HELLO
2485 message.  However, reconnections in a continued session must maintain 
2486 the same version as the first connection for the session.
2488 Note also that a PCT version 1 record header may have a three-byte
2489 record length field; this format can always be recognized by a first 
2490 (most significant) bit of zero in the RH_RECORD_LENGTH field.
2493 10. Security Considerations
2495 This entire document is about security.
2498 References
2500 [1]  K. Hickman and T. Elgamal.  The SSL Protocol.  Internet-draft,
2501 June 1995.
2503 [2]  J. Benaloh, B. Lampson, D. Simon, T. Spies and B. Yee.  The 
2504 PCT Protocol.  Internet Draft, October 1995.
2506 [3]  RSA Laboratories, "PKCS #1: RSA Encryption Standard", Version
2507 1.5, November 1993.
2509 [4]  RSA Laboratories, "PKCS #3: "Diffie-Hellman Key-Agreement
2510 Standard", Version 1.4, November 1993.
2512 [5]  NBS FIPS PUB 46, "Data Encryption Standard", National Bureau of
2513 Standards, US Department of Commerce, Jan. 1977.
2515 [6]  X. Lai, "On the Design and Security of Block Ciphers", ETH Series
2516 in Information Processing, v. 1, Konstanz: Hartung-Gorre Verlag, 1992.
2518 [7]  R. Rivest, RFC 1321: "The MD5 Message Digest Algorithm", April
2519 1992.
2521 [8]  NIST FIPS PUB 180-1, "Secure Hash Standard", National Institute
2522 of Standards and Technology, US Department of Commerce, Apr. 1995.
2524 [9]  ISO/IEC 9797, "Data Cryptographic Techniques--Data Integrity
2525 Mechanism Using a Cryptographic Check Function Employing a Block
2526 Cipher Algorithm", 1989.
2528 [10]  CCITT. Recommendation X.509: "The Directory - Authentication
2529 Framework". 1988.
2531 [11]  RSA Laboratories, "PKCS #7: Cryptographic Message Syntax
2532 Standard", Version 1.5, November 1993.
2534 [12]  NIST FIPS PUB 186, "Digital Signature Standard", National
2535 Institute of Standards and Technology, US Department of Commerce, May
2536 1994.
2538 [13]  B. Schneier, "Applied Cryptography: Protocols, Algorithms, and
2539 Source Code in C", John Wiley & Sons, Inc., 1994.
2541 [14]  R.L. Rivest, A. Shamir, L. Adelman, "A Method for Obtaining
2542 Digital Signatures and Public Key Cryptosystems", MIT Laboratory for
2543 Computer Science and Department of Mathematics, S.L. Graham,
2544 R.L. Rivest ed. Communications of the ACM, February 1978 (Vol 21,
2545 No. 2) pp. 120-126.
2547 [15]  W. Diffie and M.E. Hellman, "New directions in Cryptography",
2548 IEEE Transactions on Information Theory, November 1976 (Vol. IT-22, 
2549 No. 6) pp. 644-654.
2552 Appendix A:  Escrow Support
2554 To facilitate the escrow of keys used in PCT connections (across 
2555 firewalls, for instance), we describe here a protocol which can be 
2556 used to encapsulate PCT records, passing the encryption keys for 
2557 the connection to a third party.  The protocol involves a distinct 
2558 escrow record type (RT_ESCROW).  An escrow record header has the 
2559 normal format, although all flags must always be set to zero.  The 
2560 record itself has the following format:
2562 char EW_ESCROW_TYPE[2]
2563 char EW_KEY_ID[16]
2564 char EW_KEY_1_LENGTH[2]
2565 char EW_KEY_2_LENGTH[2]
2566 char EW_KEY_1_DATA[([0] << 8)|[1]]
2567 char EW_KEY_2_DATA[([0] << 8)|[1]]
2568 char EW_ENCLOSED_RECORD_DATA[DATA_LENGTH]
2570 The two defined escrow record types are EW_TYPE_MASTER_KEY and
2571 EW_TYPE_WRITE_KEYS.  In the first type, EW_KEY_1_DATA contains the
2572 MASTER_KEY for this session, and EW_KEY_2_DATA is empty, with length
2573 zero.  In the second type, EW_KEY_1_DATA contains the sender's
2574 WRITE_KEY, and EW_KEY_2_DATA contains the non-sender's WRITE_KEY.
2575 These keys are encrypted using a key and format determined by the
2576 EW_KEY_ID field, which contains a 16-byte identifier for the key 
2577 used in the encryption.  The format of the encryption, and the key
2578 distribution method used, are left to the implementation's discretion.
2579 (For example, a PCT connection between sender and escrower can be used
2580 to exchange a symmetric key and associated identifier; alternatively,
2581 a fixed key-exchange RSA public key can be designated as the escrow
2582 key to be used.)  ENCLOSED_RECORD_DATA holds a normal PCT record, 
2583 whose length can be calculated from the escrow record's header and the
2584 lengths of the other fields in the escrow record.  (Note that the 
2585 normal length limit for an escrow record thus imposes a 
2586 shorter-than-normal limit on the size of the encapsulated record.)
2588 In a normal connection, the first record sent after all key exchanges
2589 in the handshake have completed might be encapsulated in an escrow 
2590 record; the key(s) so escrowed would be in effect until the next 
2591 escrow encapsulation.  For example, in a connection between a client
2592 and server each operating "behind" a firewall, the client and server
2593 would each encapsulate their last handshake message (or first data
2594 message) in an escrow record, and pass it to the firewall.  Each
2595 firewall would receive the encapsulated record, decrypt the 
2596 escrowed key(s), then pass the enclosed record through itself 
2597 unaltered.  Thereafter, each firewall would be able to read all 
2598 messages passing in each direction, until a change of key occurred 
2599 (prompted by, say, a key management message, which would presumably 
2600 have to be enclosed in another escrow record).
2602 The type of escrow used depends on the level of trust between client
2603 or server and escrower.  If a master key is escrowed, then the 
2604 escrower is capable of not only decrypting but also altering messages,
2605 recalculating MACs accordingly.  On the other hand, if only the
2606 encryption keys are escrowed, then the escrower is incapable not 
2607 only of altering messages, but also of verifying MACs (to determine, 
2608 for instance, if the correct encryption key was supplied).  
2609 Furthermore, since the shared master key is used to derive independent
2610 keys for datagram messages, escrow of only encryption keys makes
2611 incoming datagram traffic unreadable to the escrower.
2615 Patent Statement
2617 This version of the PCT protocol relies on the use of patented public
2618 key encryption technology for authentication and encryption. The
2619 Internet Standards Process as defined in RFC 1310 requires a written
2620 statement from the Patent holder that a license will be made
2621 available to applicants under reasonable terms and conditions prior
2622 to approving a specification as a Proposed, Draft or Internet
2623 Standard.
2625 See existing RFCs, including RFC 1170, that discuss known public key
2626 cryptography patents and licensing terms and conditions.
2628 The Internet Society, Internet Architecture Board, Internet
2629 Engineering Steering Group and the Corporation for National Research
2630 Initiatives take no position on the validity or scope of the patents
2631 and patent applications, nor on the appropriateness of the terms of
2632 the assurance. The Internet Society and other groups mentioned above
2633 have not made any determination as to any other intellectual property
2634 rights which may apply to the practice of this standard. Any further
2635 consideration of these matters is the user's own responsibility.
2637 Author's Address
2639 Daniel R. Simon
2640 Microsoft Corp.
2641 One Microsoft Way
2642 Redmond WA 98052
2645 pct@microsoft.com
2647 This Internet-Draft expires 10 October 1996.