A.2 PBKDF2
对象标识符 id-PBKDF2 标识 PBKDF2 密钥派生函数 (第 5.2 节)。
id-PBKDF2 OBJECT IDENTIFIER ::= {pkcs-5 12}
在 AlgorithmIdentifier 中与此 OID 关联的参数字段应具有类型 PBKDF2-params:
PBKDF2-params ::= SEQUENCE {
salt CHOICE {
specified OCTET STRING,
otherSource AlgorithmIdentifier {{PBKDF2-SaltSources}}
},
iterationCount INTEGER (1..MAX),
keyLength INTEGER (1..MAX) OPTIONAL,
prf AlgorithmIdentifier {{PBKDF2-PRFs}} DEFAULT
algid-hmacWithSHA1 }
类型 PBKDF2-params 的字段具有以下含义:
-
salt 指定盐值或盐值的来源。它应该是八位字节串或具有 OID 的算法 ID, 该 OID 在集合
PBKDF2-SaltSources中, 该集合保留给 PKCS #5 的未来版本。盐源方法 (salt-source approach) 旨在指示如何根据算法 ID 中的参数、应用数据或两者生成盐值。例如, 它可能指示盐值是从结构的编码中生成的, 该结构指定有关派生密钥的详细信息, 如第 4.1 节中所建议的。一些信息可能在其他地方携带, 例如在加密算法 ID 中。然而, 此类设施被推迟到 PKCS #5 的未来版本。
在此版本中, 应用可以通过在指定的替代方案中选择盐值的特定解释来实现第 4.1 节中提到的好处。
PBKDF2-SaltSources ALGORITHM-IDENTIFIER ::= { ... }
-
iterationCount 指定迭代次数。允许的最大迭代次数取决于实现。预期实现配置文件可能进一步限制边界。
-
keyLength 是可选字段, 是派生密钥的长度 (以八位字节为单位)。允许的最大密钥长度取决于实现; 预期实现配置文件可能进一步限制边界。提供此字段仅为了方便; 密钥长度在密码学上不受保护。如果担心给定盐值的同一密钥 (或该密钥的前缀) 的不同密钥长度之间的交互 (参见第 4.1 节), 则盐值应区分不同的密钥长度。
-
prf 标识底层伪随机函数。它应该是具有 OID 的算法 ID, 该 OID 在集合
PBKDF2-PRFs中, 对于此版本的 PKCS #5, 该集合应由id-hmacWithSHA1(参见附录 B.1.1) 和应用定义的任何其他 OID 组成。
PBKDF2-PRFs ALGORITHM-IDENTIFIER ::= {
{NULL IDENTIFIED BY id-hmacWithSHA1},
{NULL IDENTIFIED BY id-hmacWithSHA224},
{NULL IDENTIFIED BY id-hmacWithSHA256},
{NULL IDENTIFIED BY id-hmacWithSHA384},
{NULL IDENTIFIED BY id-hmacWithSHA512},
{NULL IDENTIFIED BY id-hmacWithSHA512-224},
{NULL IDENTIFIED BY id-hmacWithSHA512-256},
...
}
默认伪随机函数是 HMAC-SHA-1:
algid-hmacWithSHA1 AlgorithmIdentifier {{PBKDF2-PRFs}} ::=
{algorithm id-hmacWithSHA1, parameters NULL : NULL}