Formati datotek v verzijah PGP-ja 2.x

Vrstni red byte-ov:
Vsi integer podatki, ki jih uporablja PGP, so shranjeni po principu MSB (most significant byte). To je zaradi prenosnosti sporočil in ključev med računalniki in pokriva multiprecision RSA integers, bit count prefix fields, byte count prefix fields, checksume, key Ids in timestamps.



Večkratno natančna cela števila (multiprecision integers):
Aritmetika RSA vključuje precej večkratno natančnih celih števil, ki imajo pogosto stotine bitov točnosti. PGP zunanje shrani MPI (multiprecision integer) s 16-bitnim prefiksom, ki podaja število značilnih bitov v integer številu, ki sledi. To število, ki sledi, je shranjeno v običajnem byte-nem vrstnem redu z MSB izpolnjenim z 0-biti, če bitcount ni deljiv z 8. Bitcount je točno število pomembnih bitov. Npr.: številka 5 bi bila shranjena s tremi byte-i  00 03 05. MPI z vrednostjo 0 je enostavno shranjen kot 16-bitni bitcount prefiks, ki vsebuje ničle brez vrednostnih byte-ov, ki bi sledili.


Ključev ID:
Nekateri paketi uporabljajo polje »ključ ID«. To je najmanj 64-bitni signifikator, ki je vključen v kreiranje paketa. Za vsak RSA je javni ključ edinstven.


Uporabniški ID:
Nekateri paketi uporabljajo uporabniški ID, ki je ASCII string in vsebuje uporabniško ime. Prvi bit uporabniškega ID-a je dolžina stringa in ta bit ni vključen v to dolžino.


Timestamp:
Nekateri paketi uporabljajo časovno znamko, ki je 32-bitni nepredznačeni integer oz. število sekund od januarja 1970, 1 00:00:00 GMT. To je standardni format prevzet od Unix-ove časovne znamke.


Cipher Type Byte (CTB):
Mnoge od PGP-evih podatkovnih struktur imajo na začetko CTP, ki določa tip podatkovne strukture, ki ji sledi. CTB polje bitov ima naslednji pome (bit 0 je LSB, bit 7 je MSB):
 
 
bit 7 vedno 1, kar pomeni, da je bit CTB 
bit 6 rezerviran
biti 5-2 polje CTB tipa, označuje tip paketa, ki sledi 
  0001 - paket kodirnega, javnega ključa
  0010 - paket kodirnega, tajnega (signatura) ključa
  0110 - certifikat javnega ključa
  1000 - stisnjen podatkovni paket
  1001 - podatki konvencialnega javnega ključa
  1011 - vrstica dobesednih podatkov golega teksta z imenom datoteke in modulom
  1100 - datoteka avtentičnih javnih ključev
  1101 - paket uporabniških ID-jev, povezanih z javnimi in tajnimi ključi
  1110 - paket komentarja
  Ostali CTB paketni tipi niso implementirani.
bita 1-0 00 - 1 byte-na dolžina polja paketa, ki sledi CTB-ju
  01 - 2 byte-na dolžina polja paketa, ki sledi CTB-ju
  10 - 3 byte-na dolžina polja paketa, ki sledi CTB-ju
  11 - neznana dolžina paketa.
  8, 16 ali 32-bitna dolžina polja paketa, ki sledi CTB-ju, podaja dolžino preostanka paketa v byte-ih in v to dolžino nista všteta CTB in polje dolžine paketa.
 
RSA kodirni paket javnega ključa:
 
Oznaka Dolžina Pomen
0 1 CTB ali RSA kodirni paket javnega ključa
1 2 16 ali 8-bitna dolžina paketa
3 1 byte verzije, ki lahko vpliva na preostanek polja, ki sledi
    (=2) za PGP verzije <=2.5
    (=3) za PGP verzije >=2.6
4 8 64-bitni ID ključa
12 1 algoritni bit za RSA (=1 je RSA)
    Algoritni bit vpliva na polje, ki sledi.
13 ? RSA enkripcijski integer, kodiran konvencionalni ključ paketa (če je MPI, potem ima kot prefiks bitcount)

Konvencionalni ciphertext paket takoj sledi za RSA javni-ključ-kodiranim paketom, ki vsebuje konvencionalni ključ.


Paket signature:
 
Oznaka Dolžina Pomen
0 1 CTB for tajni-ključ-enkripcijski (podpisan) paket
1 2 16-bit (ali 8-bitna) dolžina paketa
3 1 verzijski byte, lahko vpliva na ostanek polja,ki sledi.
    (=2) za PGP verzije <= 2.5
    (=3) za PGP verzije >= 2.6
