【问题标题】:SECP256K1 Verify using SawTooth SwiftSECP256K1 使用 SawTooth Swift 进行验证
【发布时间】:2020-04-17 06:36:12
【问题描述】:

我正在尝试使用 SawTooth SDK 来对 Secp256k1 密钥对进行签名/验证。当我尝试验证时,每个人似乎都期待结束:

let context = Secp256k1Context()

//PrivateKey init
let privateKey = Secp256k1PrivateKey.init(privKey: [0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0xf4,0x27,0x86,0xb5,0xdd,0x7b,0x76,0xba,0xea,0x42,0xa9,0xaa,0x60,0xff,0x4c,0x31,0x23,0xfa,0xf0,0x9b,0x8a])

//PublicKey init
let publicKey = Secp256k1PublicKey.init(pubKey: [0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x..,0x6c,0xd0,0x7b,0xd5,0xa3,0x85,0x6f,0x92,0xe7,0xbc,0x15,0xf3,0x40,0x8a,0xa5,0x4f,0x6c,0x3c,0x11,0x55,0x25,0x37,0x48,0xc9,0x93,0x0d,0x7a,0x18,0x4b,0x29,0x30,0xde,0xcd,0xbf,0xb3,0x94,0x4c,0x7f,0xdf,0xd2,0xda,0x51,0xcd,0x87,0xb5,0x00,0x8a,0x15,0xc5,0x16,0x1c,0x73,0xca])

let message_string = "hello"
let message_bytes: [UInt8] = Array(message_string.utf8)

let signer = Signer(context: context, privateKey: privateKey)

do {
    let signature = try signer.sign(data: message_bytes)
    let verif = try context.verify(signature: signature, data: message_bytes, publicKey: publicKey)
    print(verif)
}
catch {
    print("Verification failed..")
}

我总是得到“验证失败......”知道我做错了什么吗?谢谢!

【问题讨论】:

  • 您明确定义了 priv/pub 键,您确定它们是正确的吗?使用这条曲线,您可以通过私钥与曲线生成点的标量乘法来计算公钥。
  • 啊,我认为你是对的。这些密钥是为 Secp256r1 而不是 k1 生成的。所以不工作正常吗?
  • 添加了答案...

标签: swift cryptography elliptic-curve apple-cryptokit


【解决方案1】:

根据我们上面的讨论添加答案。

是的,你完全正确。

secp256r1 是一条曲线,定义为:

y^2 = x^3-3x+41058363725152142129326129780047268409114441015993725554835256314039467401291

这些常数来自我们在 NSA 的朋友。

另一方面,secp256k1 是由等式定义的曲线:

y^2 = x^3+0x+7

对于满足两个曲线方程的x,y 坐标可能存在一些交叉,但是,对于上述签名过程,就签名而言,公钥不可互换上下文。

请记住,ECC 中的私钥只是 256-bit 数字,但是每条曲线都有自己定义的生成点 G,它必须用标量乘以私钥才能获得公钥(这只是一个点曲线本身)。

因此,您只需将私钥定义为256-bit 数字,然后将其乘以y^2 = x^3+0x+7 曲线生成点02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798

顺便说一句,以上是找到公钥所需的原始数学,在您的sawtooth SDK 中,您可以使用this 方法从私钥中导出公钥。

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多