【网络安全】对称加密、非对称加密以及密钥分配

目录

1、对称加密

2、非对称加密

3、如何分配对称密钥?

4、如何分配非对称密钥?


1、对称加密

        所谓对称加密,就是指加密密钥与解密密钥都使用相同的密钥。如下图所示,通信双方使用的就是对称加密密钥。//代表:DES和AES

        数据加密标准 DES(Data Encryption Standard) 属于对称密钥密码体制。它由 IBM 公司研制出,于 1977 年被美国定为联邦信息标准后,在国际上引起了极大的重视。ISO 曾将 DES 作为数据加密标准。

        DES 是一种分组密码。在加密前,先对整个的明文进行分组。每一个组为 64 位长的二进制数据。然后对每一个 64 位二进制数据进行加密处理,产生一组 64 位密文数据。最后将各组密文串接起来,即得出整个的密文。使用的密钥占有 64 位(实际密钥长度为 56 位,外加 8 位用于奇偶校验)。

        DES 的机密性仅取决于对密钥的保密,而算法是公开的。DES 的问题是它的密钥长度。56 位长的密钥意味着共有 2^{56} 种可能的密钥,也就是说,共有约 7.6 ×10^{16} 种密钥。假设一台计算机 1 us 可执行一次 DES 加密,同时平均只需搜索密钥空间的一半即可找到密钥,那么破译 DES 要超过 1000 年。

        然而芯片的发展出乎意料地快。不久,56 位 DES 已不再被认为是安全的。对于 DES 56 位密钥的问题,又提出了 三重DES(3DES) 的方案,把一个 64 位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密,即

        Y=DES_{k1}(DES^{-1}_{K2}(DES_{k1}(X)))))

        这里,X 是明文,Y 是密文,K1 和 K2 分别是第一个和第二个密钥,DES_{k1}(.) 表示用密钥 K1 进行 DES 加密,而 DES_{k2}^{-1}(.) 表示用密钥 K2 进行 DES 解密。//加密,解密,再加密

        在 DES 之后,1997 年美国标准与技术协会(NIST),对一种新的加密标准即 高级加密标准 AES(Advanced Encryption Standard) 进行遴选,最后由两位年轻比利时学者 Joan Daemen 和 Vincent Rijmen 提交的 Rijndael算法 被选中,在 2001 年正式成为 NIST 的加密标准。在 2002 年成为美国政府加密标准。现在 AES 也是 ISO/IEC 18033-3 标准。

        AES 也是一种分组密码,分组长度为 128 位。AES 有三种加密标准,其密钥分别为 128 位、192 位和 256 位,加密步骤相当复杂,运算速度比 3DES 快得多,且安全性也大大加强。在 2001 年,NIST 曾有一个大致的估计,就是假定有一台高速计算机,仅用 1 秒钟就能够破译 56 位的 DES,那么要破译 128 位的 AES,就需要 10^{12} 年!

2、非对称加密

        非对称加密使用不同的加密密钥与解密密钥。也就是所谓的公钥密码体制。

        公钥密码产生主要有两个方面的原因,一是由于对称密钥的密钥分配问题,二是对数字签名的需求

        在对称加密中,加解密的双方使用的是相同的密钥。但怎样才能做到这一点呢?

        一种是事先约定,另一种是用信使来传送。在高度自动化的大型计算机网络中,用信使来传送密钥显然是不合适的。如果事先约定密钥,就会给密钥的管理和更换带来极大的不便。若使用高度安全的密钥分配中心 KDC(Key Distribution Center),也会使得网络成本增加。//密钥分配

        对数字签名的强烈需要也是产生公钥加密的一个原因。在许多应用中,人们需要对纯数字的电子信息进行签名,表明该信息确实是某个特定的人产生的。//数字签名

        对于公钥密码体制,目前最著名的是由美国三位科学家 Rivest, Shamir 和 Adleman 于1976 年提出并在 1978 年正式发表的 RSA 体制,它是一种基于数论中的大数分解问题的体制

        在公钥加密中,加密密钥 PK(Public Key 公钥) 是向公众公开的,而解密密钥 SK(Secret Key 私钥) 则是需要保密的。

        公钥加密的加密和解密过程有如下特点:

  1. 首先,密钥对 生成器会为接收者 B 生成一对密钥:即公钥 PK_{B} 和私钥 SK_{B}
  2. 然后,发送者 A 用 B 的公钥 PK_{B} 对明文 X 加密,得出密文 Y,发送给 B。
  3. 最后,B 接收到密文后,用自己的私钥 SK_{B} 进行解密,恢复出明文。

        //这个过程其实很好理解,就是如果要与B通信,就必须按照B给的方式对信息进行处理。处理后的信息,除了B,其他人都不能对这条信息进行解密。

        //就比如你向你的朋友转账(通信),首先必须知道对方的账号(公钥),然后把钱转到对方的账户上(公钥加密),这样你的朋友使用密码就可以取得到你转账的钱(私钥解密)

        下图,给出了使用公钥进行加密的过程:

        需要注意的是,任何加密方法的安全性都取决于密钥的长度,以及攻破密文所需的计算量,而不是简单地取决于加密的方式(对称加密或非对称加密)

