3.3. Alternate Description of the Generation of k (k 生成的替代描述)
3.3. Alternate Description of the Generation of k (k 生成的替代描述)
上一节中描述的过程实际上是从 "HMAC_DRBG" 伪随机数生成器派生的, 该生成器在 [SP800-90A] 和 [X9.62] 的附录 D 中描述.使用 [SP800-90A] 的术语, k 的生成可以这样描述:
a. 使用 HMAC 参数化的 HMAC_DRBG 实例化, 使用与用于处理要签名的消息的相同哈希函数 H.实例化参数为:
requested_instantiation_security_strength
将此参数设置为 HMAC_DRBG 实现在使用 H 作为基础哈希函数时将接受的任何值.
prediction_resistance_flag
将此参数设置为 "false".
personalization_string
将此参数设置为 "Null" (空位序列).
entropy_input
使用 int2octets(x) 作为熵字符串.
nonce
使用 bits2octets(H(m)) 作为 nonce.
请注意, 最后两个参数本身不是 HMAC_DRBG 实例化函数的参数; 相反, 这些值在实例化期间从内部 Get_entropy_input 函数请求.对于确定性 (EC)DSA, 我们希望 HMAC_DRBG 使用我们指定的熵字符串和 nonce 运行, 而不访问实际的熵源.
b. 通过从 HMAC_DRBG 请求 qlen 位并使用 bits2int 转换将结果位转换为整数来生成 k 的候选值.重复此步骤, 直到获得非零,小于 q 且适合 (EC)DSA 的值 (参见第 3.4 节).
请注意, 我们为每个签名生成过程实例化一个新的 HMAC_DRBG 实例.生成位时没有 "个性化字符串" 和 "附加输入".HMAC_DRBG 的重新播种功能从未被调用, 无论是外部调用还是作为内部 HMAC_DRBG 处理的结果.
如上所示, 我们使用私钥的编码作为 "熵字符串", 并使用哈希消息 (由 bits2octets 截断和扩展) 作为 "nonce".在 HMAC_DRBG 中, 熵字符串和 nonce 简单地连接到初始种子中; 因此, "熵" 和 "nonce" 之间的分割是相当任意的.为每个使用 qlen 位应该与大多数 HMAC_DRBG 实现输入要求兼容.