从数学角度讲解DH密钥交换算法、非对称加密、数字签名

背景知识

数字可以分为两大部分:
不可再分的数:prime number质数
可以再分的数:composite number 和数

每个数字可以描述为一个“锁”
每个数字有且只有一种质因数分解,把质因数分解看做是“钥匙”,任何两个数的质因数分解都不同。

对于锁,有一个基本的要求:朝一个方向容易,朝反方向难。one-way function单向函数。
在数学中,模算术(时钟算术)就是一个单向函数 X MOD P,如果P选择为质数,那么其值会在时钟上(1到P-1上)等可能均匀分布。
正向计算 3 x 3^x 3x mod 17=?很容易
反向计算 3 ? 3^? 3? mod 17 = 12不容易,比如说P选择一个数百位的质数,那么想求出?只能采用试错法。

DH密钥交换算法

密钥交换算法Diffle-Hellman算法。使用以下几个步骤进行:

  1. 卡管系统与POS机就质模数P,这里选择17和生成元3达成一致,这个是所有人都可以知道的。

  2. 卡管选择一个私有随机数,比如说15, 3 15 3^{15} 315 mod 17 = 6,POS机发送一个请求给卡管,卡管把6发给pos机

  3. pos机选择一个私有随机数,比如说13, 3 13 3^{13} 313 mod 17 = 12,卡管发送一个请求给pos机,pos机把12发给卡管。

    下面就是使用共享密钥加解密的过程,有DES,3DES,AES等,这些算法是来创建一个信息映射方式。

  4. 此时卡管使用 1 2 15 12^{15} 1215 mod 17=10作为对称密钥,对数据进行加密,加密就是使用密钥对信息进行一种映射。等待pos机的请求。

  5. pos机发送请求,得到卡管发送的数据后,使用 6 13 6^{13} 613 mod 17 = 10对数据进行解密,解密就是使用密钥对信息映射进行逆转,完成共享密钥以及加解密的过程。

原因在于 卡管侧,将pos机侧传入的12 转换为pos机侧的值
( 3 13 m o d 17 ) 15 m o d 17 = ( 3 13 ) 15 m o d 17 (3^{13} mod 17)^{15} mod 17 = (3^{13})^{15} mod 17 (313mod17)15mod17=(313)15mod17
与 pos机侧,将卡管侧传入的6转换为卡管侧的值
( 3 15 m o d 17 ) 13 m o d 17 = ( 3 15 ) 13 m o d 17 (3^{15} mod 17)^{13} mod 17 = (3^{15})^{13} mod 17 (315mod17)13mod17=(315)13mod17
即3取两个私有数字次幂,mod 17得到共享密钥。

整个过程如下图所示:
在这里插入图片描述
而对于外部监听者来说,其只得到了17,3,6,12,如果不知道双方选择的任一私有随机数,是无法得到共享密钥的。

其密码强度就在于反向计算 3 ? 3^? 3?mod 17 = 12不容易,比如说P选择一个数百位的质数,那么想求出?只能采用试错法

非对称密码技术

思路就是卡管留一把钥匙,把打开的锁给pos机,pos机将交易数据加锁之后再给卡管,卡管通过钥匙打开锁,取出交易数据。
在这里插入图片描述
以颜色作为案例来说明:

卡管有一个私钥,比如说红色。同时,有一个颜色生成器,可以生成某种颜色的互补色,使两种颜色混合后为透明色。生成红色的互补色蓝绿色,作为卡管的公钥。

将公钥发给pos机,交易数据模拟为黄色,pos机将黄色和黄绿色混合,生成一种混合色,将这种混合色再返回给卡管。

卡管将自己的私钥红色混合pos机发回的混合色,就得到了黄色。而其他人如果没有红色,只有混合色,只能采用试错法来试图抵消。

单向函数

这里涉及到一个单向函数,就是混合颜色输出第三种颜色很容易,而反向很难。

这里选择的仍是模算术。即 m e m^e me mod N = c, 其中e为公开指数,N为随机数,e和N合并起来为公钥,其中m为pos机的交易数据,c为pos机交易数据加密后的数据。

正向得到c很容易

反向,如果已知e N c,求m很难

陷门单向函数

另外,还需要一个特殊的单向函数,trap door one-way function,陷门单向函数。前面说的正向函数要求正向容易,反向很难,但是存在一个特殊情况,如果你有关于陷门的特殊信息,那么反向也会很容易。

陷门的思路是取c的其他次幂,比如说d次幂,解除我们原来对m所进行的e次幂运算

c d c^d cd mod N = m得到最初的信息m。

即找到这个式子: m e ∗ d m^{e*d} med mod N = m --式(1)

其中d即为私钥,所以陷门单向函数用于生成d。

这里涉及到欧拉函数Φ(N),此函数衡量数的可分性,函数的输出是:有多少小于或等于N的整数,不同N具有任何公因数。比如Φ(8)=4(1,3,5,7),其有一个特征,即Φ(质数N)=N-1。

比如说我们随机生成一个超过150位的质数P1,再生成一个位数相当的第二个质数P2,将这两个质数相乘得到N。这个乘法操作很快。而反向,已知N,要将其质数分解,只能进行试错。

我们如果知道了N如何进行质数分解,通过Φ(P1*P2)=Φ(P1)*Φ(P2)=(P1-1)*(P2-1),求解Φ(N)会很容易。

将Φ(N)函数与模幂算术联系起来,有公式 m Φ ( n ) m^{Φ(n)} mΦ(n) mod N = 1。比如 7 Φ ( 3 ) 7^{Φ(3)} 7Φ(3) mod 3 = 1

m* m k ∗ Φ ( n ) m^{k*Φ(n)} mkΦ(n) mod N = 1 k 1^{k} 1k*m,即 m k ∗ Φ ( n ) + 1 m^{k*Φ(n)+1} mkΦ(n)+1 mod N = m --式(2)

比较式(1)和式(2),e*d = k*Φ(n) + 1,只有当n的因数分解已知时,计算d才容易,这是一道陷门,可以消除e的作用。其中d就是私钥。

举例

POS机将交易数据通过某种信息映射为m = 89,

在卡管侧,P1=53,P2=59,N=P1*P2=3127,Φ(n)=52*58=3016

选择e为奇数,且与Φ(n)没有相同公因数,如e=3,求出d = 2011

卡管系统把N与e作为公钥发送给POS机,相当于开着的锁,POS机把交易数据m=89通过 m e m^e me mod N = c,c=1394作为加密后的信息,发送给卡管系统。

c d c^d cd mod N = m,即 139 4 2011 1394^{2011} 13942011 mod 3127 = 89,就得到了交易数据。

整个过程:
在这里插入图片描述
其加密的强度在于已知N,求其质数分解的P1,P2的难度

数字签名和验签

验签过程如下:

e和N为公钥,d为私钥,c为加密后的数据,m为真实数据

  1. 先对原始请求数据除sign外做哈希摘要

    value=m&sign=c

    对原始数据m做 m d m^d md mod N = c

  2. 对sign用使用第三方接口的公钥进行解签

    c e c^e ce mod N = m,因为 m e ∗ d m^{e*d} med mod N = m

  3. 将两者内容进行对比

    将解签得到的m做哈希摘要,将两个内容sign进行比对,一致,就是验签成功

整个过程
在这里插入图片描述

数字签名(Digital Signature)技术是非对称加密算法的典型应用。保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

公钥加密,私钥解密

私钥签名,公钥验签

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值