3、如何分配对称密钥?

        对称密钥分配存在以下两个问题:

  1. 第一,如果 n 个人中的每一个需要和其他 n-1 个人通信,就需要 n(n-1) 个密钥。但每两人共享一个密钥,因此密钥数是 n(n - 1)/2。这常称为 n^{2} 问题。如果 n 是个很大的数,所需要的密钥数量就非常大。//密码数量大
  2. 第二,通信的双方怎样才能安全地得到共享的密钥呢?正是因为网络不安全,所以才需要使用加密技术。但密钥又需要怎样传送呢?//网络不安全

        目前常用的密钥分配方式是设立 密钥分配中心KDC(Key Distribution Center)。 KDC 是大家都信任的机构,其任务就是给需要进行秘密通信的用户临时分配一个会话密钥(仅使用一次)。

        如下图,用户 A 和 B 都是 KDC 的登记用户。A 和 B 在 KDC 登记时就已经在 KDC 的服务器上安装了各自和 KDC 进行通信的 主密钥(master key) K_{A}K_{B}

        密钥分配分为三个步骤://单纯的对称密钥的分配比较麻烦

  1. 用户 A 向密钥分配中心 KDC 发送时用明文,说明想和用户 B 通信。在明文中给出了 A 和 B 在 KDC 登记的身份。
  2. KDC 用随机数产生“一次一密”的会话密钥 K_{AB} 供 A 和 B 的这次会话使用,然后向 A 发送回答报文。这个回答报文用 A 的密钥 K_{A} 加密。这个报文中包含这次会话使用的密钥 K_{AB} 和请 A 转给 B 的一个 票据(ticket),该票据包括 A 和 B 在 KDC 登记的身份,以及这次会话将要使用的密钥K_{AB}。票据用 B 的密钥 K_{B} 加密,A 无法知道此票据的内容,因为 A 没有 B 的密钥K_{B},当然 A 也不需要知道此票据的内容。
  3. 当 B 收到 A 转来的票据并使用自己的密钥K_{B}解密后,就知道 A 要和他通信,同时也知道 KDC 为这次和 A 通信所分配的会话密钥K_{AB}

        此后,A 和 B 就可使用会话密钥K_{AB}进行这次通信了。需要注意的是,在网络上传送密钥时,都是经过加密的。解密用的密钥都不在网上传送。

