当前位置: 首页 > news >正文

密码学:一文读懂非对称密码体制

文章目录

  • 前言
  • 非对称密码体制的保密通信模型
    • 私钥加密-公钥解密的保密通信模型
    • 公钥加密-私钥解密的保密通信模型
  • 复合式的非对称密码系统
  • 散列函数
  • 数字签名
    • 数字签名满足的三个基本要求
    • 先加密还是先签名?
    • 数字签名成为公钥基础设施以及许多网络安全机制的基础
    • 什么是单向认证?什么是双向认证?
  • 总结和回顾
  • 相关
  • 参考

请添加图片描述

前言

花十分钟阅读完这篇文章,你将对密码学中大名鼎鼎的非对称密码体制有个整体的理解和把握。
对整体的框架有所了解之后,再去看RSA,散列函数、数字证书、单双向认证等等这些密码学的知识,或者去开发安全相关的项目开发就不会迷路,能找到正确的方向。

上篇讲述关于对称加密体系的博文一度被推上热榜,说明应该是能帮助到一些朋友的。今天来介绍下作为对称密码体制的补充:非对称密码体制。

对于对称密钥体系不了解的朋友可以翻看:密码学:一文读懂对称密钥体系

下面开始正文:

非对称密码体制的保密通信模型

非对称密码体制的保密通信模型如图所示。非对称密码体制与对称密码体制相对,其主要的区别在于,非对称密码体制的加密密钥和解密密钥不相同,分为两个密钥,一个公开,一个保密。公开的密钥称为公钥,保密的密钥称为私钥。因此非对称密码体制也称为公钥密码体制。非对称密码体制使得发送者和接收者无密钥传输的保密通信成为可能,弥补了对称密码体制的缺陷。

在这里插入图片描述

在非对称密码体制中,公钥和私钥均可用于加密与解密操作,但它与对称密码体制有极大的不同。公钥与私钥分属通信双方,一份消息的加密与解密需要公钥与私钥共同参与。公钥加密则需要私钥解密,反之,私钥加密则需要公钥解密。

我们把通信双方定义为甲乙两方,甲乙两方分场景扮演信息发送者或接收者。公钥与私钥分属甲乙两方,甲方拥有私钥,乙方拥有公钥。

为了更好地描述非对称密码体制通信流程,我们通过图片来说明甲乙双方如何完成一次完整的会话。

私钥加密-公钥解密的保密通信模型

在这里插入图片描述

公钥加密-私钥解密的保密通信模型

在这里插入图片描述

非对称密码体制的主要优点是可以适应开放性的使用环境,密钥管理问题相对简单,可以方便、安全地实现数字签名和验证

RSA是非对称密码体制的典范,它不仅可以完成一般的数据保密操作,同时它也支持数字签名与验证。除了数字签名,非对称密码体制还支持数字信封等技术。

非对称密码算法的安全性完全依赖于基于计算复杂度上的难题,通常来自于数论例如:
RSA源于整数因子分解问题。
DSA(数字签名算法)源于离散对数问题。
ECC(圆曲线加密算法)源于离散对数问题。

复合式的非对称密码系统

由于这些数学难题的实现多涉及底层模数乘法或指数运算,相对于分组密码需要更多的计算资源。为了弥补这一缺陷,非对称密码系统通常是复合式的。用高效率的对称密码算法对信息进行加密解密处理,用非对称密钥加密对称密码系统所使用的密钥。通过结合对称密码和非对称密码的优势,以提高整体系统的效率和安全性。

对称密码算法更高效: 对称密码算法在加密和解密过程中使用相同的密钥,因此通常比非对称密码算法更快。对称密码算法对数据进行加密和解密的速度很快,因为操作只涉及简单的数学运算,例如替换、置换和异或操作。

非对称密码算法更安全: 非对称密码算法提供了更高的安全性,因为它涉及到两个密钥:公钥和私钥。信息可以使用公钥加密,但只有拥有相应私钥的实体才能解密。这种体系结构解决了密钥分发和管理的问题,但由于计算复杂度较高,不适合对大量数据进行直接加密和解密。

为了克服对称密码算法和非对称密码算法各自的缺点,通常采用复合式的方法。具体而言,可以使用对称密码算法来对大量数据进行高效的加密和解密操作,而非对称密码算法则用于安全地传输和管理对称密码算法所使用的密钥。

这种复合方式的好处在于,对称密码算法提供了高效性,而非对称密码算法增加了系统的安全性。通过使用非对称密钥对对称密钥进行加密,可以确保在密钥传输过程中的安全性,同时仍然能够利用对称密码算法的高效性。这种组合可以在实际应用中平衡安全性和性能需求。

