home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-15 | 46.3 KB | 1,180 lines |
-
-
-
-
-
-
- Network Working Group D. Atkins
- Request for Comments: 1991 MIT
- Category: Informational W. Stallings
- Comp-Comm Consulting
- P. Zimmermann
- Boulder Software Engineering
- August 1996
-
-
- PGP Message Exchange Formats
-
- Status of This Memo
-
- This memo provides information for the Internet community. This memo
- does not specify an Internet standard of any kind. Distribution of
- this memo is unlimited.
-
- Table of Contents
-
- 1. Introduction............................................2
- 2. PGP Services............................................2
- 2.1 Digital signature.......................................3
- 2.2 Confidentiality.........................................3
- 2.3 Compression.............................................4
- 2.4 Radix-64 conversion.....................................4
- 2.4.1 ASCII Armor Formats.....................................5
- 3. Data Element Formats....................................6
- 3.1 Byte strings............................................6
- 3.2 Whole number fields.....................................7
- 3.3 Multiprecision fields...................................7
- 3.4 String fields...........................................8
- 3.5 Time fields.............................................8
- 4. Common Fields...........................................8
- 4.1 Packet structure fields.................................8
- 4.2 Number ID fields.......................................10
- 4.3 Version fields.........................................10
- 5. Packets................................................10
- 5.1 Overview...............................................10
- 5.2 General Packet Structure...............................11
- 5.2.1 Message component......................................11
- 5.2.2 Signature component....................................11
- 5.2.3 Session key component..................................11
- 6. PGP Packet Types.......................................12
- 6.1 Literal data packets...................................12
- 6.2 Signature packets......................................13
- 6.2.1 Message-digest-related fields..........................14
- 6.2.2 Public-key-related fields..............................15
- 6.2.3 RSA signatures.........................................16
-
-
-
- Atkins, et. al. Informational [Page 1]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6.2.4 Miscellaneous fields...................................16
- 6.3 Compressed data packets................................17
- 6.4 Conventional-key-encrypted data packets................17
- 6.4.1 Conventional-encryption type byte......................18
- 6.5 Public-key-encrypted packets...........................18
- 6.5.1 RSA-encrypted data encryption key (DEK)................19
- 6.6 Public-key Packets.....................................19
- 6.7 User ID packets........................................20
- 7. Transferable Public Keys...............................20
- 8. Acknowledgments........................................20
- 9. Security Considerations................................21
- 10. Authors' Addresses.....................................21
-
- 1. Introduction
-
- PGP (Pretty Good Privacy) uses a combination of public-key and
- conventional encryption to provide security services for electronic
- mail messages and data files. These services include confidentiality
- and digital signature. PGP is widely used throughout the global
- computer community. This document describes the format of "PGP
- files", i.e., messages that have been encrypted and/or signed with
- PGP.
-
- PGP was created by Philip Zimmermann and first released, in Version
- 1.0, in 1991. Subsequent versions have been designed and implemented
- by an all-volunteer collaborative effort under the design guidance of
- Philip Zimmermann. PGP and Pretty Good Privacy are trademarks of
- Philip Zimmermann.
-
- This document describes versions 2.x of PGP. Specifically, versions
- 2.6 and 2.7 conform to this specification. Version 2.3 conforms to
- this specification with minor differences.
-
- A new release of PGP, known as PGP 3.0, is anticipated in 1995. To
- the maximum extent possible, this version will be upwardly compatible
- with version 2.x. At a minimum, PGP 3.0 will be able to read messages
- and signatures produced by version 2.x.
-
- 2. PGP Services
-
- PGP provides four services related to the format of messages and data
- files: digital signature, confidentiality, compression, and radix-64
- conversion.
-
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 2]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 2.1 Digital signature
-
- The digital signature service involves the use of a hash code, or
- message digest, algorithm, and a public-key encryption algorithm. The
- sequence is as follows:
-
- -the sender creates a message
- -the sending PGP generates a hash code of the message
- -the sending PGP encrypts the hash code using the sender's private
- key
- -the encrypted hash code is prepended to the message
- -the receiving PGP decrypts the hash code using the sender's public
- key
- -the receiving PGP generates a new hash code for the received
- message and compares it to the decrypted hash code. If the two
- match, the message is accepted as authentic
-
- Although signatures normally are found attached to the message or
- file that they sign, this is not always the case: detached signatures
- are supported. A detached signature may be stored and transmitted
- separately from the message it signs. This is useful in several
- contexts. A user may wish to maintain a separate signature log of all
- messages sent or received. A detached signature of an executable
- program can detect subsequent virus infection. Finally, detached
- signatures can be used when more than one party must sign a document,
- such as a legal contract. Each person's signature is independent and
- therefore is applied only to the document. Otherwise, signatures
- would have to be nested, with the second signer signing both the
- document and the first signature, and so on.
-
- 2.2 Confidentiality
-
- PGP provides confidentiality by encrypting messages to be transmitted
- or data files to be stored locally using conventional encryption. In
- PGP, each conventional key is used only once. That is, a new key is
- generated as a random 128-bit number for each message. Since it is to
- be used only once, the session key is bound to the message and
- transmitted with it. To protect the key, it is encrypted with the
- receiver's public key. The sequence is as follows:
-
- -the sender creates a message
- -the sending PGP generates a random number to be used as a session
- key for this message only
- -the sending PGP encrypts the message using the session key
- -the session key is encrypted using the recipient's public key and
- prepended to the encrypted message
- -the receiving PGP decrypts the session key using the recipient's
- private key
-
-
-
- Atkins, et. al. Informational [Page 3]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- -the receiving PGP decrypts the message using the session key
-
- Both digital signature and confidentiality services may be applied to
- the same message. First, a signature is generated for the message and
- prepended to the message. Then, the message plus signature is
- encrypted using a conventional session key. Finally, the session key
- is encrypted using public-key encryption and prepended to the
- encrypted block.
-
- 2.3 Compression
-
- As a default, PGP compresses the message after applying the signature
- but before encryption.
-
- 2.4 Radix-64 conversion
-
- When PGP is used, usually part of the block to be transmitted is
- encrypted. If only the signature service is used, then the message
- digest is encrypted (with the sender's private key). If the
- confidentiality service is used, the message plus signature (if
- present) are encrypted (with a one-time conventional key). Thus, part
- or all of the resulting block consists of a stream of arbitrary 8-bit
- bytes. However, many electronic mail systems only permit the use of
- blocks consisting of ASCII text. To accommodate this restriction, PGP
- provides the service of converting the raw 8-bit binary stream to a
- stream of printable ASCII characters, called ASCII Armor.
-
- The scheme used for this purpose is radix-64 conversion. Each group
- of three bytes of binary data is mapped into 4 ASCII characters. This
- format also appends a CRC to detect transmission errors. This
- radix-64 conversion, also called Ascii Armor, is a wrapper around the
- binary PGP messages, and is used to protect the binary messages
- during transmission over non-binary channels, such as Internet Email.
-
- The following table defines the mapping. The characters used are the
- upper- and lower-case letters, the digits 0 through 9, and the
- characters + and /. The carriage-return and linefeed characters
- aren't used in the conversion, nor is the tab or any other character
- that might be altered by the mail system. The result is a text file
- that is "immune" to the modifications inflicted by mail systems.
-
-
-
-
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 4]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6-bit character 6-bit character 6-bit character 6-bit character
- value encoding value encoding value encoding value encoding
- 0 A 16 Q 32 g 48 w
- 1 B 17 R 33 h 49 x
- 2 C 18 S 34 i 50 y
- 3 D 19 T 35 j 51 z
- 4 E 20 U 36 k 52 0
- 5 F 21 V 37 l 53 1
- 6 G 22 W 38 m 54 2
- 7 H 23 X 39 n 55 3
- 8 I 24 Y 40 o 56 4
- 9 J 25 Z 41 p 57 5
- 1 K 26 a 42 q 58 6
- 11 L 27 b 43 r 59 7
- 12 M 28 c 44 s 60 8
- 13 N 29 d 45 t 61 9
- 14 O 30 e 46 u 62 +
- 15 P 31 f 47 v 63 /
- (pad) =
-
- It is possible to use PGP to convert any arbitrary file to ASCII
- Armor. When this is done, PGP tries to compress the data before it
- is converted to Radix-64.
-
- 2.4.1 ASCII Armor Formats
-
- When PGP encodes data into ASCII Armor, it puts specific headers
- around the data, so PGP can reconstruct the data at a future time.
- PGP tries to inform the user what kind of data is encoded in the
- ASCII armor through the use of the headers.
-
- ASCII Armor is created by concatenating the following data:
-
- - An Armor Headerline, appropriate for the type of data
- - Armor Headers
- - A blank line
- - The ASCII-Armored data
- - An Armor Checksum
- - The Armor Tail (which depends on the Armor Headerline).
-
- An Armor Headerline is composed by taking the appropriate headerline
- text surrounded by five (5) dashes (-) on either side of the
- headerline text. The headerline text is chosen based upon the type
- of data that is being encoded in Armor, and how it is being encoded.
- Headerline texts include the following strings:
-
- BEGIN PGP MESSAGE -- used for signed, encrypted, or compressed files
- BEGIN PGP PUBLIC KEY BLOCK -- used for transferring public keys
-
-
-
- Atkins, et. al. Informational [Page 5]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- BEGIN PGP MESSAGE, PART X/Y -- used for multi-part messages, where
- the armor is split amongst Y files,
- and this is the Xth file out of Y.
-
- The Armor Headers are pairs of strings that can give the user or the
- receiving PGP program some information about how to decode or use the
- message. The Armor Headers are a part of the armor, not a part of
- the message, and hence should not be used to convey any important
- information, since they can be changed in transport.
-
- The format of an Armor Header is that of a key-value pair, the
- encoding of RFC-822 headers. PGP should consider improperly
- formatted Armor Headers to be corruption of the ASCII Armor. Unknown
- Keys should be reported to the user, but so long as the RFC-822
- formatting is correct, PGP should continue to process the message.
- Currently defined Armor Header Keys include "Version" and "Comment",
- which define the PGP Version used to encode the message and a user-
- defined comment.
-
- The Armor Checksum is a 24-bit CRC converted to four bytes of radix-
- 64 encoding, prepending an equal-sign (=) to the four-byte code. The
- CRC is computed by using the generator 0x864CFB and an initialization
- of 0xB704CE. The accumulation is done on the data before it is
- converted to radix-64, rather than on the converted data. For more
- information on CRC functions, the reader is asked to look at chapter
- 19 of the book "C Programmer's Guide to Serial Communications," by
- Joe Campbell.
-
- The Armor Tail is composed in the same manner as the Armor
- Headerline, except the string "BEGIN" is replaced by the string
- "END".
-
- 3. Data Element Formats
-
- 3.1 Byte strings
-
- The objects considered in this document are all "byte strings." A
- byte string is a finite sequence of bytes. The concatenation of byte
- string X of length M with byte string Y of length N is a byte string
- Z of length M + N; the first M bytes of Z are the bytes of X in the
- same order, and the remaining N bytes of Z are the bytes of Y in the
- same order.
-
- Literal byte strings are written from left to right, with pairs of
- hex nibbles separated by spaces, enclosed by angle brackets: for
- instance, <05 ff 07> is a byte string of length 3 whose bytes have
- numeric values 5, 255, and 7 in that order. All numbers in this
- document outside angle brackets are written in decimal.
-
-
-
- Atkins, et. al. Informational [Page 6]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- The byte string of length 0 is called "empty" and written <>.
-
- 3.2 Whole number fields
-
- Purpose. A whole number field can represent any nonnegative integer,
- in a format where the field length is known in advance.
-
- Definition. A whole number field is any byte string. It is stored
- in radix-256 MSB-first format. This means that a whole number field
- of length N with bytes b_0 b_1 ... b_{N-2} b_{N-1} in that order has
- value
-
- b_0 * 256^{N-1} + b_1 * 256^{N-2} + ... + b_{N-2} * 256 + b_{N-1}.
-
- Examples. The byte string <00 0D 64 11 00 00> is a valid whole
- number field with value 57513410560. The byte string <FF> is a valid
- whole number field with value 255. The byte string <00 00> is a
- valid whole number field with value 0. The empty byte string <> is a
- valid whole number field with value 0.
-
- 3.3 Multiprecision fields
-
- Purpose. A multiprecision field can represent any nonnegative
- integer which is not too large. The field length need not be known
- in advance. Multiprecision fields are designed to waste very little
- space: a small integer uses a short field.
-
- Definition. A multiprecision field is the concatenation of two
- fields:
-
- (a) a whole number field of length 2, with value B;
- (b) a whole number field, with value V.
-
- Field (b) is of length [(B+7)/8], i.e., the greatest integer which is
- no larger than (B+7)/8. The value of the multiprecision field is
- defined to be V. V must be between 2^{B-1} and 2^B - 1 inclusive.
- In other words B must be exactly the number of significant bits in V.
-
- Some implementations may limit the possible range of B. The
- implementor must document which values of B are allowed by an
- implementation.
-
- Examples. The byte string <00 00> is a valid multiprecision integer
- with value 0. The byte string <00 03 05> is a valid multiprecision
- field with value 5. The byte strings <00 03 85> and <00 00 00> are
- not valid multiprecision fields. The former is invalild because <85>
- has 8 significant bits, not 3; the latter is invalid because the
- second field has too many bytes of data given the value of the first
-
-
-
- Atkins, et. al. Informational [Page 7]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- field. The byte string <00 09 01 ff> is a valid multiprecision field
- with value 511. The byte string <01 00 80 00 00 00 00 00 00 00 00 00
- 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07> is
- a valid multiprecision field with value 2^255 + 7.
-
- 3.4 String fields
-
- Purpose. A string field represents any sequence of bytes of length
- between 0 and 255 inclusive. The length need not be known in
- advance. By convention, the content of a string field is normally
- interpreted as ASCII codes when it is displayed.
-
- Definition. A string field is the concatenation of the following:
-
- (a) a whole number field of length 1, with value L;
- (b) a byte string of length L.
-
- The content of the string field is defined to be field (b).
-
- Examples: <05 48 45 4c 4c 4f> is a valid string field which would
- normally be displayed as the string HELLO. <00> is a valid string
- field which would normally be displayed as the empty string. <01 00>
- is a valid string field.
-
- 3.5 Time fields
-
- Purpose. A time field represents the number of seconds elapsed since
- 1970 Jan 1 00:00:00 GMT. It is compatible with the usual
- representation of times under UNIX.
-
- Definition. A time field is a whole number field of length 4, with
- value V. The time represented by the time field is the one-second
- interval beginning V seconds after 1970 Jan 1 00:00:00 GMT.
-
- 4. Common Fields
-
- This section defines fields found in more than one packet format.
-
- 4.1 Packet structure fields
-
- Purpose. The packet structure field distinguishes between different
- types of packets, and indicates the length of packets.
-
- Definition. A packet structure field is a byte string of length 1,
- 2, 3, or 5. Its first byte is the cipher type byte (CTB), with bits
- labeled 76543210, 7 the most significant bit and 0 the least
- significant bit. As indicated below the length of the packet
- structure field is determined by the CTB.
-
-
-
- Atkins, et. al. Informational [Page 8]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- CTB bits 76 have values listed in the following table:
-
- 10 - normal CTB
- 11 - reserved for future experimental work
- all others - reserved
-
- CTB bits 5432, the "packet type bits", have values listed in the
- following table:
-
- 0001 - public-key-encrypted packet
- 0010 - signature packet
- 0101 - secret-key certificate packet
- 0110 - public-key certificate packet
- 1000 - compressed data packet
- 1001 - conventional-key-encrypted packet
- 1011 - literal data packet
- 1100 - keyring trust packet
- 1101 - user id packet
- 1110 - comment packet (*)
- all others - reserved
-
- CTB bits 10, the "packet-length length bits", have values listed in
- the following table:
-
- 00 - 1-byte packet-length field
- 01 - 2-byte packet-length field
- 10 - 4-byte packet-length field
- 11 - no packet length supplied, unknown packet length
-
- As indicated in this table, depending on the packet-length length
- bits, the remaining 1, 2, 4, or 0 bytes of the packet structure field
- are a "packet-length field". The packet-length field is a whole
- number field. The value of the packet-length field is defined to be
- the value of the whole number field.
-
- A value of 11 is currently used in one place: on compressed data.
- That is, a compressed data block currently looks like <A3 01 . . .>,
- where <A3>, binary 10 1000 11, is an indefinite-length packet. The
- proper interpretation is "until the end of the enclosing structure",
- although it should never appear outermost (where the enclosing
- structure is a file).
-
- Options marked with an asterisk (*) are not implemented yet; PGP
- 2.6.2 will never output this packet type.
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 9]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 4.2 Number ID fields
-
- Purpose. The ID of a whole number is its 64 least significant bits.
- The ID is a convenient way to distinguish between large numbers such
- as keys, without having to transmit the number itself. Thus, a number
- that may be hundreds or thousands of decimal digits in length can be
- identified with a 64-bit identifier. Two keys may have the same ID by
- chance or by malice; although the probability that two large keys
- chosen at random would have the same ID is extremely small.
-
- Definition. A number ID field is a whole number field of length 8.
- The value of the number ID field is defined to be the value of the
- whole number field.
-
- 4.3 Version fields
-
- Many packet types include a version number as the first byte of the
- body. The format and meaning of the body depend on the version
- number. More versions of packets, with new version numbers, may be
- defined in the future. An implementation need not support every
- version of each packet type. However, the implementor must document
- which versions of each packet type are supported by the
- implementation.
-
- A version number of 2 or 3 is currently allowed for each packet
- format. New versions will probably be numbered sequentially up from
- 3. For backwards compatibility, implementations will usually be
- expected to support version N of a packet whenever they support
- version N+1. Version 255 may be used for experimental purposes.
-
- 5. Packets
-
- 5.1 Overview
-
- A packet is a digital envelope with data inside. A PGP file, by
- definition, is the concatenation of one or more packets. In addition,
- one or more of the packets in a file may be subject to a
- transformation using encryption, compression, or radix-64 conversion.
-
- A packet is the concatenation of the following:
-
- (a) a packet structure field;
- (b) a byte string of some length N.
-
- Byte string (b) is called the "body" of the packet. The value of the
- packet-length field inside the packet structure field (a) must equal
- N, the length of the body.
-
-
-
-
- Atkins, et. al. Informational [Page 10]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- Other characteristics of the packet are determined by the type of the
- packet. See the definitions of particular packet types for further
- details. The CTB packet-type bits inside the packet structure always
- indicate the packet type.
-
- Note that packets may be nested: one digital envelope may be placed
- inside another. For example, a conventional-key-encrypted packet
- contains a disguised packet, which in turn might be a compressed data
- packet.
-
- 5.2 General packet structure
-
- A pgp file consists of three components: a message component, a
- signature (optional), and a session key component (optional).
-
- 5.2.1 Message component
-
- The message component includes the actual data to be stored or
- transmitted as well as a header that includes control information
- generated by PGP. The message component consists of a single literal
- data packet.
-
- 5.2.2 Signature component
-
- The signature component is the signature of the message component,
- formed using a hash code of the message component and the public key
- of the sending PGP entity. The signature component consists of a
- single signature packet.
-
- If the default option of compression is chosen, then the block
- consisting of the literal data packet and the signature packet is
- compressed to form a compressed data packet.
-
- 5.2.3 Session key component
-
- The session key component includes the encrypted session key and the
- identifier of the recipients public key used by the sender to encrypt
- the session key. The session key component consists of a single
- public-key-encrypted packet for each recipient of the message.
-
- If compression has been used, then conventional encryption is applied
- to the compressed data packet formed from the compression of the
- signature packet and the literal data packet. Otherwise, conventional
- encryption is applied to the block consisting of the signature packet
- and the literal data packet. In either case, the cyphertext is
- referred to as a conventional-key-encrypted data packet.
-
-
-
-
-
- Atkins, et. al. Informational [Page 11]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6. PGP Packet Types
-
- PGP includes the following types of packets:
-
- -literal data packet
- -signature packet
- -compressed data packet
- -conventional-key-encrypted data packet
- -public-key-encrypted packet
- -public-key packet
- -User ID packet
-
- 6.1 Literal data packets
-
- Purpose. A literal data packet is the lowest level of contents of a
- digital envelope. The data inside a literal data packet is not
- subject to any further interpretation by PGP.
-
- Definition. A literal data packet is the concatenation of the
- following fields:
-
- (a) a packet structure field;
- (b) a byte, giving a mode;
- (c) a string field, giving a filename;
- (d) a time field;
- (e) a byte string of literal data.
-
-
- Fields (b), (c), and (d) suggest how the data should be written to a
- file. Byte (b) is either ASCII b <62>, for binary, or ASCII t <74>,
- for text. Byte (b) may also take on the value ASCII 1, indicating a
- machine-local conversion. It is not defined how PGP will convert this
- across platforms.
-
- Field (c) suggests a filename. Field (d) should be the time at which
- the file was last modified, or the time at which the data packet was
- created, or 0.
-
- Note that only field (e) of a literal data packet is fed to a
- message-digest function for the formation of a signature. The
- exclusion of the other fields ensures that detached signatures are
- exactly the same as attached signatures prefixed to the message.
- Detached signatures are calculated on a separate file that has none
- of the literal data packet header fields.
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 12]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6.2 Signature packet
-
- Purpose. Signatures are attached to data, in such a way that only
- one entity, called the "writer," can create the signature. The
- writer must first create a "public key" K and distribute it. The
- writer keeps certain private data related to K. Only someone
- cooperating with the writer can sign data using K, enveloping the
- data in a signature packet (also known as a private-key-encrypted
- packet). Anyone can look through the glass in the envelope and
- verify that the signature was attached to the data using K. If the
- data is altered in any way then the verification will fail.
-
- Signatures have different meanings. For example, a signature might
- mean "I wrote this document," or "I received this document." A
- signature packet includes a "classification" which expresses its
- meaning.
-
- Definition. A signature packet, version 2 or 3, is the concatenation
- of the following fields:
-
- (a) packet structure field (2, 3, or 5 bytes);
- (b) version number = 2 or 3 (1 byte);
- (c) length of following material included in MD calculation
- (1 byte, always the value 5);
- (d1) signature classification (1 byte);
- (d2) signature time stamp (4 bytes);
- (e) key ID for key used for singing (8 bytes);
- (f) public-key-cryptosystem (PKC) type (1 byte);
- (g) message digest algorithm type (1 byte);
- (h) first two bytes of the MD output, used as a checksum
- (2 bytes);
- (i) a byte string of encrypted data holding the RSA-signed digest.
-
- The message digest is taken of the bytes of the file, followed by the
- bytes of field (d). It was originally intended that the length (c)
- could vary, but now it seems that it will alwaye remain a constant
- value of 5, and that is the only value that will be accepted. Thus,
- only the fields (d1) and (d2) will be hashed into the signature along
- with the main message.
-
-
-
-
-
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 13]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6.2.1 Message-digest-related fields
-
- The message digest algorithm is specified by the message digest (MD)
- number of field (g). The following MD numbers are currently defined:
-
- 1 - MD5 (output length 16)
- 255 - experimental
-
- More MD numbers may be defined in the future. An implementation need
- not support every MD number. The implementor must document the MD
- numbers understood by an implementation.
-
- A message digest algorithm reads a byte string of any length, and
- writes a byte string of some fixed length, as indicated in the table
- above.
-
- The input to the message digest algorithm is the concatenation of
- some "primary input" and some "appended input."
-
- The appended input is specified by field (c), which gives a number of
- bytes to be taken from the following fields: (d1), (d2), and so on.
- The current implementation uses the value 5 for this number, for
- fields (d1) and (d2). Any field not included in the appended input
- is not "signed" by field (i).
-
- The primary input is determined by the signature classification byte
- (d1). Byte (d1) is one of the following hex numbers, with these
- meanings:
-
- <00> - document signature, binary image ("I wrote this document")
- <01> - document signature, canonical text ("I wrote this document")
- <10> - public key packet and user ID packet, generic certification
- ("I think this key was created by this user, but I won't say
- how sure I am")
- <11> - public key packet and user ID packet, persona certification
- ("This key was created by someone who has told me that he is
- this user") (#)
- <12> - public key packet and user ID packet, casual certification
- ("This key was created by someone who I believe, after casual
- verification, to be this user") (#)
- <13> - public key packet and user ID packet, positive certification
- ("This key was created by someone who I believe, after
- heavy-duty identification such as picture ID, to be this
- user") (#)
- <20> - public key packet, key compromise ("This is my key, and I
- have revoked it")
-
-
-
-
-
- Atkins, et. al. Informational [Page 14]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- <30> - public key packet and user ID packet, revocation ("I retract
- all my previous statements that this key is related to this
- user") (*)
- <40> - time stamping ("I saw this document") (*)
-
- More classification numbers may be defined in the future to handle
- other meanings of signatures, but only the above numbers may be used
- with version 2 or version 3 of a signature packet. It should be
- noted that PGP 2.6.2 has not implemented the packets marked with an
- asterisk (*), and the packets marked with a hash (#) are not output
- by PGP 2.6.2.
-
- Signature packets are used in two different contexts. One (signature
- type <00> or <01>) is of text (either the contents of a literal
- packet or a separate file), while types <10> through <1F> appear only
- in key files, after the keys and user IDs that they sign. Type <20>
- appears in key files, after the keys that it signs, and type <30>
- also appears after a key/userid combination. Type <40> is intended to
- be a signature of a signature, as a notary seal on a signed document.
-
- The output of the message digest algorithm is a message digest, or
- hash code. Field i contains the cyphertext produced by encrypting the
- message digest with the signer's private key. Field h contains the
- first two bytes of the unencrypted message digest. This enables the
- recipient to determine if the correct public key was used to decrypt
- the message digest for authentication, by comparing this plaintext
- copy of the first two byes with the first two bytes of the decrypted
- digest. These two bytes also serve as a 16-bit frame check sequence
- for the message.
-
- 6.2.2 Public-key-related fields
-
- The message digest is signed by encrypting it using the writer's
- private key. Field (e) is the ID of the corresponding public key.
-
- The public-key-encryption algorithm is specified by the public-key
- cryptosystem (PKC) number of field (f). The following PKC numbers are
- currently defined:
-
- 1 - RSA
- 255 - experimental
-
- More PKC numbers may be defined in the future. An implementation
- need not support every PKC number. The implementor must document the
- PKC numbers understood by an implementation.
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 15]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- A PKC number identifies both a public-key encryption method and a
- signature method. Both of these methods are fully defined as part of
- the definition of the PKC number. Some cryptosystems are usable only
- for encryption, or only for signatures; if any such PKC numbers are
- defined in the future, they will be marked appropriately.
-
- 6.2.3 RSA signatures
-
- An RSA-signed byte string is a multiprecision field that is formed by
- taking the message digest and filling in an ASN structure, and then
- encrypting the whole byte string in the RSA key of the signer.
-
- PGP versions 2.3 and later encode the MD into a PKCS-format signature
- string, which has the following format:
-
- MSB . . . LSB
- 0 1 <FF>(n bytes) 0 ASN(18 bytes) MD(16 bytes)
-
- See RFC1423 for an explanation of the meaning of the ASN string. It
- is the following 18 byte long hex value:
-
- <30 20 30 0C 06 08 2A 86 48 86 F7 0D 02 05 05 00 04 10>
-
- Enough bytes of <FF> padding are added to make the length of this
- whole string equal to the number of bytes in the modulus.
-
- 6.2.4 Miscellaneous fields
-
- The timestamp field (d2) is analogous to the date box next to a
- signature box on a form. It represents a time which is typically
- close to the moment that the signature packet was created. However,
- this is not a requirement. Users may choose to date their signatures
- as they wish, just as they do now in handwritten signatures.
-
- If an application requires the creation of trusted timestamps on
- signatures, a detached signature certificate with an untrusted
- timestamp may be submitted to a trusted timestamp notary service to
- sign the signature packet with another signature packet, creating a
- signature of a signature. The notary's signature's timestamp could
- be used as the trusted "legal" time of the original signature.
-
-
-
-
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 16]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6.3 Compressed data packets
-
- Purpose. A compressed data packet is an envelope which safely
- squeezes its contents into a small space.
-
- Definition. A compressed data packet is the concatenation of the
- following fields:
-
- (a) a packet structure field;
- (b) a byte, giving a compression type;
- (c) a byte string of compressed data.
-
- Byte string (c) is a packet which may be decompressed using the
- algorithm identified in byte (b). Typically, the data that are
- compressed consist of a literal data packet or a signature packet
- concatenated to a literal data packet.
-
- A compression type selects a compression algorithm for use in
- compressed data packets. The following compression numbers are
- currently defined.
-
- 1 - ZIP
- 255 - experimental
-
- More compression numbers may be defined in the future. An
- implementation need not support every MD number. The implementor
- must document the compression numbers understood by an
- implementation.
-
- 6.4 Conventional-key-encrypted data packets
-
- Purpose. A conventional-key-encrypted data packet is formed by
- encrypting a block of data with a conventional encryption algorithm
- using a one-time session key. Typically, the block to be encrypted is
- a compressed data packet.
-
- Definition. A conventional-key-encrypted data packet is the
- concatenation of the following fields:
-
- (a) a packet structure field;
- (b) a byte string of encrypted data.
-
- The plaintext or compressed plaintext that is encrypted to form field
- (b) is first prepended with 64 bits of random data plus 16 "key
- check" bits. The random prefix serves to start off the cipher
- feedback chaining process with 64 bits of random material; this
- serves the same function as an initialization vector (IV) for a
- cipher-block-chaining encryption scheme. The key check prefix is
-
-
-
- Atkins, et. al. Informational [Page 17]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- equal to the last 16 bits of the random prefix. During decryption, a
- comparison is made to see if the 7th and 8th byte of the decrypted
- material match the 9th and 10th bytes. If so, then the conventional
- session key used for decryption is assumed to be correct.
-
- 6.4.1 Conventional-encryption type byte
-
- Purpose. The conventional-encryption type byte is used to determine
- what conventional encryption algorithm is in use. The algorithm type
- byte will also define how long the conventional encryption key is,
- based upon the algorithm in use.
-
- Definition. A conventional-encryption type byte is a single byte
- which defines the algorithm in use. It is possible that the
- algorithm in use may require further definition, such as key-length.
- It is up to the implementor to document the supported key-length in
- such a situation.
-
- 1 - IDEA (16-byte key)
- 255 - experimental
-
- 6.5 Public-key-encrypted packets
-
- Purpose. The public-key-encrypted packet is the format for the
- session key component of a message. The purpose of this packet is to
- convey the one-time session key used to encrypt the message to the
- recipient in a secure manner. This is done by encrypting the session
- key with the recipient's public key, so that only the recipient can
- recover the session key.
-
- Definition. A public-key-encrypted packet, version 2 or 3, is the
- concatenation of the following fields:
-
- (a) a packet structure field;
- (b) a byte, giving the version number, 2 or 3;
- (c) a number ID field, giving the ID of a key;
- (d) a byte, giving a PKC number;
- (e) a byte string of encrypted data (DEK).
-
- Byte string (e) represents the value of the session key, encrypted
- using the reader's public key K, under the cryptosystem identified in
- byte (d).
-
- The value of field (c) is the ID of K.
-
- Note that the packet does not actually identify K: two keys may have
- the same ID, by chance or by malice. Normally it will be obvious
- from the context which key K was used to create the packet. But
-
-
-
- Atkins, et. al. Informational [Page 18]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- sometimes it is not obvious. In this case field (c) is useful. If,
- for example, a reader has created several keys, and receives a
- message, then he should attempt to decrypt the message only with the
- key whose ID matches the value of field (c). If he has accidentally
- generated two keys with the same ID, then he must attempt to decrypt
- the message with both keys, but this case is highly unlikely to occur
- by chance.
-
- 6.5.1 RSA-encrypted data encryption key (DEK)
-
- The Data Encryption Key (DEK) is a multiprecision field which stores
- an RSA encrypted byte string. The byte string is a PKCS encoding of
- the secret key used the encrypt the message, with random padding for
- each Public-Key encrypted packet.
-
- PGP version 2.3 and later encode the DEK into an MPI using the
- following format:
-
- MSB . . . LSB
- 0 2 RND(n bytes) 0 ALG(1 byte) DEK(k bytes) CSUM(2 bytes)
-
- ALG refers to the algorithm byte for the secret key algorithm used to
- encrypt the data packet. The DEK is the actual Data Encryption Key,
- and its size is dependent upon the encryption algorithm defined by
- ALG. For the IDEA encryption algorithm, type byte 1, the DEK is 16
- bytes long. CSUM is a 16-bit checksum of the DEK, used to determine
- that the correct Private key was used to decrypt this packet. The
- checksum is computed by the 16-bit sum of the bytes in the DEK. RND
- is random padding to expand the byte to fill the size of the RSA
- Public Key that is used to encrypt the whole byte.
-
- 6.6 Public Key Packet
-
- Purpose. A public key packet defines an RSA public key.
-
- Definition. A public key packet is the concatenation of the
- following fields:
-
- (a) packet structure field (2 or 3 bytes);
- (b) version number = 2 or 3 (1 byte);;
- (c) time stamp of key creation (4 bytes);
- (d) validity period in days (0 means forever) (2 bytes);
- (e) public-key-cryptosystem (PKC) type (1 byte);
- (f) MPI of RSA public modulus n;
- (g) MPI of RSA public encryption exponent e.
-
- The validity period is always set to 0.
-
-
-
-
- Atkins, et. al. Informational [Page 19]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 6.7 User ID Packet
-
- Purpose. A user ID packet identifies a user and is associated with a
- public or private key.
-
- Definition. A user ID packet is the concatenation of the following
- fields:
-
- (a) packet structure field (2 bytes);
- (b) User ID string.
-
- The User ID string may be any string of printable ASCII characters.
- However, since the purpose of this packet is to uniquely identify an
- individual, the usual practice is for the User ID string to consist
- of the user's name followed by an e-mail address for that user, the
- latter enclosed in angle brackets.
-
- 7. Transferable Public Keys
-
- Public keys may transferred between PGP users. The essential elements
- of a transferable public key are
-
- (a) One public key packet;
- (b) One or more user ID packets;
- (c) Zero or more signature packets
-
- The public key packet occurs first. Each of the following user ID
- packets provides the identity of the owner of this public key. If
- there are multiple user ID packets, this corresponds to multiple
- means of identifying the same unique individual user; for example, a
- user may enjoy the use of more than one e-mail address, and construct
- a user ID packet for each one. Immediately following each user ID
- packet, there are zero or more signature packets. Each signature
- packet is calculated on the immediately preceding user ID packet and
- the initial public key packet. The signature serves to certify the
- corresponding public key and user ID. In effect, the signer is
- testifying to his or her belief that this public key belongs to the
- user identified by this user ID.
-
- 8. Acknowledgments
-
- Philip Zimmermann is the creator of PGP 1.0, which is the precursor
- of PGP 2.x. Major parts of later versions of PGP have been
- implemented by an international collaborative effort involving a
- large number of contributors, under the design guidance of Philip
- Zimmermann.
-
-
-
-
-
- Atkins, et. al. Informational [Page 20]
-
- RFC 1991 PGP Message Exchange Formats August 1996
-
-
- 9. Security Considerations
-
- Security issues are discussed throughout this memo.
-
- 10. Authors' Addresses
-
- Derek Atkins
- 12 Rindge Ave. #1R
- Cambridge, MA
-
- Phone: +1 617 868-4469
- EMail: warlord@MIT.EDU
-
-
- William Stallings
- Comp-Comm Consulting
- P. O. Box 2405
- Brewster, MA 02631
-
- EMail: stallings@ACM.org
-
-
- Philip Zimmermann
- Boulder Software Engineering
- 3021 Eleventh Street
- Boulder, Colorado 80304 USA
-
- Phone: +1-303-541-0140
- EMail: prz@acm.org
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Atkins, et. al. Informational [Page 21]
-
-