4、如何分配非对称密钥?

        我们都知道,使用非对称密钥时大家都各自保存有自己的私钥,然后把各自的公钥发布在网上。

       但是,如何能确信获取的公钥真的就是对方的呢?

        例如,A 和 B 都是公司。有个捣乱者给 A 发送邮件,声称自己是 B,要购买 A 生产的设备,货到付款,并给出了 B 的收货地址。邮件中还附上“B的公钥”(其实是捣乱者的公钥)。最后用捣乱者的私钥对邮件进行了签名。A 收到邮件后,就用邮件中给出的捣乱者的公钥,对邮件中的签名进行了鉴别,就误认为 B 真的是要购买设备。当 A 把生产的设备运到 B 的地址后,B 才知道被愚弄了!//B被冒充,A无法确认对方身份,因此交易会存在抵赖的可能性

        现在流行的办法,这就是找一个可信任的第三方机构,给拥有公钥的实体发一个具有数字签名的数字证书(digital certificate)数字证书就是对公钥与其对应的实体进行绑定(binding)的一个证明,因此它常称为公钥证书。这种签发证书的机构就叫作认证中心CA(Certification Authority),它由政府或知名公司出资建立(这样就可以得到大家的信任)。

        每个证书中写有公钥及其拥有者的标识信息(人名、地址、电子邮件地址或 IP 地址等)。更重要的是,证书中有 CA 使用自己私钥的数字签名,这就是认证中心 CA 把 B 的未签名的证书进行散列函数运算,再用 CA 的私钥对散列值进行 D 运算(也就是对散列值进行签名)。这样就得到了 CA 的数字签名。把 CA 的数字签名和未签名的 B 的证书放在一起,就最后构成了已签名的 B 的数字证书。//CA使用自己的私钥对证书的散列值进行加密

        CA 证书无法伪造,任何用户都可从可信任的地方(如代表政府的报纸)获得认证中心 CA 的公钥,以验证证书的真伪。这种数字证书是公开的,不需要加密。

        公司 A 拿到 B 的数字证书后,可以对 B 的数字证书的真实性进行核实。A 使用数字证书上给出的 CA 的公钥,对数字证书中 CA 的数字签名进行 E 运算,得出一个数值。再对 B 的数字证书(把 CA 的数字签名除外的部分)进行散列运算,又得出一个数值。比较这两个数值。若一致,则证明数字证书是真的。

        关于数字证书的内容,X.509 规定了一个数字证书必须包括以下这些重要字段:

  • X.509 协议的版本
  • 数字证书名称及序列号
  • 本数字证书所使用的签名算法
  • 数字证书签发者的唯一标识符
  • 数字证书的有效期(有效期开始到结束的日期范围)
  • 主体名(或主题名,公钥和数字证书拥有者的唯一标识符)
  • 公钥(数字证书拥有者的公钥和使用算法的标识符,对应的私钥由证书拥有者保存)

        至此,全文结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/3887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第三十七天| LeetCode738.单调递增的数字

LeetCode 738 单调递增的数字 题目链接:738. 单调递增的数字 - 力扣(LeetCode) 【解题思路】 需要采用从后往前的遍历 如果发现该数字的前一位比后一位大,那么前一位就做-1处理,后一位变为9 注意:千万不…

《DiffusionNER: Boundary Diffusion for Named Entity Recognition》

Submitted 22 May, 2023; originally announced May 2023. Comments: Accepted to ACL 2023, submission version https://github.com/tricktreat/DiffusionNER 在这里插入图片描述 问题: 命名实体识别任务中存在的噪声跨度(边界不清晰&#xff09…

人工智能如何提高公司效率的 5 种方法

人工智能是当今最热门的话题之一,但并不是每个人都了解其对商业的价值规模。由此可见,现有的AI技术可以将企业的生产力提升40%。 在机器学习的帮助下,Netflix 利用自动化个性化推荐每年赚取 10 亿美元。当公司使用人工智能时,34%…

【QA】Git的底层原理

前言 本文通过一个简单的示例,来理解Git的底层原理。 示例 1、新建本地仓库并上传第一个文件 相关步骤: 新建仓库及创建文件查看文件状态将文件添加到暂存区将文件提交到本地仓库 HMTeenLAPTOP-46U4TV6K MINGW64 /d/GSF_Data/Github/Java/Git/git-…

文件下载的N种方式

文件下载有多种方式可以实现。下面是其中几种常见的方式&#xff1a; 1.使用<a>标签的download属性 <template><a :href"fileUrl" download>点击下载文件</a> </template><script> export default {data() {return {fileUrl: h…

宝塔面板手动执行定时任务脚本的解决方案

在终端命令行执行定时任务&#xff0c;可以使用 cron 这个工具。cron 是 Unix、BSD、Linux 和类 Unix 操作系统中的工具&#xff0c;用于在固定时间、日期或间隔执行预定的命令。 为了每10分钟执行 /www/wwwroot/jwcsv.kwfw.net_20080/cron/test.sh 这个脚本&#xff0c;需要编…

【C语言】每日一题,快速提升(6)!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 题目&#xff1a; 矩阵转置 有一个矩阵&#xff0c;他想知道转置后的矩阵&#xff08;将矩阵的行列互换得到的新矩阵称为转置矩阵&#xff09; 示例&#xff1a; 输…

深入了解Semaphore、CountDownLatch等实用工具的用法

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

JRT质控打印

最近客户端打磨完了&#xff0c;又来推进质控了。之前演示的打印都是Demo示例&#xff0c;这次真正的写质控图的打印&#xff0c;数据就是质控数据录入界面录入的数据。其中质控图打印应该算最复杂的类型了。涉及JS的绘图&#xff0c;打印表格等&#xff0c;表格比较简单、还没…

