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

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

背景

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

常用的密码算法:

  • 对称加密体系

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

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

对称加密的问题:

密钥的配送:接收者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

相关文章

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

css渐变色背景|<gradient示例详解

《css渐变色背景|<gradient示例详解》CSS渐变是一种从一种颜色平滑过渡到另一种颜色的效果,可以作为元素的背景,它包括线性渐变、径向渐变和锥形渐变,本文介绍css渐变色背景|<gradien... 使用渐变色作为背景可以直接将渐China编程变色用作元素的背景,可以看做是一种特殊的背景图片。(是作为背

Python中操作Redis的常用方法小结

《Python中操作Redis的常用方法小结》这篇文章主要为大家详细介绍了Python中操作Redis的常用方法,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解一下... 目录安装Redis开启、关闭Redisredis数据结构redis-cli操作安装redis-py数据库连接和释放增

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu