密码学相关基础二(非对称加密和数字签名篇)

之前对称加密相关基础可以浏览https://blog.csdn.net/qq_44754515/article/details/123577250

一、密钥

1.1、定义

  • 密钥就是一个巨大的数字
  • 密钥与明文等价

比方一个AES256的密钥如下图:由十六进制组成
在这里插入图片描述
在对称加密的过程中,明文和密文都只通过同一把密钥加密解密。
密码学相关基础二(非对称加密和数字签名篇)_第1张图片
密钥最大的好处在于摆脱了之前依靠加密算法保密的问题,而现在我只需要保密这个密钥,算法公开都完全没事,保密的难度大大减小。

1.2、密钥管理和配送

那么密钥的管理和配送就成了最大的问题。
首先密钥管理就保存在自己二点安全设备中或者加密管理等。
而密钥的配送是非常容易出现安全问题的,目前一共有一下几种解决办法:

  1. 事先共享密钥,即两方事先沟通好,在没有第三方的参与下将密钥保存
  2. 密钥分配中心解决,即KDC,给一个企业分配一个密钥中心。每一个注册进来的用户给它分配一个自己的私钥,而KDC自己保存着一个公钥,当两个主体相互通讯时,需要向KDC申请一个对称密钥(也叫会话密钥)。用公钥加密这个对称密钥,然后通过他们手里的私钥去进行解密。之后他们的每次通讯都使用这个对称密钥进行加密。而这个会话密钥是用完就丢弃的,即本次会话结束后丢弃,下次进行会话KDC会重新分配一个新的对称密钥。
  3. Diffie-Hellman密钥交换,即DH算法
    密码学相关基础二(非对称加密和数字签名篇)_第2张图片
    一般交换密钥我们需要知道有这样一种算法。

1.3、非对称加密算法

1、定义
一个是公开密钥,另一个是私有密钥公钥用作加密,私钥则用作解密使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;

2、常用的非堆成加密算法

  • RSA
    是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。目前使用最广泛的公钥密码算法,比方PDF加密,HTTPS中的SSL层,TTL协议都是基于该算法加密。
  • SM2
    是中华人民共和国政府采用的一种公开密钥加密标准,由国家密码管理局于2010年12月17日发布,相关标准为“GM/T 0003-2012 《SM2椭圆曲线公钥密码算法》”。2016年,成为中国国家密码标准(GB/T 32918-2016),缺点是Adobe不支持,需要特定的阅读器去定制实现。

1.4、单向散列函数

  • 定义

又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来,为了能够确认完整性,消息中哪怕只有1比特的改变,也必须有很高的概率产生不同的散列值。(仍然可能存在哈希碰撞的可能)且计算散列值的速度非常快。

  • 单向散列函数的碰撞

两个不同的消息产生同一个散列值的情况称为碰撞。 只要散列值的长度是固定的,那碰撞是必然的。

难以发现碰撞的性质称为抗碰撞性。正是因为在有限的范围内碰撞是必然的,所才有抗碰撞性可言。

当给定某条消息的散列值时,单向散列函数必须确保要找到和该条消息具有相同散列值的另外一条消息是非常困难的。这一性质称为弱抗碰撞性单向散列函数必须具备弱抗碰撞性

和弱抗碰撞性相对的,还有强抗碰撞性。所谓强抗碰撞性,是指**要找到散列值相同的两条不同的消息是非常困难的这一性质。**密码技术中所使用的单向散列函数,不仅要具备弱抗碰撞性,还必须具备强抗碰撞性

  • 常用用途

数字签名、检测软件是否被篡改、基于口令的加密、消息认证码、伪随机数生成器、一次性口令

  • 常用算法
    MD4、MD5、SHA-1 (已攻破)
    SM3、SHA-256 (常用)

1.5、数字签名

  • 定义

如果某一用户使用他的私钥加密明文,任何人都可以用该用户的公钥解密密文;由于私钥只由该用户自己持有,故可以肯定该文件必定出自于该用户;公众可以验证该用户发布的数据或文件是否完整、中途有否曾被篡改,接收者可信赖这些数据、文件确实来自于该用户,这被称作数字签名。

  • 过程

密码学相关基础二(非对称加密和数字签名篇)_第3张图片

