Passa al contenuto principale

6.1.1 PBES1 Encryption Operation (Operazione di Cifratura PBES1)

6.1.1 PBES1 Encryption Operation (Operazione di Cifratura PBES1)

L'operazione di cifratura per PBES1 consiste dei seguenti passaggi, che cifrano un messaggio M sotto una password P per produrre un testo cifrato C:

  1. Selezionare un salt S di otto ottetti e un conteggio delle iterazioni c, come descritto nella Sezione 4.

  2. Applicare la funzione di derivazione delle chiavi PBKDF1 (Sezione 5.1) alla password P, al salt S e al conteggio delle iterazioni c per produrre una chiave derivata DK di lunghezza 16 ottetti:

    DK = PBKDF1 (P, S, c, 16)
  3. Separare la chiave derivata DK in una chiave di cifratura K costituita dai primi otto ottetti di DK e un vettore di inizializzazione IV costituito dagli otto ottetti successivi:

    K   = DK<0..7>
    IV = DK<8..15>
  4. Concatenare M e una stringa di riempimento PS per formare un messaggio codificato EM:

    EM = M || PS

    dove la stringa di riempimento PS consiste di 8-(||M|| mod 8) ottetti ciascuno con valore 8-(||M|| mod 8). La stringa di riempimento PS soddisferà una delle seguenti dichiarazioni:

    PS = 01, se ||M|| mod 8 = 7 ;
    PS = 02 02, se ||M|| mod 8 = 6 ;
    ...
    PS = 08 08 08 08 08 08 08 08, se ||M|| mod 8 = 0.

    La lunghezza in ottetti del messaggio codificato sarà un multiplo di otto, e sarà possibile recuperare il messaggio M in modo non ambiguo dal messaggio codificato. (Questa regola di riempimento è tratta da RFC 1423 [RFC1423].)

  5. Cifrare il messaggio codificato EM con il cifrario a blocchi sottostante (DES o RC2) in modalità CBC sotto la chiave di cifratura K con vettore di inizializzazione IV per produrre il testo cifrato C. Per DES, la chiave K deve essere considerata come una codifica a 64 bit di una chiave DES a 56 bit con bit di parità ignorati (vedere [NIST46]). Per RC2, i "bit chiave effettivi" devono essere 64 bit.

  6. Fornire in output il testo cifrato C.

Il salt S e il conteggio delle iterazioni c possono essere trasmessi alla parte che esegue la decifratura in un valore AlgorithmIdentifier (vedere l'Appendice A.3).