我使用"secp192k1“曲线来生成使用ECDSA方案进行数据签名的密钥。签名使用BouncyCastle提供的“SHA3-256 256withECDSA”算法生成。
理论上,签名的长度应该是192*2/8 =48个字节。相反,这个长度从54到56不等。
我的应用程序需要一个固定长度的签名。我怎样才能做到这一点?
发布于 2017-03-24 11:04:52
要对签名进行编码,首先必须解析dave_thomson_085提供的链接答案中也显示的ASN.1结构。在选择的编程语言/运行时中获得两个整数之后,就需要将它们编码为两个静态大小的整数编码。这些整数(通常)需要是大端/网络顺序,无符号整数。
要做到这一点,您需要从RSA规范中实现一个名为I2OSP的函数。将这两个数字和键大小(曲线顺序的大小)向上舍入为字节(即192 / 8 = 24字节)。
有两种方法可以做到这一点:
后者可能更快,因为它只需要字节操作。我通常选择后者,但我看到许多密码学家(在我看来是天真的)做第一。
最后,您只需将数字和预置连接起来--您已经完成了(在RSA中也有OS2IP,以防您需要做相反的操作)。
https://crypto.stackexchange.com/questions/44988
复制相似问题