端点安全管理系统干什么用的 有哪些好用?

你听说过&#xff1a; 端点安全管理系统吗&#xff1f; 我们一起来了解一下啊 一、什么是端点安全管理系统&#xff1f; 端点安全管理系统&#xff08;Endpoint Security Management System&#xff09;是一种专门用于保护企业内部网络终端设备的综合性安全解决方案。 这些终…

C++开发与学习平台@软件选择@代码跨平台问题@语言文档参考指南

文章目录 集成编译器的C/C开发工具(开箱即用)学习平台选择推荐&#x1f47a;初学者平台和软件选择开箱即用的C/C运行环境需要稍微配置的环境有经验的用户 小结&#x1f47a; AI辅助开发工具代码补全和AI代码片段生成补全 资料C代码跨平台问题&#x1f47a;C标准库ISO C非标准库…

全国省级金融发展水平数据集(2000-2022年)

01、数据简介 金融发展水平是一个国家或地区经济实力和国际竞争力的重要体现。它反映了金融体系的成熟程度和发展水平&#xff0c;是衡量一个国家或地区经济发展质量的重要指标。金融发展水平的提高&#xff0c;意味着金融体系能够更好地服务实体经济&#xff0c;推动经济增长…

Servlet(写一个Hello Worldt)【一】

文章目录 一、Servlet 目的 ----- 实现动态页面二、编写一个 Servlet 的Hello World2.1 创建项目2.2 处理文件夹2.3 引入依赖2.4 手动创建一些必要的目录/文件2.5 编写代码2.6 打包程序2.7 部署2.8 验证程序是否能正常工作 一、Servlet 目的 ----- 实现动态页面 静态页面 VS 动…

安卓免费抠图、AI绘图、修图软件——SnapEdit

一、前言 AI绘图原理主要基于深度学习和神经网络技术&#xff0c;通过训练数据集中的图像&#xff0c;从中学习并提取特征&#xff0c;进而生成新的图像。这一过程涉及到多种技术和模型&#xff0c;包括但不限于VAE&#xff08;变分自编码器&#xff09;、auto-encoder、GAN&a…

后端工程师——C++工程师如何准备面试?

相比 Java 语言方向,C++ 入门简单,精通难,找工作竞争压力更小,但 C++ 依然是近年来招聘的热门岗位之一。本文将从以下三个方面进行详细讲解,帮助你对 C++ 相关岗位的就业前景、岗位要求、学习路线等有更充分的了解。 C++工程师面试准备 上两篇文章对 C++ 工程师的招聘需求…

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们&#xff0c;都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标&#xff0c;现知识人网小编整理刊出。 近日&#xff0c;美国《新闻周刊》&#xff08;Newsweek&#xff09…

To String的几个作用

To String的几个作用 一、Object类中toString的作用 1、在主方法中我们可以直接用toString输出对象其中的内容 2、我们需要直接输出对象中所属内容时&#xff0c;直接使用toString方法输出语句&#xff0c;输出内容不友好&#xff0c;不便于阅读 子类&#xff1a; public c…

[USACO18DEC] S 补题报告

目录 1 AC情况2 题目详情Convention SConvention II SMooyo Mooyo S 1 AC情况 Convention SConvention II SMooyo Mooyo S Accepted \texttt{\color{green}{Accepted}} Accepted Accepted \texttt{\color{green}{Accepted}} Accepted Unaccepted \texttt{\color{red}{Unaccept…

vue的build先上部署的 devServer不生效的场景记录

文章目录 Nginx 相关命令VUE项目devServer.proxy&#xff08;正向代理&#xff09;匹配请求中的地址工作流程开发期间代理proxy的配置项目打包上线出现的问题描述 Nginx 相关命令 //运行命令 start nginx 启动nginx服务//运行命令 nginx -s stop 停止nginx服务//运行命令 ngin…

Linux 进程管理快捷键 ctrl+z、ctrl+c、ctrl+\、ctrl+d介绍

在Linux系统中&#xff0c;可以使用一些特定的键盘快捷键来管理后台进程和控制终端的行为。下面是对这些快捷键的介绍&#xff1a; 1 CtrlZ&#xff08;挂起&#xff09;&#xff1a; 在终端中运行程序时&#xff0c;你可以使用CtrlZ来将其挂起&#xff0c;即将其移动到后台并…