最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 一下非对称加密算法加密算法的ECC算法介绍(一):椭圆曲线密码编码学

    大家好,我是 FTD 开发人员。今天我们将介绍非对称加密算法的ECC算法

    ECC算法简介

    ECC是Elliptic Curves Cryptography的缩写,意思是Elliptic Curve Cryptography。与 RSA 算法一样,ECC 算法也是一种公钥算法。最初由 Koblitz 和 Miller 于 1985 年提出,其数学基础是利用椭圆曲线上的有理点形成 Abel 加法群上的椭圆离散对数的计算难度。

    ECC算法的数学理论非常深奥复杂,在工程应用中难以实现,但其单位安全强度比较高,其破译或求解难度基本呈指数级,对黑客来说很难使用。暴力破解的方法。 RSA算法的特点之一是数学原理比较简单,在工程应用中比较容易实现,但其单位安全强度比较低。因此,ECC算法可以提供比RSA加密算法更高的安全强度,且计算能力更小,有效解决了“提高安全强度必须增加密钥长度”的工程实现问题。

    ECC 算法的工作原理

    近年来,人们对ECC的理解不再处于研究阶段,逐渐进入实际应用。例如,国家密码管理局颁布的SM2算法就是基于ECC算法的。让我们看看 ECC 是如何工作的。

    密码学中的椭圆曲线

    定义

    在有限域Fp中定义一条椭圆曲线,常用

    y2=x3+ax+by^2 = x^3 + ax + by2=x3+ax+b

    Fp只有p个元素,p是素数

    Fp,

    a+b≡c(modp), a×b≡c(modp), a/b≡c(modp)a+b≡c (mod quad p), a×b≡c (mod quad p), a/b≡c (mod quad p)a+b≡c(modp), a×b≡c(modp), a/b≡c(modp)

    4a3+27b2≠0(modp)4a^3 + 27b^2 ≠0 (modquad p)4a3+27b2​=0(modp)

    a,b 是小于 p 的非负整数

    x,y属于0到p-1之间的证书,曲线标记为Ep(a,b)

    阶:椭圆曲线上一点P处有一个正整数n,使得nP=O∞,则n为P的阶。若n不存在,则P为无穷阶。点的顺序是存在的。

    椭圆曲线问题

    K=kGK = kGK=kG

    其中K,G是Ep(a,b)上的点椭圆曲线上的有理点椭圆曲线上的有理点,k是小于n的整数,n是点G的阶,给定k和G,很容易计算K,但是给定K和G , 求 k 好难啊!

    因此,设K为公钥,k为私钥,G为基点。

    ECC算法加密过程

    A选择一条椭圆曲线Ep(a,b),以曲线上的一点为基点G

    A选择私钥k,生成公钥K=kG

    A 将 Ep(a,b) 和 k,G 发送给 B

    B收到后将明文编码到Ep(a,b)上的一点M,并生成随机数r

    B计算点C1=M+rK,C2=rG

    B 将 C1、C2 传递给 A

    一个计算C1-kC2=M+rkG-krG=M

    A 解码 M 得到明文

    攻击者只能得到Ep(a,b)、G、K、C1、C2,没有k就不能得到M。

    ECC算法签名验证过程

    A选择一条椭圆曲线Ep(a, b),以曲线上的一点为基点G

    A选择私钥k,生成公钥K=kG

    A生成一个随机数r,计算R(x,y)=rG

    A计算Hash=SHA(M), M’=M(modp)

    A计算S=(Hash+M’k)/r(modp)

    B 得到 S 和 M’, Ep(a,b), K, R(x,y)

    B计算Hash=SHA(M),M’=M(modp)

    B计算R’=(Hash*G+M’K)/S=(HashG+M’*kG)*r/(Hash+M’k)=rG=R(x,y),如果R ‘=R,签名验证成功。

    以上加解密和签名验证过程只是一个例子。在具体应用中,K=kG可以用来改变多种加解密方式。

    ECC算法实现

    定义椭圆曲线上的点(x,y):

    class Pare {
        long x;
        long y;
        public Pare() {
            super();
        }
        public Pare(long x, long y) {
            super();
            this.x = x;
            this.y = y;
        }
        //加法
        public Pare add(Pare pare) {
            if (this.x == Integer.MAX_VALUE) {//为无穷大时O+P=P
                return pare;
            }
            Pare res = new Pare();
            if (this.y == pare.y && this.x == pare.x) {//相等时
                long d = moddivision(3 * this.x * this.x + EccUtil.e.a, EccUtil.e.p, 2 * this.y);
                res.x = d * d - 2 * this.x;
                res.x = mod(res.x, EccUtil.e.p);
                res.y = d * (this.x - res.x) - this.y;
                res.y = mod(res.y, EccUtil.e.p);
            } else if (pare.x - this.x != 0) {
                long d = moddivision(pare.y - this.y, EccUtil.e.p, pare.x - this.x);
                res.x = d * d - this.x - pare.x;
                res.x = mod(res.x, EccUtil.e.p);
    

    白色椭圆药片上两个大写g是什么药_椭圆上点到焦点的距离_椭圆曲线上的有理点

    res.y = d * (this.x - res.x) - this.y; res.y = mod(res.y, EccUtil.e.p); } else {//P Q互逆,返回无穷大 res.x = Integer.MAX_VALUE; res.y = Integer.MAX_VALUE; } return res; } //减法 public Pare less(Pare p) { p.y *= -1; return add(p); } //乘法 public Pare multiply(long num) { Pare p = new Pare(this.x, this.y); for (long i = 1; i < num; i++) { p = p.add(this); } return p; } //求余,解决负号问题 public long mod(long a, long b) { a = a % b; while (a < 0) { a += b; } return a; } //求余取商(a mod b)/c /*public long moddivision(long a, long b, long c) { a = mod(a,b); while(a%c != 0) { a += b; } a = a/c; return a; }*/ public long moddivision(long a, long b, long c) { a = mod(a, b); c = mod(c, b); a = a * EccMath.exgcd(c, b); return mod(a, b); } @Override public String toString() { return EccTools.obox(EccTools.long2hexStr(this.x), 4) + " " + EccTools.obox(EccTools.long2hexStr(this.y), 4); } }

    加密:

    //加密
    public Message encryption(Pare g, Pare pbk, Pare word) {
        pbk = g.multiply(privatekey);//公钥
        int d = new Random().nextInt(1024);//随机数
        Pare dg = g.multiply(d);
        Pare dp = pbk.multiply(d);
        Pare send = word.add(dp);
        return new Message(dg, send);
    }
    

    解密:

    //解密
    public Pare decryption(Message m) {
        Pare pab = m.pa.multiply(this.privatekey);
        Pare result = m.pb.less(pab);
        return result;
    }
    

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 一下非对称加密算法加密算法的ECC算法介绍(一):椭圆曲线密码编码学

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论