非对称密钥的,签名和验签,可否理解为另一种加密和解密???

发布时间 2023-05-06 16:43:54作者: vx_guanchaoguo0

背景

  • 突然有人这么一给我干蒙了!

非对称首先想到的是 RSA DSA

  • RSA 也是我们比较熟悉的对称算法 也用的比较多 私钥 公钥
    • 比如 gitlab ssh
    • openssh、生成秘钥、rsa秘钥
  • DSA 用的少 也是非对称的签名算法 也要用到公钥红河私钥

另外一个不常用的 非对称算法 ECC

下面简单的验证一下 RSA的概念的计算过程

  • 原理:基于大数分解困难的 和欧若拉函数 来实现的
    • 例如 两个质数A,B 相乘得到一个 P 但是你很难P推断出两个质数
  • 公钥私钥的过程演示:
  • 1 选择两个质数p 和 q 计算乘积
    • 例如 :phi(12) = 4 有四个质数 1、5 、7 、 11
    • 随机选择两个 p= 7 、p= 11 即n= 7 * 11 = 77
  • 2 计算欧公式 phi(n) = (p-1)(q-1) : (7-1) * (11-1) = 60
  • 3 选择选择一个整数 e作为公钥且 1 < e < phi(n) 并且和phi(n)互质
    • e 选取为 17 得到公钥(n,e)= (77,17)
  • 4 计算私钥d 满足ed ≡ 1(mod phi(n)) 即:d为e的模phi(n)的逆元
    • 使用拓展欧力几德算法得到: d=53 得到私钥(n,d)= (77,53)
  • 5 使用公钥对明文进行加密 ,得到密文C = M^e(mod n)
  • 选择 M =25 C = b^e(mod n) = 00011001 ^ 17(mod 77) = 59
  • 6 使用私钥对密文进行解密 ,得到密文M = C^d(mod n)
    • 选择 C = 59 M = C^e(mod n) = 59^ 53 (mod 77) = 25
下面简单的验证一下 ECC 的概念的计算过程
  • ECDH 是对DH和ECC算法改进和拓展

  • ECDSA 也是对DSA和ECC算法改进和拓展

  • ECC原理:利用椭圆曲线在在有限的上的离散对数

    • 任意取椭圆曲线上两点P、Q 做直线(若P、Q两点重合,则做P点的切线),
    • 交于椭圆曲线的另一点R,那么规定 P + Q + R = 0,也就是 P + Q = - R。
    • P+Q 做椭圆运算 ,给定的n和p则有最高次幂的算法来计算Q=nP 可以算出Q
      • 但是如果Q和P,需要找到n呢?就很难,这就是离散对数数学问题
  • 公钥私钥的过程演示:

  • 1 选择合适的椭圆曲线E 也就是二元方程(至关重要不可泄露)

    • 例如 y²= x³+ax+b
    • a、b为常数 a=1 、b = 6 得到 y²= x³+x+1
  • 2 选择一个点G作为基点且G必须满足其阶n位素数 (至关重要不可泄露)

    • 在有限域上计算在模数p情况下得到
      • x =0 ,y² =6 不满足整数解
      • x =1 ,y² = 8 不满足整数解
      • x =2 ,y² =16 解为y=4或y=-4,其中y=4满足方程
  • 选定一个起点G,可以是椭圆曲线上的任意一点;

    • 选择起始点为 G = (0,1),私钥为 n = 5,已知椭圆曲线上的点为(2,4)
      • G = (0,1);
      • n = 5;
  • 4 计算公钥 P = nG

    • 2G = (2,-3)
    • 3G = (0,-1)
    • 4G = 自相撞
    • 5G = 4G + G = 自相撞
    • 得到 P = nG = 5G = (0,-1)
  • 5 计算私钥 Q = n(x,y)

    • 2n = (2,4) + (2,4) = (3,3)
    • 3n= 自相撞
    • 4n = 自相撞
    • 5n = (3,3) + (2,4) = (6,10)
    • 得到 Q = n(x,y) = 5(2,4) = (6,10)
  • 6 使用公钥对明文进行加密

    • 首先选择一个随机数 k,例如 k = 17。
    • 第一部分 : 计算点 C = kP = 17(0,-1) = (8,15)
    • 第二部分: s = kQ + m = 17(6,10) + 123 = (195,343)
    • 完整密文 (C,s) = ((8,15),(195,343))
  • 7 使用私钥对密文进行解密

    • 对点 C 进行 k 倍的计算得到 kP = 17(0,-1) = (8,15)。
    • 计算 s - kQ = (195,343) - 17(6,10) = 123