繁体   English   中英

使用椭圆曲线密码学验证签名

[英]Verify signature using elliptic curve cryptography

我需要验证包含多个值的消息的签名。 我仅有的参数是签名,公钥和值本身。 用于创建签名的算法是具有192位的椭圆曲线密码学。 我已经准备尝试在网上查找代码示例,但是在这种情况下我什么都没找到。

使用Java进行验证时,有人对这种算法有经验吗? 您能否提供代码或示例链接?

谢谢您的帮助!

您那里的信息有点短缺...

有几种使用椭圆曲线的签名方案,但是最广泛的(到目前为止)是ECDSA 然后,您必须担心以下几点:

  • 签名对位序列进行操作。 每个数据位必须正确。 在这里,您具有“值”,因此必须将这些值编码为一系列位(或字节)。 要验证签名,您必须使用与用于生成签名的编码相同的编码。

  • ECDSA首先使用密码哈希函数对输入数据进行哈希处理 同样,您必须使用与用于生成签名相同的签名。 作为一个疯狂的猜测,我会说哈希函数可能是SHA-1

  • ECDSA以椭圆曲线运行 曲线的大小不足以定义曲线:有很多192位曲线。 但是,由于定义自己的曲线很困难,因此大多数人都使用FIPS 186-3中定义的15条曲线中的一条 这15条曲线中的一条具有“ 192位大小”(称为“ P-192”),因此签名很有可能使用该曲线。

  • ECDSA公钥是曲线点的编码。 曲线点名义上是一对整数(X,Y) (这些是该点的“坐标”)。 这些整数来自曲线所在的基本字段。 对于P-192曲线,坐标是192位整数。 这样的公钥的“正常”编码是一个49字节的字符串:第一个字节将是0x02,然后是big-endian无符号X编码(24字节),然后是Y的无符号编码(24字节)。 。 其他编码也是可能的。

  • ECDSA签名正式包含两个整数值,通常称为rs (也称为192位整数)。 同样,您拥有的签名可能是字节序列,是两个整数的编码。 有两种常见的编码,一种是两种值的原始big-endian无符号编码(因此为48字节签名),另一种是使用ASN.1(长度为53或54字节左右的签名)。

正如@Ashkan所建议的那样,使用Bouncy Castle是一个好主意。 但是,正如您所看到的,有关您的情况有很多假设。 如果要全面了解发生的情况,请购买ANSI X9.62:2005 (ECDSA标准)的副本。 请注意,数学内容相当繁重。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM