《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术
文章目录
- 1. 信息加密技术
- 1.1 数据加密
- 1.2 对称密钥加密算法
- 1)数据加密标准(DES)
- 2)三重DES(Triple-DES)
- 3)国际数据加密算法(IDEA)
- 4)高级加密标准(AES)
- 1.3 非对称密钥加密算法
- 1)概述
- RSA算法
- 2. 密钥管理技术
- 2.1 秘钥的使用控制
- 1)密钥标签
- 2)控制矢量
- 2.2 密钥的分配
- 1)获得共享秘钥的方式
- 2.3 公钥加密体制的密钥管理
- 1)公开发布
- 2)公用目录表
- 3)公钥管理机构
- 4)公钥证书
- 2.4 公钥加密分配单钥密码体制的密钥
本章对应教材:4.4信息加解密技术、4.5 密钥管理技术
1. 信息加密技术
1.1 数据加密
- 作用:防止未经授权的用户访问敏感信息的手段
- 密码学(Cryptography):研究数据加密的科学
- 加密过程
- 发送端把明文P 用加密算法E 和密钥 K 加密(即 密文C=E(K,P))
- 接收端利用解密算法D 和密钥K 对C 解密得到明文P(即P=D(K,C)
- 这里加/解密函数E 和D 是公开的,而密钥K是秘密的

1.2 对称密钥加密算法
- 概述:加密密钥和解密密钥是相同的,称为共享密钥算法或对称密钥算法
1)数据加密标准(DES)
- Data Encryption Standard
- 制定:1977年1月,美国国家安全局(National Security Agency) 根据IBM的专利技术Lucifer制定了DES。
- 加密过程:
- 明文被分成64位的块
- 对每个块进行19次变换
- 其中16次变换由
56位密钥的不同排列形式控制 - 而IBM使用128为秘钥,而DES减少了秘钥长度
- 其中16次变换由
- 最后产生64位的密文块
2)三重DES(Triple-DES)
- 概述:两把密钥对报文做三次 DES加密,克服了DES密钥长度较短的缺点
- 秘钥:112位
- 因为三次加密中,第一层和第三层秘钥相同,因此秘钥长度 56x2=112位 (而不是56x3)
- 若只使用两层加密,第2层DES不安全,它对一种称为“中间可遇”的密码分析攻击极为脆弱
- 算法的步骤:
- 用密钥 K1 进行 DES加密
- 用K2 对步骤(1)的结果进行 DES解密。
- 对步骤(2)的结果使用密钥 K 1 进行DES 加密。
3)国际数据加密算法(IDEA)
- International Data Encryption Algorithm
- 秘钥:128位
- 步骤:把明文分成64位的块,进行8轮迭代加密
- 优点:可以用硬件或软件实现、比DES快
4)高级加密标准(AES)
- 全称 Advanced Encryption Standard
- 秘钥:支持支持128、192、256
- 可以通过软件或硬件实现。
1.3 非对称密钥加密算法
1)概述
-
概念:如题,加密密钥和解密密钥是不同的
-
满足的条件
- D( E ( P ) ) = P
- 不能由E导出D
- 选择明文攻击不能破解E
明文攻击:选择任意明文-密文对以确定未知的密钥
-
加密传输和签名
- 用公钥加密,私钥解密,可实现保密通信
- 用私钥加密,公钥解密,可实现数字签名
RSA算法
- 概念:RSA(Rivest Shamir and Adleman) 是一种公钥加密算法
- 基于大素数分解的困难性
具体方法不用考虑,教材写的错误很多
2. 密钥管理技术
2.1 秘钥的使用控制
两个用户(主机、进程、应用程序)在进行保密通信时,必须拥有一个共享的并且经常更新的秘密密钥
秘钥控制技术:
1)密钥标签
- DES 的密钥控制
- 将DES的8个校验位作为控制这个密钥的标签
- 前3位分别代表了该密钥的不:主/会话密钥、加密、解密
- 缺陷:由于长度限制,且须经解密方能使用,带来了一定的不便性
- 将DES的8个校验位作为控制这个密钥的标签
2)控制矢量
- 概念:
- 用若干字段说明秘钥在一定环境下,是否允许被使用
- 由秘钥中心产生,并加入秘钥中
- 其长度可变
2.2 密钥的分配
1)获得共享秘钥的方式
-
方法一(人工发送)
- 秘钥选取:A 选取
- 发送:A ==> B
- 媒介:物理手段发送
- 问题:网络中秘钥数目过多
如网络中N个用户都要求支持加密服务,则每一对用户都需要一个共享秘钥,数目将达到 N(N-1)/2
-
方法二(人工发送)
- 秘钥选取:第3方选取密钥
- 发送:第三方 ===> A、B
- 媒介:物理手段发送
- 问题:同上
-
方法三
- 秘钥选取:A选取
- 发送:A <用已有秘钥加密(新密钥)> ==> B
-
问题:
- B一旦获得秘钥,则可获得后期秘钥。
- 网络中秘钥数目过多(同上)
-
方法四:
- 秘钥选取:由秘钥中心(KDC)选取
- 发送:
- KDC == 保密通道A ==> A
- KDC == 保密通道B ==> B
- 分配过程
- KDC有一个共享密钥,即主密钥
- 通过主密钥分配给每对用户会话密钥
- 通信结束后立会话秘钥立即销毁
- KDC的分层结构
- 每个小范围建立一个本地KDC
- 不同范围间使用一个全局KDC
2.3 公钥加密体制的密钥管理
1)公开发布
- 概念:指用户将自己的公钥发给每一其他用户,或向某一团体广播
- 缺点:任何人都可以伪造密钥公开发布
2)公用目录表
- 概念:一个公用的公钥动态目录表,由某个可信的实体或组织)承担该共用目录表的建立、维护以及公钥的分布等
- 过程:
- 管理员
- 为每个用户在目录表中建立一个目录
- 每个目录包括:用户名、用户的公开钥
- 定期公布和更新目录表
- 用户
- 使用合法方式向管理者注册自己的公钥
- 可通过合法手段更新自己的公钥
- 管理员
- 缺点:管理员秘密钥一旦被攻击者获取,所有用户将面临被假冒的危险
3)公钥管理机构
- 与公用目录的区别
- 由秘钥管理机构维护动态公钥目录
- 过程:
- 每一个用户都知道管理机构的公钥
- A向管理机构发出请求
- 管理机构使用私钥加密,发送给A
- A 使用管理机构的公钥解密
- 缺点
- 管理机构容易成为瓶颈
- 管理机构的公钥目录容易成为攻击目标
4)公钥证书
-
证书形式:CA=ESKCA[T,IDA,PKA]
- C A则是用户 A 产生的证书
- ESKCA是 CA 的秘密钥
- T是当前的时戳
- IDA是用户A 的身份
- PKA是 A 的公钥,
-
解决公钥中心成为瓶颈的问题:
- 用户将自己的公钥通过公钥证书发给另一用户
- 而接受方则可用 C A的公钥 PKCA对证书加以验证
如是,通过证书交换用户之间的公钥而无须再与公钥管理机构联系,从而避免了由统一机构管理所带来的不便和安全隐患。
2.4 公钥加密分配单钥密码体制的密钥
-
公钥加密体制的加密速度比较慢,适合单钥密码体制的密钥分配
-
建立共享会话密钥的步骤
- A 将用B 的公钥加密得到的身份IDA和一个用于唯一标志这个业务的一次性随机数N1,发往 B
- 预使A 确定对方是B, 则 B 用 A 的公钥加密N1和另一新产生的随机数N2 因为只有B 能解读①中的加密。
- A用 B 的公钥 PKB对N2 加密后返回给 B , 以使B 相信对方确是A。
- A 将 M=EPKB[ESKA[KS]] 发送给B , 其中KS为会话密钥,用 B 的公开钥加密是为保证只有B 能解读加密结果,用 A 的秘密钥加密是保证该加密结果只有A 能发送。
- B 以DPKA[DSKB[M]]恢复会话密钥。
-
优点:
- 保密性和认证性均非常强
- 既可防止被动攻击,又可防止主动攻击

