首页 > 其他分享 >图解密码技术

图解密码技术

时间:2024-02-03 17:56:46浏览次数:17  
标签:公钥 加密 -- 技术 解密 密码 消息 图解 密钥

目录

参考书籍:《图解密码技术:第3版》


一、对称密码和公钥密码

对称密码系统

graph LR A[明文] -- 加密 --> B[密文] C((密钥)) -- 加密 --> B[密文] C((密钥)) -- 解密 --> D[明文] B[密文] -- 解密 --> D[明文]

公钥密码系统

graph LR A[明文] -- 加密 --> B[密文] C((公钥)) -- 加密 --> B[密文] E((私钥)) -- 解密 --> D[明文] B[密文] -- 解密 --> D[明文]

公钥通信的流程

sequenceDiagram Note left of 消息发送者A: 消息 Note right of 消息接收者B: B的公钥<br/>B的私钥 消息发送者A ->> 消息接收者B: 请把B的公钥发来 消息接收者B ->> 消息发送者A: B的公钥 Note left of 消息发送者A: 【A进行加密】<br/>消息+B的公钥→密文 消息发送者A ->> 消息接收者B: 密文 Note right of 消息接收者B: 【B进行解密】<br/>密文+B的私钥→消息

对称密码与公钥密码的比较

项目 对称密码 公钥密码
发送者 用共享密钥加密 用公钥加密
接收者 用共享密钥解密 用私钥解密
密钥配送问题 存在(Diffie-Hellman密钥交换算法可解决) 不存在,但公钥需要另外认证
机密性
常见算法 DES、3DES、AES RSA、ElGamal、Rabin、椭圆曲线密码

Diffie-Hellman算法的有效性依赖于计算离散对数的难度,离散对数的概念:如果对于一个整数 \(b\) 和素数 \(p\) 的一个原根 \(a\),可以找到一个唯一的指数 \(i\),使得

\[b = a^i \mod p, \ 0 \leq i \leq p-1 \]

分组密码的模式

分组密码:每次只能处理特定长度的一组数据的一类密码算法。常用模式有:

  • ECB模式:电子密码本模式
  • CBC模式:密码分组链接模式
  • CFB模式:密文反馈模式
  • OFB模式:输出反馈模式
  • CTR模式:计数器模式

中间人攻击(man-in-the-middle attack)

sequenceDiagram Note left of 消息发送者A: 消息 Note left of 中间攻击者M: 伪消息<br/>M的公钥<br/>M的私钥 Note right of 消息接收者B: B的公钥<br/>B的私钥 消息发送者A ->> 消息接收者B: 请把B的公钥发来 消息接收者B ->> 中间攻击者M: B的公钥 Note left of 中间攻击者M: M拦截并保存B的公钥 中间攻击者M ->> 消息发送者A: M的公钥 Note left of 消息发送者A: 【A进行加密】<br/>消息+M的公钥(误以为B的公钥)→密文 消息发送者A ->> 中间攻击者M: 密文 Note right of 中间攻击者M: 【M拦截并解密】<br/>密文+M的公钥→消息 Note right of 中间攻击者M: 【M伪造消息】<br/>伪消息+B的公钥→伪密文 中间攻击者M ->> 消息接收者B: 伪密文 Note right of 消息接收者B: 【B进行解密】<br/>伪密文+B的私钥→伪消息

中间人攻击问题的实质是公钥分配问题,该问题的解决需要引入数字签名和证书功能。


二、混合密码系统

加密流程

graph LR A(伪随机数生成器) --生成--> B[会话密钥] C[消息明文] --对称加密<明文>--> D[对称加密的消息密文] B[会话密钥] --对称加密<密钥>--> D[对称加密的消息密文] B[会话密钥] --公钥加密<明文>--> F[公钥加密的会话密钥] E[接收者B的公钥] --公钥加密<密钥>--> F[公钥加密的会话密钥] D[对称加密的消息密文] --组合--> G[会话密钥+消息密文] F[公钥加密的会话密钥] --组合--> G[会话密钥+消息密文]

解密流程

graph LR A[会话密钥+消息密文] --分离--> C[公钥加密的会话密钥] A[会话密钥+消息密文] --分离--> B[对称加密的消息密文] B[对称加密的消息密文] --对称解密<密文>--> F[消息] C[公钥加密的会话密钥] --公钥解密<密文>--> D[会话密钥] E[接收者B的私钥] --公钥解密<密钥>--> D[会话密钥] D[会话密钥] --对称解密<密钥>--> F[消息明文]

