|
|
1.1 ! root 1: Internal Data Structures Used by PGP 2.2 (3 Mar 93) ! 2: ========================================================== ! 3: ! 4: This appendix describes the data structures used internally by Pretty ! 5: Good Privacy (PGP), the RSA public key cryptography application. The ! 6: intended audience mainly includes software engineers trying to port ! 7: PGP to other hardware environments or trying to implement other PGP- ! 8: compatible cryptography products. ! 9: ! 10: ! 11: Byte Order ! 12: ---------- ! 13: ! 14: All integer data used by PGP is externally stored most significant ! 15: byte (MSB) first, regardless of the byte order used internally by the ! 16: host CPU architecture. This is for cross-compatibility of messages ! 17: and keys between hosts. This covers multiprecision RSA integers, bit ! 18: count prefix fields, byte count prefix fields, checksums, key IDs, and ! 19: timestamps. ! 20: ! 21: The MSB-first byte order for external packet representation was ! 22: chosen only because many other crypto standards use it. ! 23: ! 24: ! 25: Multiprecision Integers ! 26: ----------------------- ! 27: ! 28: RSA arithmetic involves a lot of multiprecision integers, often ! 29: having hundreds of bits of precision. PGP externally stores a ! 30: multiprecision integer (MPI) with a 16-bit prefix that gives the ! 31: number of significant bits in the integer that follows. The integer ! 32: that follows this bitcount field is stored in the usual byte order, ! 33: with the MSB padded with zero bits if the bitcount is not a multiple ! 34: of 8. The bitcount always specifies the exact number of significant ! 35: bits. For example, the integer value 5 would be stored as these ! 36: three bytes: ! 37: ! 38: 00 03 05 ! 39: ! 40: An MPI with a value of zero is simply stored with the 16-bit bitcount ! 41: prefix field containing a 0, with no value bytes following it. ! 42: ! 43: ! 44: ! 45: Key ID ! 46: ------ ! 47: ! 48: Some packets use a "key ID" field. The key ID is the least ! 49: significant 64 bits of the RSA public modulus that was involved in ! 50: creating the packet. For all practical purposes it unique to each ! 51: RSA public key. ! 52: ! 53: ! 54: User ID ! 55: ------- ! 56: ! 57: Some packets contain a "user ID", which is an ASCII string that ! 58: contains the user's name. Unlike a C string, the user ID has a ! 59: length byte at the beginning that has a byte count of the rest of the ! 60: string. This length byte does not include itself in the count. ! 61: ! 62: ! 63: Timestamp ! 64: --------- ! 65: ! 66: Some packets contain a timestamp, which is a 32-bit unsigned integer ! 67: of the number of seconds elapsed since 1970 Jan 1 00:00:00 GMT. This ! 68: is the standard format used by Unix timestamps. It spans 136 years. ! 69: ! 70: ! 71: ! 72: Cipher Type Byte (CTB) ! 73: ---------------------- ! 74: ! 75: Many of these data structures begin with a Cipher Type Byte (CTB), ! 76: which specifies the type of data structure that follows it. The CTB ! 77: bit fields have the following meaning (bit 0 is the LSB, bit 7 is the ! 78: MSB): ! 79: ! 80: Bit 7: Always 1, which designates this as a CTB ! 81: Bit 6: Reserved. ! 82: Bits 5-2: CTB type field, specifies type of packet that follows ! 83: 0001 - public-key-encrypted packet ! 84: 0010 - secret-key-encrypted (signature) packet ! 85: 0101 - Secret key certificate ! 86: 0110 - Public key certificate ! 87: 1000 - Compressed data packet ! 88: 1001 - Conventional-Key-Encrypted data ! 89: 1011 - Raw literal plaintext data, with filename and mode ! 90: 1100 - Keyring trust packet ! 91: 1101 - User ID packet, associated with public or secret key ! 92: 1110 - Comment packet ! 93: Other CTB packet types are unimplemented. ! 94: Bits 1-0: Length-of-length field: ! 95: 00 - 1 byte packet length field follows CTB ! 96: 01 - 2 byte packet length field follows CTB ! 97: 10 - 4 byte packet length field follows CTB ! 98: 11 - no length field follows CTB, unknown packet length. ! 99: The 8-, 16-, or 32-bit packet length field after the CTB ! 100: gives the length in bytes of the rest of the packet, not ! 101: counting the CTB and the packet length field. ! 102: ! 103: ! 104: ! 105: RSA public-key-encrypted packet ! 106: ------------------------------- ! 107: ! 108: Offset Length Meaning ! 109: 0 1 CTB for RSA public-key-encrypted packet ! 110: 1 2 16-bit (or maybe 8-bit) length of packet ! 111: 3 1 Version byte (=2). May affect rest of fields that follow. ! 112: 4 8 64-bit Key ID ! 113: 12 1 Algorithm byte for RSA (=1 for RSA). ! 114: --Algorithm byte affects field definitions that follow. ! 115: 13 ? RSA-encrypted integer, encrypted conventional key ! 116: packet. (MPI with bitcount prefix) ! 117: ! 118: The conventionally-encrypted ciphertext packet begins right after the ! 119: RSA public-key-encrypted packet that contains the conventional key. ! 120: ! 121: ! 122: ! 123: Signature packet ! 124: ---------------- ! 125: ! 126: Offset Length Meaning ! 127: 0 1 CTB for secret-key-encrypted (signed) packet ! 128: 1 2 16-bit (or maybe 8-bit) length of packet ! 129: 3 1 Version byte (=2). May affect rest of fields that follow. ! 130: ! 131: 4 1 Length of following material that is implicitly included ! 132: in MD calculation. ! 133: 5 1 Signature classification field (see below). ! 134: Implicitly append this to message for MD calculation. ! 135: 6 4 32-bit timestamp of when signature was made. ! 136: Implicitly append this to message for MD calculation. ! 137: 10 2 Validity period, in number of DAYS (0 means forever) ! 138: Implicitly append this to message for MD calculation. ! 139: ! 140: 12 8 64-bit Key ID ! 141: 20 1 Algorithm byte for public key scheme (RSA=0x01). ! 142: --Algorithm byte affects field definitions that follow. ! 143: 21 1 Algorithm byte for message digest (MD5=0x01). ! 144: 22 2 First 2 bytes of the Message Digest inside the ! 145: RSA-encrypted integer, to help us figure out if we ! 146: used the right RSA key to check the signature. ! 147: 24 ? RSA-encrypted integer, encrypted message digest ! 148: (MPI with bitcount prefix). ! 149: ! 150: If the plaintext that was signed is included in the same file as the ! 151: signature packet, it begins right after the RSA secret-key-signed ! 152: packet that contains the message digest. The plaintext has a ! 153: "literal" CTB prefix. ! 154: ! 155: The validity period field is generally only used for certifying keys. ! 156: It should be set to 0 otherwise, for regular message signatures. It ! 157: may be useful for PEM-like capabilities in future versions of PGP. ! 158: PGP 2.0 will always just set it to 0, and will ignore it. ! 159: ! 160: There is a length field that specifies how many bytes of material is ! 161: implicitly included in the MD calculation. If this length field is ! 162: 5, it means the following 1-byte classification field and the 4-byte ! 163: timestamp are included in the signature packet. If the length byte ! 164: is 7, it means the 2-byte validity period is also included. In PGP ! 165: 2.0, we are using a length field of 5 for the material to be included ! 166: in the MD calculation, so the validity period is unused and ! 167: unincluded, and is assumed to be zeroed. This makes the whole ! 168: signature certificate shorter. ! 169: ! 170: The signature classification field describes what kind of ! 171: signature certificate this is. There are various hex values: ! 172: 00 - Signature of a message or document, binary image. ! 173: 01 - Signature of a message or document, canonical text. ! 174: 10 - Key certification, generic. Only version of key ! 175: certification supported by PGP 2.0. ! 176: Material signed is public key pkt and User ID pkt. ! 177: 11 - Key certification, persona. No attempt made at all ! 178: to identify the user with a real name. ! 179: Material signed is public key pkt and User ID pkt. ! 180: 12 - Key certification, casual identification. Some ! 181: casual attempt made to identify user with his name. ! 182: Material signed is public key pkt and User ID pkt. ! 183: 13 - Key certification, positive ID. Heavy-duty ! 184: identification efforts, photo ID, direct contact ! 185: with personal friend, etc. ! 186: Material signed is public key pkt and User ID pkt. ! 187: 20 - Key compromise. User signs his own compromise ! 188: certificate. Independent of user ID associations. ! 189: Material signed is public key pkt ONLY. ! 190: 30 - Key/userid revocation. User can sign his own ! 191: revocation to dissolve an association between a key ! 192: and a user ID, or certifier may revoke his previous ! 193: certification of this key/userid pair. ! 194: Material signed is public key pkt and User ID pkt. ! 195: 40 - Timestamping a signature certificate made by someone ! 196: else. Can be used to apply trusted timestamp, and ! 197: log it in notary's log. Signature of a signature. ! 198: ! 199: When a signature is made to certify a key/UserID pair, it is computed ! 200: across two packets-- the public key packet, and the separate User ID ! 201: packet. See below. ! 202: ! 203: The packet headers (CTB and length fields) for the public key packet ! 204: and the user ID packet are both omitted from the signature ! 205: calculation for a key certification. ! 206: ! 207: A key compromise certificate may be issued by someone to revoke his ! 208: own key when his secret key is known to be compromised. If that ! 209: happens, a user would sign his own key compromise certificate with ! 210: the very key that is being revoked. A key revoked by its own ! 211: signature means that this key should never be used or trusted again, ! 212: in any form, associated with any user ID. A key compromise ! 213: certificate issued by the keyholder shall take precedence over any ! 214: other key certifications made by anyone else for that key. A key ! 215: compromise signed by someone other than the key holder is invalid. ! 216: ! 217: Note that a key compromise certificate just includes the key packet ! 218: in its signature calculation, because it kills the whole key without ! 219: regard to any userid associations. It isn't tied to any particular ! 220: userid association. It should be inserted after the key packet, ! 221: before the first userid packet. ! 222: ! 223: When a key compromise certificate is submitted to PGP, PGP will place ! 224: it on the public keyring. A key compromise certificate is always ! 225: accompanied in its travels by the public key and userIDs it affects. ! 226: If the affected key is NOT already on the keyring, the compromise ! 227: certificate (and its key and user ID) is merely added to the keyring ! 228: anywhere. If the affected key IS already on the keyring, the ! 229: compromise certificate is inserted after the affected key packet. ! 230: This assumes that the actual key packet is identical to the one ! 231: already on the key ring, so no duplicate key packet is needed. ! 232: If a key has been revoked, PGP will not allow its use to encipher any ! 233: messages, and if an incoming signature uses it, PGP will display a ! 234: stern warning that this key has been revoked. ! 235: ! 236: NOTE: Key/userid revocation certificates WILL NOT BE SUPPORTED in ! 237: this version of PGP. But if we ever get around to supporting them, ! 238: here are some ideas on how they should work... ! 239: ! 240: A key/userid revocation certificate may be issued by someone to ! 241: dissolve the association between his own key and a user ID. He would ! 242: sign it with the very key that is being revoked. A key/userid ! 243: revocation certificate issued by the keyholder shall take precedence ! 244: over any other key certifications made by anyone else for that ! 245: key/userid pair. Also, a third party certifier may revoke his own ! 246: previous certification of this key/userid pair by issuing a ! 247: key/userid revocation certificate. Such a revocation should not ! 248: affect the certifications by other third parties for this same ! 249: key/userid pair. ! 250: ! 251: When a key/userid revocation certificate is submitted to PGP, PGP ! 252: will place it on the public keyring. A key/userid revocation ! 253: certificate is always accompanied in its travels by the public key it ! 254: affects (the key packet and user ID packet precedes the revocation ! 255: certificate). If the affected key is NOT already on the keyring, the ! 256: revocation certificate (and its key and user ID) is merely added to ! 257: the keyring anywhere. If the affected key IS already on the keyring, ! 258: the revocation certificate is integrated in with the key's other ! 259: certificates as though it were just another key certification. This ! 260: assumes that the actual key packet is identical to the one already on ! 261: the key ring, so no duplicate key packet is needed. ! 262: ! 263: ! 264: ! 265: Message digest "packet" ! 266: ----------------------- ! 267: ! 268: The Message digest has no CTB packet framing. It is stored ! 269: packetless and naked, with padding, encrypted inside the MPI in the ! 270: Signature packet. ! 271: ! 272: PGP versions 2.3 and later use a new format for encoding the message ! 273: digest into the MPI in the signature packet, a format which is ! 274: compatible with RFC1425 (formerly RFC1115). This format is accepted ! 275: but not written by version 2.2. The older format used by versions 2.2 ! 276: and earlier is also accepted by version 2.3. ! 277: ! 278: PGP versions 2.2 and earlier encode the MD into the MPI as follows: ! 279: ! 280: MSB . . . LSB ! 281: ! 282: 0 1 MD(16 bytes) 0 FF(n bytes) 1 ! 283: ! 284: Enough bytes of FF padding are added to make the length of this ! 285: whole string equal to the number of bytes in the modulus. ! 286: ! 287: PGP versions 2.3 and later encode the MD into the MPI as follows: ! 288: ! 289: MSB . . . LSB ! 290: ! 291: 0 1 FF(n bytes) 0 ASN(18 bytes) MD(16 bytes) ! 292: ! 293: See RFC1423 for an explanation of the meaning of the ASN string. ! 294: It is the following 18 byte long hex value: ! 295: ! 296: 3020300c06082a864886f70d020505000410 ! 297: ! 298: Enough bytes of FF padding are added to make the length of this ! 299: whole string equal to the number of bytes in the modulus. ! 300: ! 301: All this mainly affects the preblock() and postunblock() functions in ! 302: mpiio.c. ! 303: ! 304: There is no checksum included. We do include a copy of 2 bytes of the ! 305: MD in the outer packet to help determine if we used the correct RSA ! 306: key. ! 307: ! 308: ! 309: Conventional Data Encryption Key (DEK) "packet" ! 310: ----------------------------------------------- ! 311: ! 312: The DEK has no CTB packet framing. The DEK is stored packetless and ! 313: naked, with padding, encrypted inside the MPI in the RSA ! 314: public-key-encrypted packet. ! 315: ! 316: PGP versions 2.3 and later use a new format for encoding the message ! 317: digest into the MPI in the signature packet. (This format is not ! 318: presently based on any RFCs due to the use of the IDEA encryption ! 319: system.) This format is accepted but not written by version 2.2. The ! 320: older format used by versions 2.2 and earlier is also accepted by ! 321: version 2.3. ! 322: ! 323: PGP versions 2.2 and earlier encode the MD into the MPI as follows: ! 324: ! 325: MSB . . . LSB ! 326: ! 327: 0 1 DEK(16 bytes) CSUM(2 bytes) 0 RND(n bytes) 2 ! 328: ! 329: CSUM refers to a 16-bit checksum appended to the high end of the DEK. ! 330: RND is a string of NONZERO pseudorandom bytes, enough to make the length ! 331: of this whole string equal to the number of bytes in the modulus. ! 332: ! 333: PGP versions 2.3 and later encode the MD into the MPI as follows: ! 334: ! 335: MSB . . . LSB ! 336: ! 337: 0 2 RND(n bytes) 0 1 DEK(16 bytes) CSUM(2 bytes) ! 338: ! 339: CSUM refers to a 16-bit checksum appended to the high end of the DEK. ! 340: RND is a string of NONZERO pseudorandom bytes, enough to make the length ! 341: of this whole string equal to the number of bytes in the modulus. ! 342: ! 343: For both versions, the 16-bit checksum is computed on the rest of the ! 344: bytes in the DEK key material, and does not include any other material ! 345: in the calculation. In the above MSB-first representation, the ! 346: checksum is also stored MSB-first. The checksum is there to help us ! 347: determine if we used the right RSA secret key for decryption. ! 348: ! 349: All this mainly affects the preblock() and postunblock() functions in ! 350: mpiio.c. ! 351: ! 352: ! 353: ! 354: Conventional Key Encrypted data packet ! 355: -------------------------------------- ! 356: ! 357: Offset Length Meaning ! 358: 0 1 CTB for Conventional-Key-Encrypted data packet ! 359: 1 4 32-bit (or maybe 16-bit) length of packet ! 360: 5 ? conventionally-encrypted data. ! 361: plaintext has 64 bits of random data prepended, ! 362: plus 16 bits prepended for "key check" purposes ! 363: ! 364: The decrypted ciphertext may contain a compressed data packet or a ! 365: literal plaintext packet. ! 366: ! 367: After decrypting the conventionally-encrypted data, a special 8-byte ! 368: random prefix and 2 "key check" bytes are revealed. The random ! 369: prefix and key check prefix are inserted before encryption and ! 370: discarded after decryption. This prefix group prefix is only visible ! 371: only after decrypting the ciphertext in the packet. ! 372: ! 373: The random prefix serves to start off the cipher feedback chaining ! 374: process with 64 bits of random material. It may be discarded after ! 375: decryption. The first 8 bytes is the random prefix material, followed ! 376: by the 2-byte "key-check" prefix. ! 377: ! 378: The key-check prefix is composed of two identical copies of the last ! 379: 2 random bytes in the random prefix, in the same order. During ! 380: decryption, the 9th and 10th byte of decrypted plaintext are checked ! 381: to see if they match the 7th and 8th byte respectively. If these ! 382: key-check bytes meet this criterion, then the conventional key is ! 383: assumed to be correct. ! 384: ! 385: ! 386: ! 387: Compressed data packet ! 388: ---------------------- ! 389: ! 390: Offset Length Meaning ! 391: 0 1 CTB for Compressed data packet ! 392: 1 4 32-bit (or maybe 16-bit) length of packet ! 393: 5 1 Compression algorithm selector byte (1=ZIP) ! 394: 6 ? compressed data ! 395: ! 396: The compressed data begins right after the algorithm selector byte. ! 397: The compressed data may decompress into a raw literal plaintext data ! 398: packet with its own CTB. ! 399: ! 400: ! 401: ! 402: Literal data packet, with filename and mode ! 403: ------------------------------------------- ! 404: ! 405: Offset Length Meaning ! 406: 0 1 CTB for raw literal data packet ! 407: 1 4 32-bit (or maybe 16-bit) length of packet ! 408: 5 1 mode byte, 'b'= binary or 't'= canonical text ! 409: 6 ? filename, with leading string length byte ! 410: ? 4 Timestamp of last-modified date, or 0, or right now ! 411: ? ? raw literal plaintext data ! 412: ! 413: The timestamp may be have to be derived in a system dependent manner. ! 414: ANSI C functions should be used to get it if available, otherwise ! 415: store the current time in it. Or maybe store 0 if it's somehow not ! 416: applicable. ! 417: ! 418: Whne calculating a signature on a literal packet, the signature ! 419: calculation only includes the raw literal plaintext data that begins ! 420: AFTER the header fields in the literal packet-- after the CTB, the ! 421: length, the mode byte, the filename, and the timestamp. The reason ! 422: for this is to guarantee that detached signatures are exactly the ! 423: same as attached signatures prefixed to the message. Detached ! 424: signatures are calculated on a separate file that has no packet ! 425: encapsulation. ! 426: ! 427: ! 428: ! 429: Comment packet ! 430: -------------- ! 431: ! 432: A comment packet is generally just skipped over by PGP, although it ! 433: may be displayed to the user when processed. It can be put in a ! 434: keyring, or anywhere else. ! 435: ! 436: Offset Length Meaning ! 437: 0 1 CTB for Comment packet ! 438: 1 1 8-bit length of packet ! 439: 2 ? ASCII comment, size is as in preceding length byte ! 440: ! 441: ! 442: ! 443: Secret key certificate ! 444: ---------------------- ! 445: ! 446: Offset Length Meaning ! 447: 0 1 CTB for secret key certificate ! 448: 1 2 16-bit (or maybe 8-bit) length of packet ! 449: 3 1 Version byte (=2). May affect rest of fields that follow. ! 450: 4 4 Timestamp ! 451: 8 2 Validity period, in number of DAYS (0 means forever) ! 452: 10 1 Algorithm byte for RSA (=1 for RSA). ! 453: --Algorithm byte affects field definitions that follow. ! 454: ? ? MPI of RSA public modulus n ! 455: ? ? MPI of RSA public encryption exponent e ! 456: ! 457: ? 1 Algorithm byte for cipher that protects following ! 458: secret components (0=unencrypted, 1=IDEA cipher) ! 459: ? 8 Cipher Feedback IV for cipher that protects secret ! 460: components (not present if unencrypted) ! 461: ? ? MPI of RSA secret decryption exponent d ! 462: ? ? MPI of RSA secret factor p ! 463: ? ? MPI of RSA secret factor q ! 464: ? ? MPI of RSA secret multiplicative inverse u ! 465: (All MPI's have bitcount prefixes) ! 466: ? 2 16-bit checksum of all preceding secret component bytes ! 467: ! 468: All secret fields in the secret key certificate may be password- ! 469: encrypted, including the checksum. The checksum is calculated from ! 470: all of the bytes of the unenciphered secret components. The public ! 471: fields are not encrypted. The encrypted fields are done in CFB mode, ! 472: and the checksum is used to tell if the password was good. The CFB ! 473: IV field is just encrypted random data, assuming the "true" IV was ! 474: zero. ! 475: ! 476: NOTE: The secret key packet does not contain a User ID field. The ! 477: User ID is enclosed in a separate packet that always follows the secret ! 478: key packet on a keyring or in any other context. ! 479: ! 480: ! 481: Public key certificate ! 482: ---------------------- ! 483: ! 484: Offset Length Meaning ! 485: 0 1 CTB for public key certificate ! 486: 1 2 16-bit (or maybe 8-bit) length of packet ! 487: 3 1 Version byte (=2). May affect rest of fields that follow. ! 488: 4 4 Timestamp of key creation ! 489: 8 2 Validity period, in number of DAYS (0 means forever) ! 490: 10 1 Algorithm byte for RSA (=1 for RSA). ! 491: --Algorithm byte affects field definitions that follow. ! 492: ? ? MPI of RSA public modulus n ! 493: ? ? MPI of RSA public encryption exponent e ! 494: (All MPI's have bitcount prefixes) ! 495: ! 496: NOTE: The public key packet does not contain a User ID field. The ! 497: User ID is enclosed in a separate packet that always follows ! 498: somewhere after the public key packet on a keyring or in any other ! 499: context. ! 500: ! 501: ! 502: ! 503: User ID packet ! 504: -------------- ! 505: ! 506: Offset Length Meaning ! 507: 0 1 CTB for User ID packet ! 508: 1 1 8-bit length of packet ! 509: 2 ? User ID string, size is as in preceding length byte ! 510: ! 511: The User ID packet follows a public key on a public key ring. It ! 512: also follows a secret key on a secret key ring. ! 513: ! 514: When a key is certified by a signature, the signature covers both the ! 515: public key packet and the User ID packet. The signature certificate ! 516: thereby logically "binds" together the user ID with the key. The ! 517: user ID packet is always associated with the most recently occurring ! 518: public key on the key ring, regardless of whether there are other ! 519: packet types appearing between the public key packet and the ! 520: associated user ID packet. ! 521: ! 522: There may be more than one User ID packet after a public key packet. ! 523: They all would be associated with the preceding public key packet. ! 524: ! 525: ! 526: Keyring trust packet ! 527: -------------------- ! 528: ! 529: The three different forms of this packet each come after: a public key ! 530: packet, a user ID packet, or a signature packet on the public key ! 531: ring. They exist only on a public key ring, and are never extracted ! 532: with a key. Don't copy this separate trust byte packet from keyring, ! 533: and do add it in back in when adding to keyring. ! 534: ! 535: The meaning of the keyring trust packet is context sensitive. The ! 536: trust byte has three different definitions depending on whether it ! 537: follows a key packet on the ring, or follows a user ID packet on the ! 538: ring, or follows a signature on the ring. ! 539: ! 540: Offset Length Meaning ! 541: 0 1 CTB for Keyring trust packet ! 542: 1 1 8-bit length of packet (always 1 for now) ! 543: 2 1 Trust flag byte, with context-sensitive bit ! 544: definitions given below. ! 545: ! 546: ! 547: For trust bytes that apply to the preceding key packet, the following ! 548: bit definitions apply: ! 549: ! 550: Bits 0-2 - OWNERTRUST bits- Trust bits for this key owner. Values are: ! 551: 000 - undefined, or uninitialized trust. ! 552: 001 - unknown, we don't know the owner of this key. ! 553: 010 - We usually do not trust this key owner to sign other keys. ! 554: 011 - reserved ! 555: 100 - reserved ! 556: 101 - We usually do trust this key owner to sign other keys. ! 557: 110 - We always trust this key owner to sign other keys. ! 558: 111 - This key is also present in the secret keyring. ! 559: Bits 3-5 - Reserved. ! 560: Bit 6 - VISITED bit- only used internally by the maintenance pass. ! 561: Bit 7 - BUCKSTOP bit- Means this key also appears in secret key ring. ! 562: Signifies the ultimately-trusted "keyring owner". ! 563: "The buck stops here". This bit computed from looking ! 564: at secret key ring. If this bit is set, then all the ! 565: KEYLEGIT fields are set to maximum for all the user IDs for ! 566: this key, and OWNERTRUST is also set to ultimate trust. ! 567: ! 568: For trust bytes that apply to the preceding user ID packet, the ! 569: following bit definitions apply: ! 570: ! 571: Bit 0-1 - KEYLEGIT bits- Validity bits for this key. ! 572: Set if we believe the preceding key is legitimately owned by ! 573: who it appears to belong to, specified by the preceding user ! 574: ID. Computed from various signature trust packets that ! 575: follow. Also, always fully set if BUCKSTOP is set. ! 576: To define the KEYLEGIT byte does not require that ! 577: OWNERTRUST be nonzero, but OWNERTRUST nonzero does require ! 578: that KEYLEGIT be fully set to maximum trust. ! 579: 00 - unknown, undefined, or uninitialized trust. ! 580: 01 - We do not trust this key's ownership. ! 581: 10 - We have marginal confidence of this key's ownership. ! 582: Totally useless for certifying other keys, but may be useful ! 583: for checking message signatures with an advisory warning ! 584: to the user. ! 585: 11 - We completely trust this key's ownership. ! 586: This requires either: ! 587: - 1 ultimately trusted signature (a signature from ! 588: yourself, SIGTRUST=111) ! 589: - COMPLETES_NEEDED completely trusted signatures ! 590: (SIGTRUST=110) ! 591: - MARGINALS_NEEDED marginally trusted signatures ! 592: (SIGTRUST=101) ! 593: COMPLETES_NEEDED and MARGINALS_NEEDED are configurable ! 594: constants. ! 595: Bit 7 - WARNONLY bit- If the user wants to use a not fully validated ! 596: key for encryption, he is asked if he really wants to use this ! 597: key. If the user answers 'yes', the WARNONLY bit gets set, ! 598: and the next time he uses this key, only a warning will be ! 599: printed. This bit gets cleared during the maintenance pass. ! 600: ! 601: For a trust byte that applies to the preceding signature, the ! 602: following bit definitions apply: ! 603: ! 604: Bits 0-2 - SIGTRUST bits- Trust bits for this signature. Value is ! 605: copied directly from OWNERTRUST bits of signer: ! 606: 000 - undefined, or uninitialized trust. ! 607: 001 - unknown ! 608: 010 - We do not trust this signature. ! 609: 011 - reserved ! 610: 100 - reserved ! 611: 101 - We reasonably trust this signature. ! 612: 110 - We completely trust this signature. ! 613: 111 - ultimately trusted signature (from the owner of the ring) ! 614: Bits 3-6 - Reserved. ! 615: Bit 7 - CONTIG bit- Means this signature leads up a contiguous trusted ! 616: certification path all the way back to the ultimately- ! 617: trusted keyring owner, where the buck stops. This bit derived ! 618: from other trust packets. ! 619: ! 620: Note that the other kinds of trust bytes are mainly derived from the ! 621: OWNERTRUST bits. They are also derived from the BUCKSTOP bit (which ! 622: will be set after creating a key, or after setting the owner trust to ! 623: ultimate), and from the SIGTRUST bits, which is itself derived from a ! 624: combination of OWNERTRUST bits and possibly the user's ratification. ! 625: ! 626: When testing a key's integrity, we follow a trusted contiguous ! 627: certification path back up to the owner of the key ring by following ! 628: keyring trust bytes (for signatures) that have the CONTIG bits and ! 629: SIGTRUST bits set, until we hit a keyring trust byte (for a key) that ! 630: has BUCKSTOP bit set. Then we know we've reached the top of the ! 631: trust pyramid, the keyring owner. Prior to this operation, we set ! 632: all the CONTIG bits by navigating the pyramid from the top down, by ! 633: testing the SIGTRUST bits that are "trustwise contiguous" with the ! 634: top of the pyramid, in a special keyring maintenance pass. ! 635: ! 636: The key legitimacy is ultimately determined by a probablistic ! 637: fault-tolerant method, as follows. We also set KEYLEGIT if BUCKSTOP is ! 638: set, which means that this is our own key. The OWNERTRUST bits can only ! 639: become defined (nonzero) if KEYLEGIT is fully set already. At the ! 640: moment KEYLEGIT becomes fully set (and not before), we ask the user to ! 641: define the OWNERTRUST bits. ! 642: ! 643: This probablistic fault-tolerant method of determining public key ! 644: legitimacy is one of the principle strengths of PGP's key management ! 645: architecture, as compared with PEM, for decentralized social ! 646: environments. ! 647: ! 648: The trust of a key owner (OWNERTRUST) does not just reflect our ! 649: estimation of their personal integrity, it also reflects how competent ! 650: we think they are at understanding key management and using good ! 651: judgement in signing keys. The OWNERTRUST bits are not computed from ! 652: anything-- it requires asking the user for his opinion. ! 653: ! 654: To define the OWNERTRUST bits for a key owner, ask: ! 655: Would you always trust "Oliver North" ! 656: to certify other public keys? ! 657: (1=Yes, 2=No, 3=Usually, 4=I don't know) ? _ ! 658: ! 659: If a key is added to the key ring the trust bytes are initialized ! 660: to zero (undefined). ! 661: ! 662: ! 663: [--manual setting of SIGTRUST/OWNERTRUST not implemented] ! 664: Normally, we derive the value of the SIGTRUST field by copying it ! 665: directly from the signer key's OWNERTRUST field. Under special ! 666: circumstances, if the user explicitly requests it with a special PGP ! 667: command, we may let the user override the copied value for SIGTRUST ! 668: by displaying an advisory to him and asking him for ratification, ! 669: like so: ! 670: This key is signed by "Oliver North", ! 671: whom you usually trust to sign keys. ! 672: Do you trust "Oliver North" ! 673: to certify the key for "Daniel Ellsberg"? ! 674: (1=Yes, 2=No, 3=I don't know) ? _ <default is yes> ! 675: ! 676: Or: ! 677: This key is signed by "Oliver North", ! 678: whom you usually do not trust to sign keys. ! 679: Do you trust "Oliver North" ! 680: to certify the key for "Daniel Ellsberg"? ! 681: (1=Yes, 2=No, 3=I don't know) ? _ <default is no> ! 682: ! 683: An "I don't know" response to this question would have the same ! 684: effect as a response of "no". ! 685: ! 686: If we had no information about the trustworthyness of the signer (the ! 687: OWNERTRUST field was uninitialized), we would leave the advisory note ! 688: off. ! 689: ! 690: ! 691: Certifying a public key is a serious matter, essentially promising to ! 692: the world that you vouch for this key's ownership. But sometimes I ! 693: just want to make a "working assumption" of trust for someone's ! 694: public key, for my own purposes on my own keyring, without taking the ! 695: serious step of actually certifying it for the rest of the world. In ! 696: that case, we can use a special PGP keyring management command to ! 697: manually set the KEYLEGIT field, without relying on it being computed ! 698: during a maintenance pass. Later, if a maintenance pass discovers a ! 699: KEYLEGIT bit set that would not have been otherwise computed as set ! 700: by the maintenance pass logic, it alerts me and asks me to confirm ! 701: that I really want it set. ! 702: [--end of not implemented section] ! 703: ! 704: ! 705: During routine use of the public keyring, we don't actually check the ! 706: associated signatures certifying a public key. Rather, we always ! 707: rely on trust bytes to tell us whether to trust the key in question. ! 708: We depend on a separate maintenance pass to actually check the key ! 709: signature certificates against the associated keys, and to set the ! 710: trust bytes accordingly. ! 711: ! 712: ! 713: The maintenance pass operates in a top-of-pyramid-down manner as ! 714: follows. ! 715: ! 716: If at any time during any of these steps the KEYLEGIT field goes from ! 717: not fully set to fully set, and the OWNERTRUST bits are still undefined, ! 718: the user is asked a question to define the OWNERTRUST bits. First, for ! 719: all keys with BUCKSTOP set, check if they are really present in the ! 720: secret keyring, if not, the BUCKSTOP bit is cleared. SIGTRUST and ! 721: KEYLEGIT is initialized to zero for non-buckstop keys. ! 722: ! 723: The real maintenance pass is done in a recursive scan: Start with ! 724: BUCKSTOP keys, find all userid/key pairs signed by a key and update ! 725: the trust value of these signatures by copying the OWNERTRUST of the ! 726: signer to the SIGTRUST of the signature. If this makes a key fully ! 727: validated, start looking for signatures made by this key, and update ! 728: the trust value for them. ! 729: ! 730: If a signature fails to verify, obnoxiously alert the user, drop it from ! 731: the key ring, and then do the maintenance pass to calculate all the ! 732: ring-wide cascaded effects from this, if any. A failed signature should ! 733: be exceedingly rare, and it may not even result in a KEYLEGIT field ! 734: being downgraded. Having several signatures certifying each key should ! 735: prevent damage from spreading too far from a failed certificate. But if ! 736: dominoes do keep falling from this, it may indicate the discovery of an ! 737: important elaborate attack. ! 738: ! 739: ! 740: ! 741: Public Key Ring Overall Structure ! 742: ================================= ! 743: ! 744: A public key ring is comprised of a series of public key packets, ! 745: keyring trust packets, user ID packets, and signature certificates. ! 746: ! 747: Here is an example of an ordered collection of packets on a ring: ! 748: ! 749: -------------------------------------------------------------------- ! 750: Public key packet ! 751: Keyring trust packet for preceding key ! 752: User ID packet for preceding key ! 753: Keyring trust packet for preceding user ID/key association ! 754: Comment packet ! 755: Signature certificate to bind preceding User ID and key pkt ! 756: Keyring trust packet for preceding signature certificate ! 757: Signature certificate to bind preceding User ID and key pkt ! 758: Keyring trust packet for preceding signature certificate ! 759: Signature certificate to bind preceding User ID and key pkt ! 760: Keyring trust packet for preceding signature certificate ! 761: ! 762: Public key packet ! 763: Keyring trust packet for preceding key ! 764: User ID packet for preceding key ! 765: Keyring trust packet for preceding user ID/key association ! 766: Signature certificate to bind preceding User ID and key pkt ! 767: Keyring trust packet for preceding signature certificate ! 768: User ID packet for preceding key ! 769: Keyring trust packet for preceding user ID/key association ! 770: Comment packet ! 771: Signature certificate to bind preceding User ID and key pkt ! 772: Keyring trust packet for preceding signature certificate ! 773: Signature certificate to bind preceding User ID and key pkt ! 774: Keyring trust packet for preceding signature certificate ! 775: ! 776: Public key packet ! 777: Keyring trust packet for preceding key ! 778: Compromise certificate for preceding key ! 779: User ID packet for preceding key ! 780: Keyring trust packet for preceding user ID/key association ! 781: Signature certificate to bind preceding User ID and key pkt ! 782: Keyring trust packet for preceding signature certificate ! 783: -------------------------------------------------------------------- ! 784: ! 785:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.