密码学基础知识

从一个喜欢的行业被迫调岗到安全行业,我也纠结的不行。

1.术语介绍
进行电子交易的互联网用户所面临的安全问题有:
- 保密性
   如何保证电子商务中涉及的大量保密信息在公开网络的传输过程中不被窃取
- 完整性
  如何保证电子商务中所传输的交易信息不被中途篡改及通过重复发送进行虚假交易
- 身份认证与授权
  在电子商务的交易过程中,如何对双方进行认证,以保证交易双方身份的正确性
- 抗抵赖
  在电子商务的交易完成后,如何保证交易的任何一方无法否认已发生的交易

密码技术,如加密技术和数字签名技术是解决网络安全的核心技术;是实现所有安全服务的重要基础。
- 密码: 是一组含有参数的变换
- 明文(plaintext): 作为加密输入的原始信息
- 加密算法: 变换函数
- 密文(ciphertext):明文变换结果
- 密钥(key): 参与变换的参数

通常一个完整密码体制要包括如下五个要素M,C,K,E,D
M : 是可能明文的有限集称为明文空间
C: 是可能密文的有限集称为密文空间
K: 是一切可能密钥构成的有限集称为密钥空间

对于密钥空间的任一密钥,有一个加密算法和相应的解密算法使得
ek: M->C 和 dk: C->M
分别为加密解密函数满足dk(ek(x))=x, 这里x为 M中的元素

2.加密算法分类

  • 对称加密:加密和解密用同样的密钥;

  • 非对称加密:分公钥和私钥。

3.用途
- 加密的概念
在通信过程中,为了保证数据在网路中的机密性,通常先对数据进行加密,然后将加密得到的密文发送给接收方,接收方用解密密钥解开密文,得到相应的明文信息,这里的加解密算法可分对称和非对称。上世纪八十年代前,对称加密基本统治了信息安全领域,它有很多优点:速度快,安全性高等,但缺点也不少:1.随着通信人数的增加密钥数量成幂级数增长;2.仅限用于安全信道,因为在通信过程中需要将密钥连同密文一块发送给接收方,接收方才能拿到密钥并对密文进行解密,这样如果信道不安全就会造成密钥泄露;3.正因为缺点2,所以对称密钥不适用于数字签名和不可否认性。
为此,上世纪八十年代末期,诞生了非对称加密算法,该加密算法的密钥分两类:公钥和私钥。公钥就是公开的密钥,私钥则只有钥匙持有者知道,其他人都不知道。

  • 公钥加密
    1.B 将它的公钥发送给 A(公钥是公开的,不用担心泄露);
    2.A 收到B的公钥,并用该公钥加密数据信息得到密文,然后将密文发送给 B;
    3.B 收到密文后 用自己的私钥解开密文,得到真实的数据信息。
  • 公钥解密
    B得到真实数据信息后想着给A回复一条信息:
    4.B 用自己的私钥对回复信息进行加密;
    5.A 收到密文信息后用B的公钥进行解密。
  • 数字签名
    微软官方给出的定义:“数字签名”是指可以添加到文件的电子安全标记。使用它可以验证文件的发行者以及帮助验证文件自被数字签名后是否发生更改。
    回顾上面的通信过程:
    1.B用自己的私钥加密信息,发送给A;
    2.A接收到消息后用B的公钥解密得到消息。
    那么A怎么确认收到的密文信息的真实性,即是否被人劫持后恶意篡改,然后转发出来。
    前面已经提到数字签名的功能,下面具体介绍它是怎么发挥作用的。
    从B回复消息给A出发,现在B拿些回复给A的明文信息开始琢磨,怎么让A端收到信息后能通过某种方式去验证信息的完整性呢?咦,关键在于信息验证,那么验证的方法不就是两种吗?!1.真实事物1 和 待确认身份的事物2以某种度量方法进行对比,若达到匹配阈值则可确认事物2 与 真实事物1 一致,反之则否。例如 两个字符串是否相同,进行匹配不就有答案了; 2.真实事物1 和待确认身份的事物2 以第三方权威机构做裁判,若第三方承认则为真,反之亦否。例如 如来佛裁定真假孙悟空(这里不怀疑如来佛的权威性)。
    回到正题,B选择了方案1,将回复的信息和真实信息都发送给A。具体操作是:
    1.B 用自己的私钥加密回复给A的明文信息,然后将其附加在明文信息后一起发送给A
    2.A 收到B发来的数据后,分别取出明文信息和密文信息,然后用B的公钥解密密文,得到真实的明文信息(因为私钥在B自己手里,也就是说只有B能加密。其他人尽管能解密得到真实的明文信息但不能将其修改后重新加密),接着就可以通过比对消息比对来验证收到的明文信息是否被修改了。
    有人可能会想,能不能将明文信息和加密后的信息同时修改篡改,并且达到两者正好匹配的程度(这样A收到数据后,也没法验证数据的完整性)。我目前也解释不清楚,但我肯定这种可能的概率应该是无穷小,要不现有的加密手段都歇菜了。
    以上的想法是直接加密明文内容,但我们知道非对称加密的效率是很低的,不适用于加密大量数据,于是有了hash函数的产生。
    重新梳理下上面的验证过程:要达到验证目的,对明文信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。当然,不怀好意的人也可以修改信息内容的同时也修改hash值,从而让它们可以相匹配,为了防止这种情况,hash值一般都会加密后(也就是签名)再和信息一起发送。
    完整的过程就是:
    1.A算出待发送的明文信息的hash值,然后用A自己的私钥对hash值加密,将其附加在明文信息后组成一个数据包,接着用B的公钥对数据包加密,最后将加密后的数据包发送给B ;
    2.B 收到加密后的数据包后,用B自己的私钥进行解密,得到明文信息及加密的hash值,然后用A的公钥解密hash值密文,得到hash值,接着用与A相同的hash函数计算明文信息的hash值,最后对比两个hash值判断信息的完整性和发送方的身份。
    3.B回复消息给A则采用同样的方式。。。
    分析整个过程的具体原理:
    a.机密性:数据在传输过程中最外层采用了公钥加密,故保证了信息的机密性。
    b.完整性:数据在传输过程中的内层采用了数字签名(hash值+私钥加密),故验证了数据的完整性。
  • 数字证书
    问题就这样结束了吗?远没有,试想,虽然B确定了A发给他的信息是未修改过的,但是怎么确定给他回信息的就是A?如果有不怀好意的C把B保存的A的公钥偷偷换成自己的,并冒用A的名义给B发信息呢?
    要解决这个问题,B只要能确定自己持有的公钥到底是不是A的就行了,这就需要用到数字证书。
    在日常生活中,如果我们要验证一个人的身份,通常的做法是查看他的身份证。我们信任身份证颁发机构即政府机构的公信力,因此只要验证一个人的身份证不是伪造的,我们就相信这个人的身份和身份证上所描述的是一致的。
    数字证书就是一个人或者组织在网络世界中的身份证,其发证机关是证书管理机构(certificate authority,CA)。CA用自己的私钥对用户的身份信息(主要是用户名和该用户的公钥)进行签名,该签名和用户的身份信息一起就形成了证书。
    有了数字证书以后,A和想跟B通信,就可以通过B的数字证书来获取B的公钥,以达到验证自己手中的公钥到底是不是B的目的。过程是这样的:
    1、B给A回信的时候,在信息后面附上了自己的数字证书
    2、A收到B的回信以后,会取出附带的数字证书,并读取证书中的发布机构(Issuer),然后从操作系统的受信任证书机构列表中查找该证书办发机构的公钥,如果找不到,说明这个证书颁发机构是个不受信任的,B发过来的信息当然也是不安全的
    3、使用上一步取到的证书颁发机构的公钥,解出数字证书,得到可能是B的用户信息和数字签名
    4、A通过证书中指定的加密算法对可能是B的用户信息进行hash加密
    5、加密后的结果和证书中解出的数字签名进行对比,如果相同,就说明这份用户信息确实是B的,也就是说用户信息中包含的公钥确实是B的
    这样就验证了B身份的真实性,B验证A身份的过程也一样。

