首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于“生成器g的可验证规范生成”的Python代码FIPS 186-4返回False

用于“生成器g的可验证规范生成”的Python代码FIPS 186-4返回False
EN

Cryptography用户
提问于 2021-12-07 02:43:23
回答 1查看 73关注 0票数 0

编辑:如果有人,没有经验,像我,在这个问题上,它已经回答了在堆栈过流

为什么Python代码(见下文)返回false?

更多的上下文:我正在浏览FIPS 186-4,在第43页中,有一个生成生成器的算法,A.2.3可验证的规范生成生成器g。我编写了一个Python代码,如下所示,它对这个算法进行了编码。然而,它总是返回假的测试数据,我从NIST测试矢量 (测试向量,FIPS186-4,DSA ).我还在要旨3上发布了整个文件)。

代码语言:javascript
复制
from Crypto.Hash import SHA256


P = 0xfbdf34147bf5d8a45671c906923c1dbe86e9123fae5750d6c1986e00a9946f7f833372a436f98f75dc798bb454825eb625d49011d1e4401baacb653bb9dac6cc8ac91e61ba4310458ff6d6ddabcba29db025eedba6e2f837344dee4814e2a7e2e92ceb1e6e665ee08ce187ffd420fee7a99e046a4af719fa8c689630e88f8729
Q = 0x93db61194cb0b9236eea63617d149cd6dd8e2bf1
domain_parameter_seed = 0x75709e9ca555a80cb7ab154e9d29d2775fe215d8
index = 0xae
G = 0x7db10e27fffe43fc9582367a449f7be217130cdf89a5eff65fbebefc9478ba39ad03d1b0d0254c0f1b8246d914c0d1df25f55a5dabbb51caa1942403fdc22c832e4d7048ce0ad64cb76252fdcfaecd78722c2e10417495ee9d4e0d8376f891a3042b103de915355c0e60e168cf48c0fa232a13bf9b58a0f9b3ad7db7ad39c536



def Hash(number):
    string = number.to_bytes((number.bit_length()+7)//8, 'big')
    return int(SHA256.new(string).hexdigest(), 16)


def compute_gen():
    k = (P - 1) // Q
    for count in range(1, 0xffff):
  
        U = count + 2^16 * (index + 2^16 * (0x6767656e + 2^32 * domain_parameter_seed))
        W = Hash(U)
        g = pow(W, k, P)
        print(hex(g))
        if g != 1:
            break
 
    return g


print (compute_gen() == G)
EN

回答 1

Cryptography用户

发布于 2021-12-07 07:08:36

与密码学最接近的原因是代码不起作用,因为它没有实现处方。

索引是长度为8的位字符串。

当它出现的时候

代码语言:javascript
复制
U = count + 2^16 * (index + 2^16 * (0x6767656e + 2^32 * domain_parameter_seed))

其中,第二个2^16将是2^8

这一行中的一个编程错误是,^的意思是异或,而不是幂;在此基础上,它的优先级低于加法和乘法。

更一般的情况下,代码使用整数,其中应该有字节码。字节简化了连接,并防止了错误,比如当domain_parameter_seed的第一个字节从0x75更改为0x00时出现的错误,这是完全合法的。

使用hexdigest并将其转换回整数在上下文中是可行的,但这是糟糕的编程实践。使用digest

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/96485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档