ECDSA数字签名算法

by admin on 2018年10月24日

一、ECDSA概述

椭圆曲线数字签名算法(ECDSA)是动椭圆曲线密码(ECC)对数字签名算法(DSA)的模仿。ECDSA于1999年改成ANSI标准,并吃2000年改为IEEE和NIST标准。它于1998年既已为ISO所接受,并且包含它的任何组成部分正经也以ISO的设想之中。与普通的离散对数问题(discrete
logarithm problem  DLP)和运分解问题(integer factorization problem
 IFP)不同,椭圆曲线离散对数问题(elliptic curve discrete logarithm
problem
 ECDLP)没有亚指数时间之缓解方式。因此椭圆曲线密码的单位比特强度要逾其它公钥体制。
 
数字签名算法(DSA)在阿联酋信息处理标准FIPS中发出详细阐述,称为数字签名标准。它的安全性基于素域上的离散对数问题。椭圆曲线密码(ECC)由Neal
Koblitz和Victor
Miller于1985年说明。它好用作是椭圆曲线对原先依据离散对数问题(DLP)的密码系统的模仿,只是群元素由素域中之素数换为产生限域上的椭圆曲线上的点。椭圆曲线密码体制的安全性基于椭圆曲线离散对数问题(ECDLP)的难解性。椭圆曲线离散对数问题颇为难给离散对数问题,椭圆曲线密码系统的单位比特强度要多超过传统的离散对反复系统。因此在以比较短的密钥的景下,ECC可以上于DL系统一样的安全级别。这带来的补益虽是计量参数还有些,密钥更缺乏,运算速度更快,签名也更紧缺小。因此椭圆曲线密码尤其适用于处理能力、存储空间、带富和功耗受限的场合

毕业回南阳继,一直惦记拿老家的书收拾一下,可是因为上班时每周放假一龙半,自己吗未思坐这种事情请假,所以拖到了今天。

二、ECDSA原理

ECDSA是ECC与DSA的成,整个签名过程及DSA类似,所不一致的是签约中使用的算法也ECC,最后署出来的价为是分为r,s。
 签名过程如下:
   1、选择一样长条椭圆曲线Ep(a,b),和基点G;
   2、选择个人密钥k(k<n,n为G的品),利用重心G计算公开密钥K=kG;
   3、产生一个无限制整数r(r<n),计算点R=rG;
   4、将原来数与点R的坐标值x,y作为参数,计算SHA1做啊hash,即Hash=SHA1(原数,x,y);
   5、计算s≡r – Hash * k (mod n)
   6、r和s做呢签证名值,如果r和s其中一个为0,重新于第3步开始实施
证实过程如下:
   1、接受方在接到信(m)和签名值(r,s)后,进行以下运算
   2、计算:sG+H(m)P=(x1,y1), r1≡ x1 mod p。
   3、验证等式:r1 ≡ r mod p。
   4、如果等式成立,接受签约,否则签名无效。
 

本人的书还位于县城的挺姐家,昨天下午我先行过去收拾了一晃,筛选了有要好无扣的写,主要是占便宜、励志和片心理学方面的,也给外甥女留了一晃其会看之开。平时尚无感到有略书,收拾的当儿才发现最难为了。一共发生15箱和2袋,这是惩治好的样子:

三、JDK中对于ECDSA的实现

特别注意的是:ECDSA签名算法,只是当JDK1.7后才发出落实,最广的场面是在微软的产品之装置的出品密钥的设计

昨晚本人把开由第二楼将到了千篇一律楼,今天早起于床晚了碰,大姐夫一个人口将开还装到货车及了。因为自己出租的房屋当三楼,而且小区的大门深狭窄,货车只能停于门口,所以搬着比麻烦,我就是求助了二姐夫。

1、KeyPairGenerator

KeyPairGenerator 类用于转移公钥和私钥对。密钥对生成器是使 getInstance
工厂方法(返回一个让定类的实例的静态方法)构造的。
特定算法的密钥对生成器可以创造能够同这算法一起用的公钥/私钥对。它还好拿一定于算法的参数和每个转的密钥关联。
有少数栽生成密钥对的点子:与算法无关的主意及一定于算法的法门。
 