散列函数

曾经提到过对于信息完整性验证需要其在讲到对称密码体制的流密码实现方式时,他技术来支持,这种技术就是由散列函数提供的消息认证技术。
散列函数,也称做哈希函数、消息摘要函数、单向函数或杂凑函数。与上述密码体制不同的是,散列函数的主要作用不是完成数据加密与解密的工作,它是用来验证数据的完整性的重要技术。通过散列函数,可以为数据创建“数字指纹” (散列值)。散列值通常是一个短的随机字母和数字组成的字符串。
在这里插入图片描述
在上述认证流程中,信息收发双方在通信前已经商定了具体的散列算法,并且该算法是公开的。如果消息在传递过程中被篡改,则该消息不能与已获得的数字指纹相匹配。

散列函数具有以下一些特性:

  • 消息的长度不受限制

  • 对于给定的消息,其散列值的计算是很容易的。

  • 如果两个散列值不相同,则这两个散列值的原始输入消息也不相同,这个特性使得散列函数具有确定性的结果

  • 散列函数的运算过程是不可逆的,这个特性称为函数的单向性。这也是单向函数命名的由来

  • 对于一个已知的消息及其散列值,要找到另一个消息使其获得相同的散列值是不可能的,这个特性称为抗弱碰撞性。这被用来防止伪造

  • 任意两个不同的消息的散列值一定不同,这个特性称为抗强碰撞性

散列函数广泛用于信息完整性的验证,是数据签名的核心技术。散列函数的常用算法有MD一消息摘要算法、SHA一安全散列算法及MAC一消息认证码算法。

数字签名

通过散列函数可以确保数据内容的完整性,但这还远远不够。此外,还需要确保数据来源的可认证(鉴别)性和数据发送行为的不可否认性。

完整性、认证性和不可否认性,正是数字签名的主要特征。

数字签名针对以数字形式存储的消息进行处理,产生一种带有操作者身份信息的编码。

执行数字签名的实体称为签名者,签名过程中所使用的算法称为签名算法 (Signature Algorithm) ,签名操作中生成的编码称为签名者对该消息的数字签名。

发送者通过网络将消息连同其数字签名一起发送给接收者。接收者在得到该消息及其数字签名后,可以通过一个算法来验证签名的真伪以及识别相应的签名者。这一过程称为验证过程,其过程中使用的算法称为验证算法 (Verification Algorithm),执行验证的实体称为验证者。

数字签名离不开非对称密码体制,签名算法受私钥控制,且由签名者保密,验证算法受公钥控制,且对外公开。

RSA算法则既是最为常用的非对称加密算法,也是最为常用的签名算法。DSA算法是典型的数字签名算法,虽然本身属于非对称加密算法不具备数据加密与解密的功能。

数字签名满足的三个基本要求

  • 签名者任何时候都无法否认自己曾经签发的数字签名。
  • 信息接收者能够验证和确认收到的数字签名,但任何人无法伪造信息发送者的数字签名。
  • 当收发双方对数字签名的真伪产生争议时,通过仲裁机构 (可信赖的第三方)进行仲裁

数字签名认证流程如图所示。在这里提请大家注意: 私钥用于签名,公钥用于验证。签名操作只能由私钥完成,验证操作只能有公钥完成,公钥与私钥成对出现,用公钥加密的消息只能用私钥解密,用私钥加密的消息只能用公钥解密。
在这里插入图片描述

先加密还是先签名?

当然,我们可以对消息先加密,然后对加密后的消息做签名处理,这样乙方获得消息后,先做验证处理,如果验证通过则对消息解密。反之,验证失败则抛弃消息。这样做显然可以提高系统的处理速度,但即便如此,作者仍建议大家对消息先做签名,再做加密处理。加密与签名都应该只针对原始消息 (明文) 做处理。加密是为了确保消息在传送过程中避免被破解,签名是为了确保消息的有效性。消息本身可能就是一个可执行的文件,消息的接收方通过对消息的验证来判别该文件是否有权执行,而这个文件本身是不需要加密的。

数字签名成为公钥基础设施以及许多网络安全机制的基础

由于签名不可伪造,甲方不能否认自己已发送的消息,而乙方可验证消息的来源以及消息是否完整。数字签名可提供OSI参考模型五类安全服务中的三种服务: 认证(鉴别)服务、抗否认服务和数据完整性服务。正因如此,数字签名成为公钥基础设施以及许多网络安全机制的基础。

什么是单向认证?什么是双向认证?

