密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介

本文主要是介绍密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

密码,最初的目的就是用于对信息的加密,计算机领域的密码技术种类繁多,但随着密码学的运用,密码还用于身份认证,防止否认等功能上。最基本的,是信息加密解密分为对称加密和非对称加密,这两者的区别在于是否在加密解密时是否使用了相同的密钥。除了信息的加密解密,还有用于确认数据完整性的单向散列技术,又称魏密码检验、指纹、消息摘要。信息的加密解密与信息的单向散列的区别时,加密解密是可以通过密钥来获取其加密的数据信息的,而单向散列则是不可逆的,信息的加密解密,数据信息或者密钥是不定长的,而单向散列可以是定长的。结合加密解密技术和单向散列技术,又有了用于防止篡改的消息认证码技术,防止伪装的数字签名技术以及认证证书。

常用的密码算法:

  • 对称加密体系

简介:加密解密的过程中使用的是同一个密钥,也称之为单密钥加密。

密文:加密后的结果。明文:需要被加密的信息。

对称加密的问题:

密钥的配送:接收者a收到b发送来的密文,a想要解密,就必须使用和b进行加密时相同的密钥,因此b必须要把密钥也发送给a,但是这样就产生了一个矛盾,如果有一种方法能将密钥安全的发送出去,那么也可以使用这种方式来发送明文。

对称加密的实例:

1.DES

DES是美国联邦信息处理标准中所采用的一种对称加密算法。是一种将64比特的明文加密成64比特密文的对称密码算法,它的密钥长度是56位,尽管从本质上说它的密钥是64位,但是由于每隔7位会设置一个用于错误检查的比特,奇偶校验位,因此实质上密钥的长度是56比特,DES以64比特明文为一个单位进行加密,DES每次只能加密64比特的数据,如果待加密的明文过长,就需要对DES加密进行迭代,迭代的具体方案称之为模式,具体的迭代模式会在这里讲解:https://mp.csdn.net/postedit/82468369

2.3DES:详解及Go语言实现实例:https://blog.csdn.net/The_Reader/article/details/82502945

三重DES是为了增强DES的强度,将DES重复3次所得到的一种密码算法。

3DES的加密机制为:

说明:1.明文经过三次DES处理才变成最后的密文,由于DES密钥的长度实际上是56比特,因此三重DES的密钥长度就是56*3 = 168 比特,2.三重DES并不是进行三次加密(加密->加密->加密)。而是加密->解密->加密的过程,这种设计是为了让3DES能够兼容普通的des,当三重DES密钥全部相同时,3重DES就相当于普通的DES,这是因为在前两轮加密->解密之后,得到的就是最初的明文,因此之前的des加密的密文,也就可以通过这种方式用三重des来进行解密。

3des解密机制:

3.AES

AES是取代其前任标准DES新的对称加密算法,其是通过公开竞选而指定的,在评选AES的时候不仅考虑到了算法的弱点,还考虑了算法的执行速度和实现的难度。

 

  • 非对称加密体系

简介:非对称加密也称之为公钥密码,密钥分为两种分别为加密密钥和解密密钥,发送者使用加密密钥加密数据,消息接收这使用解密密钥解密数据,解密密钥一开始就有接收者自己保管,因此只要将加密密钥发送给对方就可以解决密钥配送问题。由于加密密钥可以任意公开,因此该密钥也被称之为公钥,解密密钥绝对不能公开,只能由自己保管,因此也被称之为私钥,公钥和私钥是一一对应的关系,由公钥加密的文件只能由对应的私钥进行解密。

总结:

  • 发送者只需要知道加密密钥
  • 接收者只需要知道解密密钥
  • 解密密钥不可以被窃听者获取
  • 加密密钥被窃听者获取也没问题

公钥密码的通信流程:

非对称加密流程:

  1. 接收方生成公私钥对,私钥由接收方保管
  2. 接收方将公钥发送给发送方
  3. 发送方通过公钥对明文加密,得到密文
  4. 发送方向接收方发送密文
  5. 接收方通过私钥解密密文,得到明文

非对称加密实例:

ECC椭圆曲线算法

椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为ECC),一种建立公开金钥加密的算法,基于椭圆曲线数学,椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。

ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。ECC的另一个优势是可以定义群之间的双线性映射,基于Weil对或是Tate对;双线性映射已经在密码学中发现了大量的应用,例如基于身份的加密。不过一个缺点是加密和解密操作的实现比其他机制花费的时间长。

