跳到主要内容

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}