在上述认证过程的描述中,似乎大家有这样一个疑问: 当乙方作为发送方,通过公钥将消息加密后发送给甲方时,由于算法、公钥公开,任何一个已获得公钥的窃听者都可以截获乙方发送的消息,替换成自己的消息发送给甲方,而甲方无法辨别消息是否来源于乙方。也就是说,上述的认证方式是单向的,属于单向认证。如果有两套公私钥,甲乙两方都对数据做签名及验证就可以避免这一问题。没错,这种认证方式正是双向认证。以网银交易为例,一般的网银交易使用的都是单向认证方式,无法验证使用者的身份,而要求较高的网银交易则都是双向认证方式,交易双方身份都可以得到验证。

由于篇幅原因,更加详细的数字签名的介绍请看这一篇:密码学:带密钥的消息摘要算法一数字签名算法

总结和回顾

从密码体制上划分,现代密码学共分为两种密码体制:对称密码体制和非对称密码体制。对称与非对称的差别源于加密密钥和解密密钥是否对称,即加密密钥与解密密钥是否相同 (对称)。
在对称密码体制中,加密与解密操作使用相同的密钥,我们把这个密钥称为秘密究钥。DES、AES算法都是常用的对称密码算法。流密码和分组密码都属于对称密码体制。流密码实现简单,对环境要求低,适用于手机平台的加密,广泛应用于军事、外交领域。RC4算法就是典型的流密码算法。流密码的理论、算法受限于国家安全因素未能公布。分组密码在这一点上与流密码恰恰相反,其理论、算法公开分类众多。DES、AES算法等主要的对称密码算法均属于分组密码。分组密码共有五种工作模式:电子密码本模式 (ECB) 、密文链接模式 (CBC) 、密文反馈模式(CFB) 、输出反馈模式 (OFB) 、计数器模式 (CTR) 。分组密码会产生短块,关于短块的处理方法有填充法、流密码加密法、密文挪用技术。

在非对称密码体制中,加密与解密操作使用不同的密钥。对外公开的密钥,称为公钥;对外保密的密钥,称为私钥。用公钥加密的数据,只能用私钥解密,反之,用私钥加密的数据,只能用公钥解密。RSA算法是常用的非对称密码算法。非对称密码体制同时支持数字签名技术,如RSA、DSA都是常用的数字签名算法。

散列函数可以有效地确保数据完整性,被作为消息认证技术。常用的散列函数算注有MD5、SHA、MAC。散列函数也是数字签名技术中最重要的技术环节。

数字签名离不开非对称密码体制,其私钥用于签名,公钥用于验证。基于数字签名的不伪造性,数字签名技术成为五类安全服务中数据完整性服务、认证性服务和抗否议性服务的核心技术。通信双方只有一方提供数字签名的认证方式称为单向认证,通信双方都提供数字签名的认证方式称为双向认证。一般网银系统多采用单向认证式,而要求较高的网银交易则都采用双向认证方式。密码学在不断地向前发展,只不过它的发展通常是以其密码算法的破解而引发,以更高安全系数算法的诞生而段落,密码学的明天将无可限量。

相关

密码学:一文读懂对称密钥体系

参考

《Java加密和解密的艺术》

相关文章:

密码学:一文读懂非对称密码体制

文章目录 前言非对称密码体制的保密通信模型私钥加密-公钥解密的保密通信模型公钥加密-私钥解密的保密通信模型 复合式的非对称密码系统散列函数数字签名数字签名满足的三个基本要求先加密还是先签名?数字签名成为公钥基础设施以及许多网络安全机制的基础什么是单向…...

2_工厂设计_工厂方法和抽象工厂

工厂设计模式-工厂方法 1.概念 工厂方法模式(Fatory Method Pattern ) 是指定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 在工厂方法模式中用户只需要关心所需产品对应的工厂,…...

k8s之pod进阶

1.k8s的pod重启策略 Always :不论正常退出还是非正常退出都重启deployment的yaml文件只能是always pod的yaml三种模式都可以。 OnFailure:只有状态码非0才会重启,正常退出不重启 Never:正常退出和非正常退出都不重启 容器的退…...

RTTI(运行时类型识别)

RTTI(运行时类型识别) 实验介绍 RTTI 全称 Run Time Type Identification,中文称为 “运行时类型识别”,在程序中使用 typeid 和 dynamic_cast 实现。RTTI 技术允许程序在运行时识别对象的类型。 知识点 typeiddynamic_castRTTI 技术typeid typeid 是 C++ 关键字,用于…...

19.Linux Shell任务控制