4 1 dolžina spremljajočega materijala, ki je vključen v MD izračunih je (=5).
5 1 Podpisno klasifikacijsko polje (glej spodaj).
    Običajno je dodan za MD izračune.
6 4 32-bitni timestamp, ki kaže, kdaj je narejeno.
    Ponavadi se doda pri MD izračunih.
10 8 64-bit ID ključa
18 1 algoritemski byte za shemo javnega ključa (RSA=0x01) in vpliva na definicijo polja, ki sledi.
19 1 algoritemski byte za prebavljeno sporočilo (MD5=0x01).
20 2 prva 2 byte-a prebavljenega sporočila znotraj RSA-encrypcijskega integera, za pomoč pri izbiri pravega RSA ključa za preverjanje signature.
22 ? RSA-encrypcijski integer, kodirano sporočilo (MPI s bitcount prefiksom).

Če je podpisani plaintext vključen v isto datoteko kot signaturni paket, potem sledi RSA-jevi signaturi tajnega ključa, ki vsebuje izvleček sporočila. Plaitext ima »črkovni« CTB prefiks.


Certifikat tajnega ključa:
Oznaka Dolžina Pomen
0 1 CTB za certifikat tajnega ključa
1 2 16-bitna (ali 8-bitna) dolžina paketa
3 1 byte verzije, lahko vpliva na preostanek polja
    (=2) za PGP verzije <= 2.5
    (=3) za PGP verzije >= 2.6
4 4 časovna znamka
8 2 period veljavnosti v številu dni (0 pomeni vedno)
10 1 byte za RSA algoritem (=1 za RSA).
    --byte algoritma vpliva napreostanek polja
? ? MPI od RSA javni modul n
? ? MPI od RSA javni enkripcijski eksponent e
? 1 byte algoritma za cipher, ki ščiti tajne komponente, ki sledijo(0=nekodirano, 1=IDEA cipher)
? 8 CFB cipher feedback IV ščiti tajne komponente
? ? MPI za RSA tajni dekodirni eksponent d
? ? MPI za RSA tajni faktor p
? ? MPI za RSA tajni faktor q
? ? MPI za RSA tajni večkratni inverz u
    (vsi MPI-ji imajo have bitcount prefikse)
? 2 16-bitni preverjalec seštevka vseh byte-ov tajnih komponent

Preverjalec seštevka oz. checksum se izračuna iz vseh byte-ov nekodiranih tajnih komponent. Javna polja niso kodirana. Checksum se uporablja za preverjanje veljavnosti gesla. Kodirna polja so narejena v CFB modu. CFB IV polje je enostavno random podatkovno polje, pri čemer je ničla »true« IV.


Certifikat javnega ključa:
 
Oznaka Dolžina Pomen
0 1 CTB za certifikat javnega ključa
1 2 16-bitna (ali 8-bitna) dolžina paketa
3 1 byte verzije, lahko vpliva napreostanek polja
    (=2) za PGP verzije <= 2.5
    (=3) za PGP verzije >= 2.6
4 4 časovna znamka kreiranja ključa
8 2 period veljavnosti v številu dni (0 pomeni vedno)
10 1 byte algoritma za RSA (=1 za RSA).
    --algoritemski byte vpliva na definiranost preostanka polja.
? ? MPI od RSA javni modul n
? ? MPI od RSA javni kodirni eksponent e
    (vsi MPI-ji imajo bitcount prefikse)

Paket javnega ključa ne vsebuje polje uporabniškega ID-ja. Uporabniški ID je vključen v posebni paket, ki vedno "pride" za paketom javnega ključa v datoteki ključev ali v nekem drugem kontekstu. Period veljavnosti je splošno nastavljen na 0.


Uporabniški ID paket:  
Oznaka Dolžina Pomen
0 1 CTB za uporabniški ID paket
1 1 8-bitna dolžina paketa
2 ? uporabniški ID string, dolžina je zapisana v prvem byte-u

Uporabniški ID paket sledi javnem ključu v datoteki javnih ključev. Tudi sledi tajnemu ključe v datoteki tajnih ključev.
Kadar je ključ certificiran s signaturo, signatura prekriva paket javnega ključa in uporabniški ID paket. Torej, certifikat signature povezuje uporabniški ID in ključ. Paket uporabniškega ključa je vedno povezan z najnovejšim javnim ključem v datoteki ključev, kar ni odvisno od paketnega tipa med paketom javnega ključa in paketa uporabniškega ID-ja.
Za paketom javnega ključa je lahko več paketov uporabniških ID-jev. Vsi so povezani s tem javnim ključem.


   NAZAJ                                                         NAPREJ