RSA的密钥对生成,及其加解密对全过程:
既然公钥是(e,N),私钥是(d,N)所以密钥对即为(e,d,N),但密钥对是怎样生成的?步骤如下:

  • 选择两个不相等的素数:
    我们准备两个很小对质数 p 、q:
    p = 17
    q = 19
  • 求N:
    N = p * q = 323
  • 求L:
    L = lcm(p-1, q-1)= lcm(16,18) = 144
    144为16和18对最小公倍数
  • 求e :
    e必须满足两个条件:e是一个比1大比L小的数,e和L的最大公约数为1
    用gcd(X,Y)来表示X,Y的最大公约数则e条件如下:
    1 < e < L
    之所以需要e和L的最大公约数为1是为了保证一定存在解密时需要使用的数d。现在我们已经求出了e和N也就是说我们已经生成了密钥对中的公钥了。
  • 求d :
    数d是由数e计算出来的。d、e和L之间必须满足以下关系:
    1 < d < L
    e*d mod L = 1 //mod 求余
    只要d满足上述2个条件,则通过e和N进行加密的密文就可以用d和N进行解密。
    简单地说条件2是为了保证密文解密后的数据就是明文。
    现在私钥自然也已经生成了,密钥对也就自然生成了。

个人觉得参考文献3讲的非常清晰,相比之下显得有些画蛇添足。也罢,谁让我没早点发现这么好的资料呢。。

参考文献
[1]非对称加密原理解析
[2]带你彻底理解RSA算法原理
[3]数字证书原理
[4]基于 Token 的身份验证
[5]USB key身份认证介绍

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值