上图位用户A使用数字签名向用户B传输一份文件的过程:

  1. 首先,文件经过单向散列函数的处理得到一份占256位的摘要(无论文件多大,经过单向散列函数的处理,生成的摘要都是256位,这份摘要相当于该文件的"指纹",能够唯一地识别文件。注意:只要文件发生改动,经过单向散列函数处理后得到地摘要都会不一样。所以,文件和文件的摘要具有很强的对应关系。

  2. 随后,用户A使用自己地私钥对这份256位地摘要进行加密,得到一份加密地摘要。

  3. 然后,用户A把文件、加密的摘要和公钥打包一起发给用户B。传输的过程中并没有对文件进行加密处理。

  4. 用户B将收到的文件经过单向散列函数处理得出一份256位摘要,这份摘要是通过收到的文件得到的,存在被更改的可能;使用A提供的公钥对收到的"加密的摘要"进行解密得到另一份256位摘要,这份摘要是通过原始文件得到的,一般认为代表真正的文件;然后将两份摘要进行比较。

  5. 如果两份摘要相等,说明文件经过用户A签名之后,在传输的过程中没有被更改;若不相等,说明文件在传输过程中被更改了,或者说已经不是原来的文件了,此时用户A的签名失效

ps:

  • 用户A使用私钥对由文件生成的256位摘要进行加密的过程称为数字签名的过程,得到的"加密的摘要",称为该文件的数据签名。
  • 用户A使用私钥加密的是摘要而不是文件。
  • 用户B验证签名实际上是比较得出的两份摘要是否相等。

使用场合
数字签名解决的核心问题是:确保收到的文件没有被更改
比如:公司的领导给员工下发放假通知,这时候就需要对邮件进行数字签名来证明这个通知是领导发的。员工收到通知,看到上面有领导的签名,于是就可以放心休假了。如果有人冒充领导发通知,上面没有领导的签名,员工休假回来就要扣工资。同样的,通知有了领导的签名,领导想抵赖也不行。

用户B如何确定收到的公钥是用户A发送的,而不是他人冒充用户A发送的呢?即这个公钥的真实性该如何去保证呢?
这就出现了一种体系叫做PKI体系

1.6、PKI

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。
是为了能够更有效的运用公钥而制定的一系列规范和规格的总称。
PKI核心要素

  • 用户——使用 PKI 的人
  • 认证机构——颁发证书的人
  • 仓库——保存证书的数据库

1.6.1、用户

用户包括 2 种,一种是希望使用 PKI 的人,另外一种是希望使用自己注册的公钥的人。

  • 注册公钥的用户:

生成密钥对(可以自己生成也可以由认证机构生成)
在认证机构注册公钥
向认证机构申请证书
申请作废已注册的证书
解密收到的密文
对消息进行数字签名

  • 使用公钥的用户

将消息加密后发送给接收者
验证数字签名

1.6.2、认证机构CA

又叫做证书颁发机构

  • 来将公钥与其对应的实体(人或机器)进行绑定(binding);即给公司或个人颁发证书。
  • 认证中心一般由政府出资建立。每个实体都有CA 发来的证书(certificate),里面有公钥及其拥有者的标识信息。此证书被 CA进行了数字签名。任何用户都可从可信的地方获得认证中心 CA 的公钥,此公钥用来验证某个公钥是否为某个实体所拥有。有的大公司也提供认证中心服务。
  • 认证机构中还可以细分一个注册机构(Registration Authority,RA),注册机构专门处理注册相关的业务,认证机构专门颁发证书和作废证书
    密码学相关基础二(非对称加密和数字签名篇)_第4张图片

密码学相关基础二(非对称加密和数字签名篇)_第5张图片

过程如上图:

  • 首先,用户A构建自己的密钥对,然后向证书颁发机构CA提交个人信息,公钥,所用算法申请证书。通过CA审核后,CA生成用户A的证书,证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。证书的格式和验证方法普遍遵循X.509 国际标准。
  • 用户A收到的证书中包括了带有CA数字签名的专属A公钥,CA的数字签名确保了别人不能伪造用户A的公钥和私钥。
  • 同时,用户B也必须信任给用户A颁发证书的第三方认证机构CA,即用户B拥有CA颁发的"CA公钥"。
  • 通信时,用户A向用户B发送的数据包中的"加密的摘要"上有用户A的数字签名,“A公钥”上有认证机构CA的数字签名。用户B收到数据包之后,先要验证收到的 “A公钥” 是否来源合法:是认证机构颁发的带有CA签名的公钥吗?用户B并不信任用户A,但是用户B信任第三方认证机构CA。所以,用户B先使用证书颁发机构颁发的"CA公钥" 验证收到的 “A公钥” 是否由同一认证机构颁发,是否在颁发之后更改过。
  • 验证通过后,用户B便相信收到的 “A公钥” 确实来自真实的用户A。随后再使用 “A公钥” 对 “加密的摘要”
    进行解密,进行上文提到的对比操作,以判断文件是否更改。

1.6.3、仓库

  • 仓库(repository)是一个保存证书的数据库。仓库也叫证书目录。作废的证书也需要制作一张证书作废清单(Certificate
    Revocation List,CRL)。 CRL 的“漏洞”
  • 攻击者可以利用 CRL 发布的时间差来进行攻击。A 向 B 发邮件说要 100 W,当 B 给 A 转了 100W 以后,A
    就抵赖说自己并没有发那封邮件。签名并非是 A 自己,因为证书已经被作废了。B 没有及时更新 CRL,所以导致对方可以抵赖。
  • 在线证书状态协议(英语:Online Certificate Status Protocol,缩写:OCSP)是一个用于获取X.509数字证书撤销状态的网际协议,作为证书吊销列表(CRL)的替代品解决了在公开密钥基础建设(PKI)中使用证书吊销列表而带来的多个问题。

你可能感兴趣的:(系统安全,java,安全)