伪随机数生成器

随机数的分类:

随机数的种类 随机性 不可预测性 不可重现性
弱伪随机数(不可用于密码技术) x x
强伪随机数(可用于密码技术) x
真伪随机数(可用于密码技术)

随机数生成器:通过硬件生成的随机数列。

伪随机数生成器:通过软件生成的伪随机数列,需要种子(seed)对生成器的内部状态进行初始化。具体的伪随机数生成器有:

  • 线性同余法(不可用于安全相关的用途)
  • 单向散列函数法(如SHA-1等)
  • 密码法(如AES、RSA等)
  • ANSI X9.17
  • 梅森旋转算法(不可用于安全相关的用途)

三、消息鉴别——消息认证码(MAC)

消息鉴别的流程

发送方:

graph LR A[消息] -- 拼接 --> E[消息+MAC] A[消息] -- 散列计算 --> D[消息认证码MAC] C[共享密钥] -- 散列计算 --> D[消息认证码MAC] D[消息认证码MAC] -- 拼接 --> E[消息+MAC]

接收方:

graph LR A[消息+MAC] -- 分离 --> E[MAC] A[消息+MAC] -- 分离 --> B[消息] B[消息] -- 散列计算 --> D[MAC] C[共享密钥] -- 散列计算 --> D[MAC] D[MAC] --> F((对比)) E[MAC] --> F((对比))

单向散列函数

单向散列函数,又称为消息摘要函数、哈希函数:

graph LR A[消息<br/>or<br/>原像] --> B((单向散列函数<br/>or<br/>消息摘要函数<br/>or<br/>哈希函数)) --> C[散列值<br/>or<br/>消息摘要<br/>or<br/>指纹]

单向散列函数的常见算法:

算法 版本
MD MD4、MD5
SHA SHA-1、SHA-2(SHA-224、SHA-256、SHA-512/224、SHA-512/256、SHA-384、SHA-512)、SHA-3(Keccak)
RIPEMD RIPEMD-160、RIPEMD-128、RIPEMD-256、RIPEMD-320

重放攻击(replay attack)

sequenceDiagram Note left of 消息发送者A: 发送者根据消息<br/>计算MAC值 Note left of 中间攻击者M: 攻击者窃听、保存 Note right of 消息接收者B: 接收者验证报文<br/>是否被篡改 消息发送者A ->> 消息接收者B: 消息+正确MAC Note left of 中间攻击者M: 攻击者在之后时间内,<br/>不断发送窃听而来的消息 中间攻击者M ->> 消息接收者B: 消息+正确MAC 中间攻击者M ->> 消息接收者B: 消息+正确MAC 中间攻击者M ->> 消息接收者B: 消息+正确MAC

抵御重放攻击——不重数(nonce)

sequenceDiagram Note left of 消息发送者A: 消息 Note right of 消息接收者B: B的公钥<br/>B的私钥 消息发送者A ->> 消息接收者B: 请把B的公钥发来 消息接收者B ->> 消息发送者A: B的公钥 Note right of 消息接收者B: 随机生成一个不重数R,<br/>B的私钥加密不重数R 消息接收者B ->> 消息发送者A: 加密的不重数R Note left of 消息发送者A: 用B的公钥解密得到不重数R Note left of 消息发送者A: 【A进行加密】<br/>消息+不重数R+B的公钥→密文 消息发送者A ->> 消息接收者B: 密文 Note right of 消息接收者B: 【B进行解密并核对不重数R】<br/>密文+B的私钥→消息+不重数R Note right of 消息接收者B: 下一次通信时,<br/>再随机生成另外的不重数R

四、实体鉴别——数字签名与证书

数字签名的流程

发送方:

graph LR A[消息] -- 拼接 --> E[消息+MAC] A[消息] -- 散列计算 --> D[消息摘要] C[发送方的私钥] -- 加密 --> F[签名] D[消息摘要] -- 加密 --> F[签名] F[签名] -- 拼接 --> E[消息+签名]

接收方:

graph LR A[消息+签名] -- 分离 --> E[签名] A[消息+签名] -- 分离 --> B[消息] B[消息] -- 散列计算 --> F[消息摘要] E[签名] -- 散列计算 --> D[散列值] C[发送方的公钥] -- 散列计算 --> D[散列值] D[散列值] --> G((对比)) F[消息摘要] --> G((对比))

数字签名与消息认证码的比较