RSA加密算法:概念及实例详解:https://blog.csdn.net/The_Reader/article/details/82503060

RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。RSA 的安全性,是基于现阶段对大整数的质因数分解未发现高效的算法。一旦发现,则 RSA 就能够破译。

强度比较:密码强度,默认的 RSA 长度为 2048 bit

AES(bit)RSA(bit)
1283072
1927680
25615360

 存在问题:

  • 效率慢,因此工业场景下,往往是通过非对称加密配送密钥,对称加密加密明文的混合加密方式,最著名的如 SSL
  • 公钥认证问题难。消息发送方无法确认公钥的身份问题,应该收到甲的公钥,却收到了乙的。
  • 无法避免中间人攻击。可能被人于中间劫持后,发送一个伪造的公钥,此公钥加密后的密文,可以被劫持者解密,之后所有的密文都对劫持者透明了。
  • 选择密文攻击,即通过不断的发送请求,分析请求的反馈,猜测密钥和明文。有改良算法 RSA-OAEP (Optimal Asymmetric Encryption Padding)最优非对称加密填充,该算法是通过对明文前加入认证信息头,若信息头校验失败,则拒绝请求。
  • 密码劣化,随着算力的提升,密码的安全性下降。

单向散列

单向散列技术是为了保证信息的完整性,防止信息被篡改的一项技术。

特点:

  1. 无论消息长度,计算出的长度永远不变
  2. 快速计算
  3. 消息不同,散列值不同,需要具有抗碰撞性 Collision Resistance
    • 弱抗碰撞性:给定散列值,找到和该消息具有相同散列值的另一条消息是困难的
    • 强抗碰撞性:任意散列值,找到散列值相同的两条不同的消息是困难的
  4. 具有单向性 one-way,不可由散列值推出原消息

单向散列算法

MD(Message Digest)

MD 散列算法分为 MD4, MD5 两套算法,都可计算出 128 bits 的散列。MD 系列算法已经被中国科学家王小云破解(可于有限时间内找出碰撞)。

SHA(Secure Hash Algorithm)

SHA是单向散列算法的一个标砖的统称,其下又分为SHA-1,SHA-2,SHA-3三套算法

其中 SHA-1 可生成 160 bit 散列值,已被攻破(由王小云、姚期智联手破解),不推荐使用。

SHA-2 可生成不同长度的散列,如 256 bits (SHA-256), 384 bits (SHA-384), 512 bits (SHA-512),同时对输入的消息长度存在一定限制,SHA-256 上限接近于 2^{64}-1比特,SHA-384、SHA512 则接近于 2^{128}-1 比特。

SHA-3,是 2012 年被采用的最新标准,采用了 Keccak 算法。

Keccak 算法的优点:

  1. 采用与 SHA2 完全不同的结构
  2. 结构清晰,易于分析
  3. 适用于各种硬件,性能优越
  4. 可生成任意长度
  5. 对消息长度无限制
  6. 可采用双工结构,输入同时输出,提升效率

MD4,5, RIPEMD, RIPEMD-160, SHA-1, SHA-2 均采用 MD 结构(Merkle-Damgard construction)

SHA-3 采用海绵结构

算法散列长度,bit输入长度 
MD4 (Message Digest 4)128 已破解
MD5128 已破解
SHA-11602^{64} = 2048 \text{ PB}谨慎使用,不推荐
SHA2 (SHA-224)224 (32*8 - 32)2^{64}- 32 表示截去 32 bit,下同
SHA2 (SHA-256)256 (32*8)同上 
SHA2 (SHA-512/224)224 (64*8 - 288)同上 
SHA2 (SHA-512/256)256 (64*8 - 256)同上 
SHA2 (SHA-384)384 (64*8 - 128)$2^{128}$ 
SHA2 (SHA-512)512同上 
SHA-3 无限制 
RIPEMD-128  已破解
RIPEMD-160  谨慎使用,是比特币采用的
RIPEMD-256   
RIPEMD-320   

对散列的攻击

暴力破解,冗余碰撞

生日攻击,针对强抗碰撞性

数字签名