文章目录 Linux Shell任务控制1)信号通过键盘生成信号trap 命令捕获信号 2)在后台运行脚本命令后加 & 符使用nohub命令 3)作业控制4)调度优先级nice命令renice 命令 5)定时运行作业at定期执行命令reference 欢迎访问个人网络日志🌹🌹知行空间&#x…...

域名流量被劫持怎么办?如何避免域名流量劫持?

随着互联网不断发展,流量成为线上世界的巨大财富。然而一种叫做域名流量劫持的网络攻击,将会在不经授权的情况下控制或重定向一个域名的DNS记录,导致用户在访问一个网站时,被引导到另一个不相关的网站,从而劫持走原网站…...

java案例知识点

一.会话技术 概念 技术 二.跨域 三.过滤器 四.拦截器...

Arrays 的使用

Arrays 概述 提供了数组操作的相关方法&#xff0c;连接数组和集合 asList 返回指定数组的列表列表和数组的引用位置相同 Integer[] arrs new Integer[] {1,2,3,4,5,6,7,8,9};List<Integer> list Arrays.asList(arrs);System.out.println(list);arrs[5] 100;Syste…...

IDEA中怎么用Postman?这款插件你试试

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…...

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为&#xff1a;首先通过摄像头获取包含车牌的彩色图像&#xff1b;然后进行车牌边缘检测&#xff0c;先粗略定位到车牌位置&#xff0c;再精细定位&#xff1b;最后根…...

学习c语言,变种水仙花

利用函数次方pow...

K8S--持久卷(PersistentVolume)的用法

原文网址&#xff1a;K8S--持久卷(PersistentVolume)的用法-CSDN博客 简介 本文介绍K8S的持久卷(PersistentVolume)的用法。 目标&#xff1a;用持久卷的方式将主机的磁盘与容器磁盘映射&#xff0c;安装nginx并运行。 --------------------------------------------------…...

书生·浦语大模型趣味 Demo笔记及作业

文章目录 笔记作业基础作业&#xff1a;进阶作业&#xff1a; 笔记 书生浦语大模型InternLM-Chat-7B 智能对话 Demo&#xff1a;https://blog.csdn.net/m0_49289284/article/details/135412067书生浦语大模型Lagent 智能体工具调用 Demo&#xff1a;https://blog.csdn.net/m0_…...

2024最新前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 粒子文字动画特效 基于canvas实现的粒子文字动画特效 会来回切换设定的文字特效 图…...

Microsoft 365 for Mac激活版(原Office 365)

Microsoft 365 for Mac原office 365&#xff0c;包含Word、Excel、PowerPoint 和 Outlook应用程序&#xff0c;协作办公的最佳首选。 软件下载&#xff1a;Microsoft 365 for Mac激活版下载 Microsoft 365 的一些主要功能包括&#xff1a; office 应用程序&#xff1a;Microsof…...

快乐学Python,Python基础之组织代码「类与对象」

在上一篇文章中&#xff0c;我们了解了函数。这一篇文章我们来了解一下Python中另外一个重要的概念&#xff1a;类与对象。 1、类与对象 &#xff08;1&#xff09;类与对象有什么关系&#xff1f; 你可能会奇怪&#xff0c;为什么要叫类与对象呢&#xff1f;是两个不同的东…...

H5的3D游戏开源框架

在H5的3D游戏框架中&#xff0c;Three.js、Babylon.js和Turbulenz是比较受欢迎的选择。 Three.js是一个广泛应用并且功能强大的JavaScript 3D库&#xff0c;可以创建简单的3D动画到创建交互的3D游戏。 Babylon.js是David Catuhe对3D游戏引擎热爱的结果&#xff0c;是最好的Ja…...

浅谈一些生命周期

vue2生命周期 beforeCreate &#xff1a;实例创建之初 created&#xff1a;组件已经创建完成 beforeMount&#xff1a;组件挂载之前 mounted:组件挂载之后 beforeUpdate&#xff1a;数据发生变化 更新之前 undated&#xff1a;数据发生之后 beforeDestroy &#xff1a;实…...

JavaScript基础(25)_dom查询练习(二)

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>dom查询练习二</title><link rel"stylesheet" href"../browser_default_style/reset.css"><style>form {margi…...

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...

统计学(第8版)——统计抽样学习笔记(考试用)

一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征&#xff08;均值、比率、总量&#xff09;控制抽样误差与非抽样误差 解决的核心问题 在成本约束下&#xff0c;用少量样本准确推断总体特征量化估计结果的可靠性&#xff08;置…...

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…...