项目 消息认证码(MAC) 数字签名
发送方 用共享密钥计算MAC值 用私钥生成签名
接收方 用共享密钥计算MAC值 用公钥验证签名
密钥配送问题 存在 不存在,但公钥需要另外认证
完整性
认证 仅限通信双方 可适用于任何第三方
防止否认 不能防止 可以防止

证书和认证机构(CA)

stateDiagram-v2 state if_state <> 消息接收者B(B生成密钥对) --> 可靠的认证机构CA(注册B的公钥): B的公钥 可靠的认证机构CA(注册B的公钥) --> 仓库(证书目录): 保存证书(=B的公钥+CA的数字签名) 仓库(证书目录) --> 消息发送者A(确认B公钥的合法性): 下载证书(=B的公钥+CA的数字签名)

五、基于口令的密码(PBE)

加密流程

graph LR ZZ(用户记忆) --> A[口令] -- 散列计算 --> C[密钥加密密钥KEK] Z(伪随机数生成器) --> B[盐] -- 散列计算 --> C[密钥加密密钥KEK] Z(伪随机数生成器) --> D[会话密钥CEK] -- 对称加密<明文> --> E[KEK加密后的CEK] C[密钥加密密钥KEK] -- 对称加密<密钥> --> E[KEK加密后的CEK] D[会话密钥CEK] -- 对称加密<密钥> --> G[用会话密钥加密的消息] F[消息] -- 对称加密<明文> --> G[用会话密钥加密的消息]

最后,用户将“盐”和“KEK加密后的CEK”保存在安全的地方。

解密流程

graph LR Z(用户记忆) --> A[口令] -- 散列计算 --> C[密钥加密密钥KEK] B[盐] -- 散列计算 --> C[密钥加密密钥KEK] C[密钥加密密钥KEK] -- 对称解密<密钥> --> E[会话密钥CEK] D[KEK加密后的CEK] -- 对称解密<密文> --> E[会话密钥CEK] E[会话密钥CEK] -- 对称解密<密钥> --> G[消息] F[用会话密钥加密的消息] -- 对称解密<密文> --> G[消息]

六、密码软件PGP的原理

发送者A:生成数字签名并加密

生成数字签名:

graph LR Z(发送者A的记忆) --> A[口令] A[口令] -- 散列计算 --> C[私钥的解密密钥] B[盐] -- 散列计算 --> C[私钥的解密密钥] C[私钥的解密密钥] -- 对称解密<密钥> --> E[A的私钥] D[已加密的A的私钥] -- 对称解密<密文> --> E[A的私钥] F[消息] -- 散列计算 --> G[消息摘要] -- 公钥加密<明文> --> H[数字签名] E[A的私钥] -- 公钥加密<密钥> --> H[数字签名]

消息加密:

graph LR A[数字签名] --拼接--> C[签名+消息] B[消息] --拼接--> C[签名+消息] C[签名+消息] -- 压缩 --> D[压缩消息] -- 对称加密<明文> --> H[加密的压缩消息] E[会话密钥] -- 对称加密<密钥> --> H[加密的压缩消息] Z(伪随机数生成器) --> E[会话密钥] -- 公钥加密<明文> --> G[加密的会话密钥] F[接收者B的公钥] -- 公钥加密<密钥> --> G[加密的会话密钥] H[加密的压缩消息] --拼接--> I[报文数据] G[加密的会话密钥] --拼接--> I[报文数据]

接收者B:解密并验证数字签名

消息解密:

graph LR Z(接收者B的记忆) --> A[口令] A[口令] -- 散列计算 --> C[私钥的解密密钥] B[盐] -- 散列计算 --> C[私钥的解密密钥] C[私钥的解密密钥] -- 对称解密<密钥> --> E[B的私钥] D[已加密的B的私钥] -- 对称解密<密文> --> E[B的私钥] F[报文数据] -- 分解 --> H[加密的会话密钥] E[B的私钥] -- 公钥解密<密钥> --> I[会话密钥] H[加密的会话密钥] -- 公钥解密<密文> --> I[会话密钥] -- 对称解密<密钥> --> J[压缩消息] F[报文数据] -- 分解 --> G[加密的压缩消息] -- 对称解密<密文> --> J[压缩消息]

验证数字签名:

graph LR Z[压缩消息] -- 解压缩 --> A[消息+签名] A[消息+签名] -- 分解 --> B[数字签名] A[消息+签名] -- 分解 --> C[消息] -- 散列计算 --> D[消息摘要] B[数字签名] -- 公钥解密<密文> --> F[散列值] E[A的公钥] -- 公钥解密<密钥> --> F[散列值] D[消息摘要] --> G(对比) F[散列值] --> G(对比)

