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).