| Cryptographic Token Interface Standard |
PKCS#11
|
PKCS #12 password-based encryption/authentication mechanisms
Detailed Description
The mechanisms in this section are for generating keys and IVs for performing password-based encryption or authentication. The method used to generate keys and IVs is based on a method that was specified in the original draft of PKCS #12.
We specify here a general method for producing various types of pseudo-random bits from a password, p ; a string of salt bits, s ; and an iteration count, c. The "type" of pseudo-random bits to be produced is identified by an identification byte, ID, the meaning of which will be discussed later.
Let H be a hash function built around a compression function f: Z 2u X Z 2v -> Z 2u (that is, H has a chaining variable and output of length u bits, and the message input to the compression function of H is v bits). For MD2 and MD5, u =128 and v =512; for SHA-1, u =160 and v =512.
We assume here that u and v are both multiples of 8, as are the lengths in bits of the password and salt strings and the number n of pseudo-random bits required. In addition, u and v are of course nonzero.
- Construct a string, D (the "diversifier"), by concatenating v /8 copies of ID.
- Concatenate copies of the salt together to create a string S of length v .UPPER(s/v ) bits (the final copy of the salt may be truncated to create S). Note that if the salt is the empty string, then so is S.
- Concatenate copies of the password together to create a string P of length v .UPPER(p/v ) bits (the final copy of the password may be truncated to create P). Note that if the password is the empty string, then so is P.
- Set I =S ||P to be the concatenation of S and P.
- Set j =UPPER(n /u ).
- For i =1, 2, ..., j, do the following:
- Set Ai =Hc (D ||I), the c th hash of D ||I. That is, compute the hash of D ||I ; compute the hash of that hash; etc.; continue in this fashion until a total of c hashes have been computed, each on the result of the previous hash.
- Concatenate copies of Ai to create a string B of length v bits (the final copy of Ai may be truncated to create B).
- Treating I as a concatenation I 0, I 1, ..., Ik -1 of v -bit blocks, where k =UPPER(s/v )+UPPER(p/v ), modify I by setting Ij =(Ij +B +1) mod 2v for each j. To perform this addition, treat each v -bit block as a binary number represented most-significant bit first.
- Concatenate A 1, A 2, ..., Aj together to form a pseudo-random bit string, A.
- Use the first n bits of A as the output of this entire process.
When the password-based encryption mechanisms presented in this section are used to generate a key and IV (if needed) from a password, salt, and an iteration count, the above algorithm is used. To generate a key, the identifier byte ID is set to the value 1; to generate an IV, the identifier byte ID is set to the value 2.
When the password based authentication mechanism presented in this section is used to generate a key from a password, salt, and an iteration count, the above algorithm is used. The identifier byte ID is set to the value 3.
RSA Security Inc. Public-Key Cryptography Standards -
PKCS#11 - v210