采用非对称加密的消息认证码的技术,就是数字签名。

  • 在非对称加密中,私钥用来解密,公钥用来加密
  • 在数字签名技术中,私钥用来加密,公钥用来解密

数字签名步骤

  1. 签名方 A 生成非对称公私钥对 public-key、private-key
  2. A 向消息接收方 B 发送公钥 publi-key
  3. A 采用 private-key 加密(一般是对消息的散列值进行加密),生成数字签名
  4. A 将消息与数字签名发往 B
  5. B 采用 public-key 解密数字签名
  6. B 验证数字签名

由于用于解密的是公钥,是公开的。因此任何人都可以验证数字签名。

数字签名的核心,就是非对称加密,在前文已经介绍了一些非对称加密算法,均可用于数字签名之中。

常见的有如下几种:

  • RSA
  • ElGamal
  • DSA
  • ECDSA(Elliptic Curve Signature Algorithm),结合椭圆曲线算法的数字签名技术
  • Rabin

数字签名的问题

数字签名由于采用了非对称加密,因此可以防止否认。但发送方怎么能知道所收到的公钥就是接收方私钥所对应的公钥呢?

如果不小心采用了攻击者的公钥,然后接收了攻击者私钥签名的信息,公私钥完全匹配,于是信息就被接受了,那么就 GG 了。

因此,业界便推出了证书。由权威机构颁布,认证公钥的合法性,那么就可以了

证书

对数字签名所发布的公钥进行权威的认证,便是证书。证书可以有效地避免中间人攻击的问题。

  • PKC:Public-Key Certificate,公钥证书,简称证书。
  • CA:Certification Authority,认证机构。对证书进行管理,负责 1.生成密钥对、2. 注册公钥时对身份进行认证、3. 颁发证书、4. 作废证书。其中负责注册公钥和身份认证的,称为 RA(Registration Authority 注册机构)
  • PKI:Public-Key Infrastructure,公钥基础设施,是为了更高效地运用公钥而制定的一系列规范和规格的总称。比较著名的有PKCS(Public-Key Cryptography Standards,公钥密码标准,由 RSA 公司制定)、X.509 等。PKI 是由使用者、认证机构 CA、仓库(保存证书的数据库)组成。
  • CRL:Certificate Revocation List 证书作废清单,是 CA 宣布作废的证书一览表,会带有 CA 的数字签名。一般由处理证书的软件更新 CRL 表,并查询证书是否有效。

证书使用步骤

下图比较详细的阐述了证书的使用步骤

 证书的层级

对于认证机构的公钥,可以由其它的认证机构施加数字签名,从而对认证机构的公钥进行验证,即生成一张认证机构的公钥证书,这样的关系可以迭代好几层,一直到最高一层的认证机构时该认证机构就称为根CA,根CA会对自己的公钥进行数字签名叫做自签名

针对证书的问题

  • 公钥注册前进行攻击
  • 注册相似信息进行攻击,例如 Bob 和 BOB,一旦没看清,就会泄露信息
  • 窃取 CA 的私钥进行攻击,CA 的私钥一旦被泄露,需要通过 CRL 通知客户
  • 伪装成 CA 进行攻击,一般证书处理软件只采纳有限的根 CA
  • 利用 CRL 发布时间差,私钥被盗-通知 CA-发布 CRL,均存在时间差,攻击者可以利用此时间差进行攻击
  • 利用 CRL 发布时间差否认信息。发布有害信息-通知 CA 作废证书-发布 CRL,由于存在时间差,恶意消息的发布者完全可以否认恶意消息是由其发出的。

这篇关于密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/860446

相关文章

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python打包成exe常用的四种方法小结

《Python打包成exe常用的四种方法小结》本文主要介绍了Python打包成exe常用的四种方法,包括PyInstaller、cx_Freeze、Py2exe、Nuitka,文中通过示例代码介绍的非... 目录一.PyInstaller11.安装:2. PyInstaller常用参数下面是pyinstal

Python 常用数据类型详解之字符串、列表、字典操作方法

《Python常用数据类型详解之字符串、列表、字典操作方法》在Python中,字符串、列表和字典是最常用的数据类型,它们在数据处理、程序设计和算法实现中扮演着重要角色,接下来通过本文给大家介绍这三种... 目录一、字符串(String)(一)创建字符串(二)字符串操作1. 字符串连接2. 字符串重复3. 字

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2