下面我们将按照指定ECDSA算法去变通秘钥KeyPairGenerator.getInstance(“EC”);

交了南阳,我们所以电动车将书运到了楼下,然后三独人拿写搬至了屋里,因为极度烫,这么冷的龙自己只通过了短袖。

2、ECDSAPublicKey

ECDSA公用密钥的接口

中午12触及吃罢饭后,我就起来办。我拿有的箱及口袋都开辟了,把书放到床上。根据自己之喜爱好,先把小说挑了出来,本来觉得自己出成百上千短篇小说,这时候才意识除去上海译文出版社的“短经典”系列,短篇小说只生几十照,更多的或长篇小说,很多越400页的长篇小说都是购买来还尚未看。长篇小说因为数量很多,部分自己根据颜色进行了摆设,有黑色、红/黄色和另外颜料。

3、ECDSAPublicKey

 ECDSA 专用密钥的接口

收拾好小说之后,我将豪尔赫·路易斯·博尔赫斯与余华的全集单独在一个地方,卡尔维诺的开则不都,但是呢起抢10本了,比较多的还有加西亚·马尔克斯、米兰·昆德拉、欧内斯特·海明威、V.S.奈保尔、保罗·奥斯特、罗贝托·波拉尼奥、翁贝托·艾柯、唐诺、西西、梁文道、季羡林和周国平等。

4、PKCS8EncodedKeySpec

PKCS8EncodedKeySpec类继承EncodedKeySpec类,以编码格式来表示私钥。
PKCS8EncodedKeySpec类使用PKCS#8正式作为密钥规范管理之编码格式

太易的凡小说,所以我发不少关于小说创作和剖析的书本,我吧管其单独在同。另外一类似是暨书相关的写,爱屋及乌,平时相跟书有关的题我一般还见面买下,当然,这看似书被生出很多败书,只当是吸取教训了。年晚关禁闭了片刻文学史,所以将文学史相关的开吗单身放了。

5、Signature

Signature
类用来吧应用程序提供数字签名算法功能。数字签名用于确保数字数据的征和完整性。
 
每当享有算法当中,数字签名可以是 NIST 标准的 ECDSA,它采用 ECDSA 和
SHA-1。可以以祭 SHA-1 消息摘要算法的 ECDSA 算法指定为SHA1withECDSA。
 

盖自己最好欣赏的鲜独时代是古希腊、古罗马以及民国,所以管有关的书本单独放,其中民国历史及文人的可比多,我或者再爱好文人有追的期。耶路撒冷及巴黎,是自己除了罗马之外比较欣赏的少数单地方,所以管两者相关的书放在一起。

四、实现

中ECDSA的实现步骤类似于我们前面学的RSA数字签名算法
兑现步骤
首先步:初始化化秘钥组,生成ECDSA算法的公钥和私钥
仲步:执行私钥签名, 使用私钥签名,生成私钥签名
其三步:执行公钥签名,生成公钥签名
季步:使用公钥验证私钥签名
备考:所谓的公钥与私钥匙成对出现。
遵从之极就是是“私钥签名、公钥验证”。
 
示范代码如下:

import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.ECPrivateKey;
import java.security.interfaces.ECPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

/**
 * 椭圆曲线签名算法
 * 
 * 速度快 强度高 签名短
 * 
 * 实现方 JDK1.7/BC
 */
public class ECDSAUtil {

    private static String str = "hello";

    public static void main(String[] args) {
        jdkECDSA();
    }