相关文章:
《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术
文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1)数据加密标准(DES)2)三重DES(Triple-DES)3)国际数据加密算法(IDEA)4)高级加密标准(AES…...
Leetcode 404:左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。 思路:遍历树,寻找左叶子节点; 如果判断是左叶子节点,就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…...
Keil问题解决:结构体数组初始化,初始化后的值不是目标值
省流:使用的编译器为compiler version 6,切换为compiler version 5 如果缺少编译器,请参考:Keil手动安装编译器V5版本 结构体定义: typedef struct _TASK_COMPONENTS {uint8_t Run; // 程序运行标…...
C++set关联式容器
Cset 1. 关联式容器 vector、list、deque、forward_list(C11)等STL容器,其底层为线性序列的数据结构,里面存储的是元素本身,这样的容器被统称为序列式容器。而map、set是一种关联式容器,关联式容器也是用来存储数据的࿰…...
Celery Redis 集群版连接和PyCharm启动配置
目录 使用Redis cluster版作为broker原因 PyCharm配置 使用Redis cluster版作为broker 在celery5及其之前版本,需要配置如下才可行 celery_app.conf.update( broker_transport_options{“global_keyprefix”: “{celery}:”}, ) 原因 https://github.com/celery/…...
「AIGC算法」readLink实现url识别pdf、网页标题和内容
本文主要介绍AIGC算法,readLink实现url识别pdf、html标题和内容 一、设计思路 识别url是pdf或者网页网页处理逻辑,使用cheerio解析网页PDF处理逻辑,使用pdf-parse解析PDF文件自定义的函数来提取标题和内容二、可执行核心代码 const express = require("express")…...
Vue3+ts(day06:路由)
学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学,可以点心心支持一下哈(笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】,记录一下学习笔记,用于自己复盘,有需要学…...
springboot集成dubbo实现微服务系统
目录 1.说明 2.示例 3.总结 1.说明 dubbo官网:https://cn.dubbo.apache.org/zh-cn/ Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,支持多种语言,官方提供了 Java、Golang 等多语言 SDK 实…...
idea使用gitee基本操作流程
1.首先,每次要写代码前,先切换到自己负责的分支 点击签出。 然后拉取一次远程master分支,保证得到的是最新的代码。 写完代码后,在左侧栏有提交按钮。 点击后,选择更新的文件,输入描述内容(必填…...
Docker容器里面有什么东西?
2024年5月15日,周三下午 Docker 容器内部包含了一个运行的应用程序及其依赖环境。当你创建一个 Docker 容器时,你可以指定容器应该运行哪个镜像。这个镜像是由一系列层组成的,每一层包含了一些文件和目录。当你运行这个镜像时,Doc…...
vue基础+高级用法
一、vue基础用法 mvvm的了解/认知 语义化模板mvc - model view controllermvvm - model view view-model vue是如何利用mvvm思想进行开发 双向数据绑定 花括号,构建了数据与视图的双向绑定通过视图绑定事件,来处理数据 生命周期-vue示例 建立&…...
鸿蒙应用布局ArkUI【基础运用案例】
布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如,市场类应用作为典型的平级导航,其首页不同板块采用了不同布局能力。 标题栏与搜索栏:因元素单一、位置固定在顶部,…...
GD32F103RCT6/GD32F303RCT6-UCOSIII底层移植(1)工程建立
本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布: 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转: 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…...
在本地设备上配置 Git 忽略特定文件
在本地设备上配置 Git 忽略特定文件 在日常的 Git 使用中,有时我们希望某些文件只在本地设备上被忽略,而不影响其他团队成员或设备。这篇博客将介绍如何在特定设备上配置 Git 忽略规则,使得一个文件不会被提交。 背景 通常,我们…...
cin.ignore()函数和stoll函数
cin.ignore()函数 cin.ignore() 是一个非常实用的函数,主要用于控制输入流 cin 的行为 cin.ignore(int n 1, char delimiter EOF); n:一个整数参数,表示要忽略的字符数量。默认值是1,意味着只忽略下一个字符。delimiter&#x…...
win11快速安装mysql数据库系统
win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意,此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上,输入…...
C# WinForm —— 21 RichTextBox 使用
1. 加载文件到控件中 加载文件时,要设置文件的路径和类型RichTextBoxStreamType,文件类型包含: RichText 0:富文本格式(RTF)流PlainText 1:纯文本流对象链接和嵌入(OLEÿ…...
【数据结构】堆(超详细)
文章目录 前言堆的概念及结构堆的实现堆的向下调整算法(建小堆为例)堆的向上调整算法(建小堆为例)堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码(包括测试代码&a…...
常用正则 JS 持续更新
应用版本号正则验证 正则判断版本号(如:1.2.3 或 1.2.3.4),不允许出现 0.x.x;01.x.x; x.0x.x; x.00.x; x.x.00; x.x.0x/ ^ ([ 1-9 ] \d | [ 1-9 ])( . ([ 1-9 ] \d | \d )) {2,3} $ /0-10 保留一位小数的数…...
YOLO v6 iou_loss dfl_loss一直为0
Question img record infomation path is:…/mydata/images.train_cache.json Train: Final numbers of valid images: 1248/ labels: 1248. 0.1s for dataset initialization. img record infomation path is:…/mydata/images.val_cache.json Convert to COCO format 100%|█…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