标签:公钥,加密,--,技术,解密,密码,消息,图解,密钥
From: https://www.cnblogs.com/Mount256/p/18005005

相关文章

  • P1928 外星密码
    题目链接:本题如果直接模拟去做的话极为繁琐,输入的这个字符串是被多重「压缩」的,所以一重一重地「解压缩」可能会非常非常麻烦(不过应该是可行的),导致代码极其难以理解。所以,我们使用递归算法,在读入这个字符串之后,找出被压缩的内容,再对被压缩的那个字符串实行「解压缩」操作。举个......
  • ASP.net技术内幕
    本书讲解.NET平台下的异步编程、LINQ、依赖注入、配置系统、日志等相关技术的原理与应用;深入且全面地介绍EntityFrameworkCore在项目中的应用场景,剖析EntityFrameworkCore的实现原理。本书在讲解使用ASP.NETCore进行WebAPI开发的同时,结合作者的实践经验介绍REST、前后端分离......
  • 语音传输专用光端机:技术特点与应用场景
    语音传输专用光端机:技术特点与应用场景在当今信息通信领域,语音传输专用光端机作为一种关键的设备,正在被广泛应用于各种通信场景中。本文将对语音传输专用光端机的技术特点及其应用场景进行探讨。技术特点语音传输专用光端机具有以下主要技术特点:低时延:针对语音传输的需求,语音传输专......
  • RFID技术的应用在汽车座椅加工中的优势
       在传统的汽车座椅加工过程中,需要人工核对和记录座椅的信息,如型号、序列号、生产日期等。这种方式不仅效率低下,而且容易出错。而通过使用RFID技术,这些问题得到了有效解决。在座椅的生产过程中,将RFID标签嵌入到座椅中,与座椅的信息和特性相绑定。这样,生产线上的设备就可以通过......
  • Java将密码加盐加密存储和校验
    注册和登陆的时候,需要加密和校验,以下为加密和解密代码packageorg.ongoal.common.config;importorg.springframework.util.DigestUtils;importorg.springframework.util.StringUtils;importjava.util.UUID;publicclassPasswordUtil{/***加盐算法->格......
  • 云上未来:探索云计算的技术变革与应用趋势
    本文深入探讨了云计算的起源、发展路径、当前的技术应用、安全与合规性及未来展望。通过详尽的分析,揭示了云计算如何从基础设施服务发展到现今的多元化技术领域,包括无服务器计算、容器化、云原生技术等,并强调了安全与合规在云计算广泛采用中的重要性。同时,展望了云计算与AI、边缘......
  • 云电脑超详细技术讲解
    本文分享自天翼云开发者社区《云电脑超详细技术讲解》,作者:不知不觉随着云计算技术的快速发展,云电脑作为一种新型的计算模式,越来越受到人们的关注。云电脑是一种基于云计算技术的虚拟化计算资源,它通过将物理服务器资源进行虚拟化,形成了动态、可扩展的计算资源池。用户可以通过互联......
  • GreatSQL荣获2023 InfoQ“技术生态构建奖” 助力行业变革之路
    1月31日,InfoQ极客传媒合作伙伴年度盛典在北京举办,围绕“有被Q到”主题精彩展开。GreatSQL受邀参会,与诸多IT行业伙伴相聚一堂,共筑开发者生态,共话技术前沿与商业创新。会议期间,InfoQ为全国技术行业做出突出贡献的企业和项目进行了颁奖。GreatSQL开源数据库社区凭借在开源......
  • ChatGPT 背后的“功臣”——RLHF 技术详解
    OpenAI推出的ChatGPT对话模型掀起了新的AI热潮,它面对多种多样的问题对答如流,似乎已经打破了机器和人的边界。这一工作的背后是大型语言模型(LargeLanguageModel,LLM)生成领域的新训练范式:RLHF(ReinforcementLearningfromHumanFeedback),即以强化学习方式依据人类反馈......
  • 以太网环路保护切换技术ERPS解读
    前言  当前最新的车载网络广泛采用以太网作为主干网络,为了增强网络的可靠性,通常采用了环网拓扑结构,允许数据通过多条路径传输。然而,引入环网拓扑结构可能导致环路形成,进而带来广播风暴等潜在风险。为了规避这些问题,我们通常需要借助STP/RSTP等技术来防止环路形成,并在检测到通......