    public static void jdkECDSA() {

        try {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("EC");
            keyPairGenerator.initialize(256);

            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();
            ECPrivateKey ecPrivateKey = (ECPrivateKey) keyPair.getPrivate();

            // 2.执行签名
            PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ecPrivateKey.getEncoded());
            KeyFactory keyFactory = KeyFactory.getInstance("EC");

            PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
            Signature signature = Signature.getInstance("SHA1withECDSA");
            signature.initSign(privateKey);

            signature.update(str.getBytes());
            byte[] sign = signature.sign();

            // 验证签名
            X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ecPublicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("EC");
            PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
            signature = Signature.getInstance("SHA1withECDSA");
            signature.initVerify(publicKey);
            signature.update(str.getBytes());

            boolean bool = signature.verify(sign);
            System.out.println(bool);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

书架太小了,只剩余零星单隔间了。我纠结了少时,把评论/议论类的书放满了内部一个隔间。最后一个隔间放了几按照哲学与散文。这是书架摆满的规范:

五、ECDSA标准

ECDSA的正儿八经和规范草案有为数不少,其中既透过颁发部门获准的发:ANSI X9.62 ,FIPS
186-2,IEEE 1363-2000,ISO 14888-3。ECDSA为让密码标准化组织(SECG,这是一个从密码标准通用性潜力研究的团)加以规范。

 

自看了看床上剩余的题,数量最为多之是人物传记、哲学、散文和诗文,外加一些未极端好分类的开。因为书架就这样可怜,我工资呢比较低,最近尽管打算先不打书架了,这是铺上多余的题:

主要的ECDSA标准

卧室里放之是近期看之书写,没有仔细分类:

1.ANSI X9.62

该项目起为1995年,并让1999年业内作为ANSI标准发布。ANSI X9.62有着高安全性和通用性。它的基域可以是Fp,也可是F2m。F2m中的元素得以以多项式形式还是正规基形式来代表。若用多项式形式,ANSI X9.62求模多项式为不可约三项式,标准中提供了有些不行约三项式,另外还为来了一个不可约五项式。为了增强通用性,针对各一个域供了一个模多项式。若采用正规基表示方法,ANSI X9.62规定采用高斯正规基。椭圆曲线最根本的安康因素是n,即重点阶,ANSI X9.62之n大于2160。椭圆曲线是以随机方式选取的。ANSI X9.62规定使用以字节为单位之字符串形式来代表曲线上的点,ASN.1语法可以解地描述域参数,公钥和签署。
 

惩治一下,还是出便宜的,至少发现了三本重复的写《傲慢和偏见》、《幽灵代笔》和《略萨传》,基本上还是以市了从未有过看,又再度购买了。最着重的是对协调的书有矣于清晰的摸底,方便以后阅读。而且,更加强烈自己的喜好好,减少其他书籍的购入,先把这些打算看之羁押了再说。

2.FIPS 186-2

1997年,NIST开始制定包括椭圆曲线和RSA签名算法的FIPS 186正经。1998年,NIST推出了FIPS186,它包括RSA与DSA数字签名方案,这个方案吗称FIPS 186-1。1999年NIST又面向美国G0vment推出了15种植椭圆曲线。这些曲线都遵循ANSI X9.62和IEEE
哲学原理1363-2000底形式。2000年,包含ANSI X9.62着验证的ECDSA,使用上述曲线的FIPS 186-2问世。

不管是博尔赫斯之“如果发生天堂,应该是图书馆的规范”,还是弗吉尼亚·伍尔夫的“一间自己的房”,抑或是魏小河之“用平等之中书房抵抗全世界”,在我看来,让自己老快乐的恒久是振奋层面的追。

3. IEEE 1363-2000

该标准为2000年看成IEEE标准问世。IEEE 1363底覆盖面大广阔,包括公钥加密,密钥协商,基于IFP、DLP、ECDLP的数字签名。它和ANSI X9.62暨FIPS 186意两样,它从不最低安全性限制(比如不再对重点阶进行限),用户可发尽的擅自。

于是IEEE 1363-2000并无是一个安然无恙规范,也不有优良的通用性,它的义在于给各种应用提供参考。它的基域可以是,也得是。
中的因素得以因差不多项式形式要正规基形式来代表。中元素表示形式是整数,中元素表示形式是字符串。这跟ANSI X9. 62及FIPS 186是一致的。

本人来同内书房(房子是租的),我思创造不曾有的世界。

4.ISO/IEC 14888-3

是标准含多签算法,其中ECDSA部分及ANSI X9.62一律。

只要大家发出趣味可以研究下,ECDSA算法在比特币中因故法。

同书写一世界。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图