背景

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

常用的密码算法:

  • 对称加密体系

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

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

对称加密的问题:

密钥的配送:接收者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)
128 3072
192 7680
256 15360

存在问题:

  • 效率慢,因此工业场景下,往往是通过非对称加密配送密钥,对称加密加密明文的混合加密方式,最著名的如 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   已破解
MD5 128   已破解
SHA-1 160 2^{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,由于存在时间差,恶意消息的发布者完全可以否认恶意消息是由其发出的。

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

  1. MD5单向散列算法详解

    历史: MD5 叫信息-摘要算法,是一种密码的算法,它可以对任何文件产生一个唯一的MD5验证码,每个文件的MD5码就如同每个人的指纹一样,都是不同的,这样,一旦这个文件在传输过程中,其内容被损坏或者被 ...

  2. 物联网安全-单向散列算法

    单向散列函数简介 概论 ​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值. 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消 ...

  3. MD5(单向散列算法)原理分析

    注:本文章转载于网络. MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. ...

  4. 常用的密码算法有哪些?

    我们将密码算法分为两大类. 对称密码(密钥密码)--算法只有一个密钥.如果多个参与者都知道该密钥,该密钥 也称为共享密钥. 非对称密码(公钥密码)--参与者对密钥的可见性是非对称的.例如,一些参与者仅 ...

  5. 信息安全密码学实验一:古典密码算法的设计与实现

    古典密码算法的设计与实现 1.仿射密码 加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是: C=Ek(m)=(k1m+k2)mod n D=(c-k2)mod n package cz ...

  6. 称密码、非对称密码、散列算法与 PKI

    对称密码.非对称密码.散列算法与 PKI 密码学要解决的问题:机密性.完整性.身份验证(抗抵赖性): 一.对称密码: 对称密码技术:发件人和收件人使用其共同拥有的单个密钥 , 这种密钥既用于加密,也用 ...

  7. java散列算法_Java sha1散列算法原理及代码实例

    直接调用HashKit.sha1(String str)方法就可以了,,返回的是16进制的字符串长度是40, 也就是用md.digest()方法解析出来的字节数是160字节长度. 而MD5散列算法生成 ...

  8. java怎么sha散列算法_Java sha1散列算法的原理解析

    Java sha1散列算法的原理解析 发布时间:2020-10-31 00:01:59 来源:亿速云 阅读:101 作者:Leah 今天就跟大家聊聊有关Java sha1散列算法的原理解析,可能很多人 ...

  9. 攻破算法题_散列_PAT_B1029_到底买不买(20)

    题目: 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多 ...

最新文章

  1. Android之EditText的各种使用
  2. Struts result param详细设置
  3. Kafka性能强于RabbitMQ的原因
  4. 房贷是不是越多越久越好?
  5. 读《第一次把事情做对》有感
  6. C++笔记------模版
  7. 《R语言数据挖掘:实用项目解析》——1.11 apply原理
  8. Sphinx sphinx_rtd_theme
  9. 一个经典的多线程同步问题
  10. 使用python对mysql主从进行监控,并调用钉钉发送报警信息
  11. Finding distance between two curves
  12. android p如何添加开机铃声
  13. UnicodeEncodeError: ‘gbk‘ codec can‘t encode character ‘\u25aa‘ in position 11923: illegal multibyte
  14. mysql获取某个最大的值的一行数据_某一字段分组取最大(小)值所在行的数据
  15. SpringBoot整合RabbitMQ之Spring事件驱动模型
  16. 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析
  17. 给网站开发者推荐18个在线手册,值得收藏
  18. 对数坐标归一化_归一化方法 Normalization Method
  19. 2018-7-27银行卡bin大全-根据银行卡开头查银行
  20. Servlet GET和POST请求

热门文章

  1. jquery在线五子棋
  2. [从零开始学DeepFaceLab-13]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 常见基本问题
  3. 雷柏鼠标安装笔记本没反应
  4. 今天1024,祝大家节日快乐
  5. 学习自旋电子学的笔记07:根据微磁学基本能量密度公式推导有效场
  6. imagemagick图片识别技术数据抓取(转自:http://michael-roshen.iteye.com/blog/1982817)
  7. 接口;String类;内部类
  8. 2020-02-06
  9. Gem5模拟器 for Ubuntu20.04
  10. OPPO U525 java游戏_说说我的OPPO U525手机的功能怎么样及优缺点