当前位置: 首页 > 知识库问答 >
问题:

使用ecdsa和SHA224摘要中的私钥进行Golang签名

龚沛
2023-03-14

我需要签署一条消息以提交到远程服务(通过websocket)。为此,我需要基于整数(我的用户id)和密码短语(base64编码字符串)构造私钥。,使用SHA224散列。我正在使用golang和crypto/ecdsa以及用于字节编码等的附带软件包。

以下是我的文档:

签名使用椭圆曲线数字签名算法(ECDSA)编码的消息,其中包含:用户ID、服务器Nonce、客户端节点和私钥。使用SHA224散列生成用户ID和密码的私钥。

这是我的乐趣:

func NewKey(userId int64, pass string) (prKey ecdsa.PrivateKey) {
    buf := new(bytes.Buffer)
    binary.Write(buf, binary.BigEndian, userId)
    passArr := []byte(pass)

    sha := sha256.New224()
    sha.Write(buf.Bytes())
    sha.Write(passArr)
    sum := sha.Sum(nil)

    var in int64
    reader := bytes.NewReader(sum)
    err := binary.Read(reader, binary.BigEndian, &in)

    if err != nil {
        log.Fatal(err)
    }

    prKey.D = big.NewInt(in)
    prKey.PublicKey.Curve = elliptic.P224()
    return prKey
}

我对这个功能的意图是:

>

  • 使用SHA224散列userId并在[]byte中正确传递。

    将其读入int64,然后将其用作私钥

    构造ecdsa的实例。私钥和相应的ecdsa。公钥正确

    返回所述密钥以在ecdsa中使用。Sign()函数调用

    然后,我对另一条消息进行签名,该消息由一个userId(整数)和两个nonce组成。

    以下是我如何签署我的信息:

    key := NewKey(userId, pass) // the above func
    msg := sha256.New224().Sum([]byte(userId + srNonce + clNonce))
    r, s, err := ecdsa.Sign(rand.Reader, &key, msg)
    sig := []string{enc(r.String()), enc(s.String())}
    

    问题:

    >

  • 我的NewKeyfunc是否正确?

    rs组件非常大-可能是因为我使用的是int64。这可能是个问题吗?

    是行sha256。New224()。求和([]字节(用户ID传递))这两项是否正确?

    如何正确创建私钥(假设它是错误的)并随后对消息进行签名?

    我对ECDSA非常陌生,一般都有基本的密码知识。

  • 共有1个答案

    郗俊能
    2023-03-14

    回答我自己的问题:

    我的新钥匙功能正确吗?

    r和s组件非常大——大概是因为我使用的是int64。这可能是个问题吗?

    它们应该很大。

    这是sha256号线。New224()。总和([]字节(用户ID传递))“正确”用于散列这两项?

    它是正确的,因为我正在传递一个[]字节。

    如何正确创建私钥(假设它是错误的)并随后对消息进行签名?

    密钥需要一个大。Int,所以假设散列正确,使用以下内容就足够了:

    key := new(big.Int).SetBytes(sum)
    

     类似资料:
    • 我正在构建一个具有客户机/服务器基础结构的应用程序,并希望使用公钥/私钥方法实现一个身份验证机制。 让我们假设一个客户机拥有私钥,而服务器只拥有公钥。在身份验证过程中,客户端使用私钥对消息进行签名,并将其发送到服务器,在服务器上使用公钥对消息进行验证。如果验证成功,则对客户端进行身份验证。 下面是一些JUnit测试代码,我在这些代码中熟悉了这些概念:

    • 我能够使用带RSA私钥的bouncy castle和“SHA256withRSA”算法对证书进行签名。我使用下面的链接作为参考来实现这一点。使用Bouncy Castle签署CSR 现在我有椭圆曲线密钥与ECDSA签署我的CA。因此,我想通过这些CA用EC密钥和“SHA256 with ECDSA”算法签署证书。然而,我被困在下面的片段特定于RSA密钥,我想使用EC密钥。 请帮助我如何使用ECDS

    • 要使用OpenSSL生成私钥和公钥,我已经运行 我将公钥上传到远程服务器。然后将导入。Net Framework(它必须是。Net Framework)C#服务使用它来签署API有效负载: 用上面的代码给出 如果我使用并运行它会生成一个名为的PKCS#12密钥,然后: 使用<code>privateKeyFile=private-key.pem。p12上面的代码似乎对请求进行了签名,但API响应为

    • 我正在尝试用签署现有的摘要。 假设我已经有了一个摘要“mydigest”。尽管如此,我不想使用: 我有ECDSA而不是rsa,所以我假设我不应该使用<code>rsautl</code>它按原样使用输入。 所以我的假设是,我需要一些东西来按原样(mydigest)输入,并用我的ECDSA私钥签名。 我尝试了以下方法,以查看使用不同哈希算法创建的哈希大小是否对符号结果有任何影响: 和 但就输出长度而

    • 我是Openssl的新手,我已经生成了私钥myprivatekey。pem和公钥mypublickey。pem与: 和我的公钥: 接下来我想做的是用通行短语私钥加密我的ecdsa,并对我的公钥进行认证请求,感谢大家的帮助。

    • 问题内容: 我试图从私钥生成公共ECDSA密钥,但是在Internet上如何进行此操作方面,我还没有找到太多帮助。几乎所有内容都是根据公共密钥规范生成公共密钥的,我不知道该如何获得。到目前为止,这是我汇总的内容: 但是,在运行时,出现以下错误: 我究竟做错了什么?有没有更好/更简便的方法可以做到这一点? 编辑:我设法获得一些代码进行编译,但不能正常工作: 当我运行它时,它会生成一个publicKe