2013-01-06 139 views
4

我需要的是获得ECDSA的私人和公共密钥对。斯坦福大学Javascript Crypto Library以非标准方式(https://groups.google.com/forum/?fromgroups#!topic/sjcl-discuss/UaWUyMWS3Rs)做这件事,这对我来说毫无用处 - 比如制作一个MD5库的目的是什么?Javascript ECDSA获取私钥和​​公钥?

有没有一种在JavaScript中使用ECDSA的实际工作方式?

+0

基本上我会远离SJCL。简单的原因:已经发现了类似的多个问题 - 包括非常严重的验证错误,尽管Mike似乎知道他在说什么,但图书馆对于使用加密库的测试还不够完善。我会认真地尝试通过使用SSL(用于基于浏览器的加密)或包装​​库(用于“本地”开发)来解决问题。请注意,我编写了一个Java兼容性库,所以我宁愿推广这个软件。 –

回答

0

首先,您链接的评论是关于ECDSA签名格式的讨论,而不是密钥对。其次,它有点误导:

ECDSA算法的输出是区间[1,n-1]中的两个整数。 ECDSA标准(FIPS 183-3)没有规定如何将这对数字编码为一个字节数组的标准方法。

一种方法是将数字封装在ASN.1序列中。这是ANSI X9.62RFC3278指定的方式。它是Java和(AFAIR)Microsoft CNG/.NET的标准输出。

另一种方法是用零填充数字,使它们具有与n相同的字节长度,然后将它们连接起来。这由PKCS#11和大多数智能卡实现完成。

如果我正确读取源代码,SJCL以第二种方式编码ECDSA签名。您可以轻松将此格式转换为第一个格式。

+0

是的,这是一个从2个二进制字节串到2个**符号**整数的简单转换,以相对简单的BER格式(具有两个INTEGER的SEQUENCE)进行封装。但是请好好测试一下,因为这种转换经常**会出错。 –