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

CBK-D2-安全与架构工程.md

CBK-D2-安全与架构工程

密码学和对称密钥算法

密码通信的基础知识

明文P-plaintext、加密encrypt、密文C-ciphertext、解密decrypt、密钥Key
多数情况下,密钥无非是一个极大的二进制数
每一种算法都有一个特定密钥控制key space,是一个特定的数值范围
密钥空间由位大小bit size决定,是密钥内二进制位0和1的数量
密码术
创建和执行秘密代码和密码的技艺
密码分析
如何打败代码和密码
密码数学
代价函数从耗费成本和或时间的角度衡量破解所需的代价
代码作用于单词和短语,而密码作用有字符、位和块
替换密码–频率分析
多表替换-周期分析的二阶式频率分析
单词密本–替换密码
如果使用得当是不可破解的
1.单次密本必须随机生成
2.单次密本必须处于物理保护之下,以防泄露
3.每个单次密本必须只使用一次
4.密钥必须至少与将被加密的消息一样长
大多数现代加密算法都执行某类块密码

私钥密码系统

密码可为已存储(静态)、通过网络传送(传输中/动态)和存在于内存(使用中/处理中)的敏感信息提供保密性、完整性、身份认证和不可否认性

密码学的基本目标

1.保密性
对称密码系统
使用一个共享秘密密钥
非对称密码系统
使用单独组合的公钥和私钥
2.完整性
确保数据没有在未经授权的情况下被更改
消息的完整性可使用数字签名,在消息传输时创建
完整性保障由公钥和私钥系统提供
3.身份认证
挑战-应答身份认证协议
4.不可否认性
由公钥或非对称密钥提供

现代密码学

通过复杂算法和长密码密钥来实现密码学的目标
对称加密算法
1.密钥分发是问题,通常带外交换
2.不提供不可否认性
3.算法缺乏可扩展性,无法用于多人之间
4.必须经常重新生成
5.运算速度快,比非对称算法快1000~10000倍,本身更适合硬件执行
非对称加密算法
公钥加密,私钥解密
私钥加签,公钥验签
运算速度缓慢,通常使用混合密码传输大量数据
提供保密性、完整性、身份验证、不可否认性
哈希算法
哈希函数无法推导消息本身
存在哈希碰撞
一个哈希函数为两个不同消息产生相同哈希值

几种常见的对称密码系统

GCM、CCM同时包含了保密性和数据真实性
经过验证的加密模式
ECB,CBC,CFB,OFB和CTR模式只提供了保密性
未经验证的模式
美国1977年发布数据加密标准DES
2001年12月被高级加密标准取代
64位块密码,5种运行模式-ECB,CBC,CFB,OFB,CTR
一次性在64位明文上进行计算生成64位密文
使用密钥长度56位,8位是奇偶校验位,但是实践中很少使用到
16轮加密
国际数据加密算法IDEA
良好隐私PGP安全邮件软件包
64位明文/密文块上执行128位密钥运算,被分解成52个16位子密钥
Blowfish
64位块上运行
允许密钥长度变化,从32位到448位
作者开放软件许可
已被许多商用软件产品和操作系统采用
Skipjack
美国政府托管加密密钥
64位块运行,80位密钥,支持4种运行模式
美国财政部和NIST
Rivest Ciphers
Ron Rivest创建的对称密码,称为RC家族,RC4,RC5,RC6
RC4 1987年开发,
只进行一轮加密,使用40-2048位长度可变密钥
被集成到WEP,WPA,SSL,TLS等,导致WEP,WPA,SSL目前不符合现代安全标准
TLS也不再允许把RC4用作流密码
RC5 与RC4完全无关,块大小可变,密钥0~2040位,被认为是RC2的改进版
RC6是RC5的下一版开发的块密码,128位块大小,128、192、256位对称密钥
高级加密标准AES
2001年11月 NIST发布AES/Rijndael
允许使用3中密钥强度:128,192,256位
只允许处理128位块,加密轮数取决于所选密钥长度
对称密钥管理
密钥管理实践规范
1.秘密密钥的创建
2.分发
3.存储
4.销毁
5.恢复
6.托管
创建和分发密钥
线下分发-受制于地理位置遥远
公钥加密
Diffie-Hellman 密钥交换算法
存储和销毁对称密钥
绝不将加密密钥与被加密数据保存在同一个系统
敏感密钥,考虑安排两个人各持一半片段
基于软件的密钥存储,引入软件机制造破坏的风险
基于硬件的密钥管理设备,复杂且成本高,能提供额外的保护
密钥托管和恢复
公平密码系统

####### 密钥被分成两个或多个片段,每个片段交给一个独立的第三方托管

####### 政府部门在得到合法授权后可以出示法庭命令证明,获取组合密钥

托管加密标准

####### 向政府或另一个授权代理提供了解密密文得技术手段–专门针对Clipper芯片提出的

####### N之取M的授权代理

托管密钥的合法用途

####### 密钥恢复代理RA recovery agent

####### 预防密钥丢失,相关人员离职等恢复密钥

密钥生命周期

除单次密本以外,所有密码系统的使用寿命都是有限的
安全专业人员在挑选加密算法时,必须重视密码生命周期
1.规定机构可接受的密码算法,如AES,RSA和3DES
2.根据被传输信息的敏感性,识别可与每种算法配套使用的可接受密钥长度
3.枚举可用的安全交易协议,如TLS
如果是为最近启动的业务系统选用安全密钥,没必要担心10年后的密钥安全性
如果是设计建造比原子弹还危害大的武器,有必要考虑10年后的保密性,比如考虑量子密码

PKI和密码应用

公钥密码系统-非对称密码

公钥和私钥
公钥可通过不受保护的通信自有共享
公钥系统使用的密钥必须比私钥系统更长,才能产生同等的强度
RSA
1977年发明,2000年公开
Merkle-Hellman算法,1984年被破解
密钥强度:对称128位=RSA3072位=椭圆曲线256位
ElGamal
对Diffie-Hellman的扩展,1985年
加密信息都被加长了一倍,不适合大量数据加密
椭圆曲线
ECC,1985年提出,密码强度强
Diffie-Hellman密钥交换
和RSA类似都是由素数数学原理支撑
是公钥密码的例子,
本身不是加密协议,而是密钥交换协议
依赖于大素数的使用
量子密码
当前仅限于理论研究,如果出现会导致量子霸权
带来更新、更复杂的密码算法
实验室已开发量子密钥分发QKD执行方案,尚未实用
量子计算可能已在密码分析攻击中秘密出现了
目前的密码算法的大量级加密可暂抵御量子霸权

哈希函数

消息摘要
是提取一条可能会比较长的消息,然后从消息内容中派生一个唯一的输出值
消息摘要为128位或更长
密码哈希函数的5个基本要求
输入可以任意长度
输入固定长度
哈希计算对任何输入都相对容易
哈希函数是单向的
哈希函数抗碰撞
几乎不可能找到可产生相同哈希值的两条消息
可以修改传输过程中的哈希值和消息,比较难实现
需要截取消息并修改消息
获取加密公钥或加签私钥,重新生成新消息,中间人攻击可以?
几种常见的哈希算法
安全哈希算法SHA
SHA2性能优于SHA3,也优于MD5
SHA2有4个变体-sha256,sha224, sha512,sha384
消息摘要5 MD5
如今不是那么安全,建议SHA2
RIPE消息摘要 RIPEMD
RIPE-160至今被认为是安全的,和RIPEMD-320一样
基于哈希的消息身份认证码HMAC
哈希值长度可变
可变长度哈希HAVAL
MD5修改版
使用1024位块,产生128,160,192,224,256位长度哈希值

数字签名

两个目的
1.可提供不可否认性保障
2.可抵御恶意篡改和无意改动,即完整性
是公钥加密法和哈希函数的组合作用
不仅可用于消息,还可用来鉴别从互联网下载的代码

相关文章:

CBK-D2-安全与架构工程.md

CBK-D2-安全与架构工程 密码学和对称密钥算法 密码通信的基础知识 明文P-plaintext、加密encrypt、密文C-ciphertext、解密decrypt、密钥Key 多数情况下,密钥无非是一个极大的二进制数 每一种算法都有一个特定密钥控制key space,是一个特定的数值范围 密钥空间由位大小b…...

Windows驱动开发系列文章一

文章目录 环境搭建如何调试实时调试非实时调试 环境搭建 基本上按照官方网站安装 VisualStudio/SDK/WDK 这些软件就可以了 详情请参考这个安装链接 如何调试 Windows 调试分为两种:一种是实时调试,一种是非实时调试 实时调试 这个就需要用到Microso…...

java项目之人事系统源码(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的人事系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于vue的人事系统的主要使用者…...

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新,相信各位开发者们都迫不及待想要自己上手试一试。 别急,Google 谷歌今年为中国的开发者们准备了一份特别的学习资源,让开发者们自由探索新知。 G…...

前端应用开发实验:表单控件绑定

目录 实验目的相关知识点实验内容代码实现效果 实验目的 (1)熟练掌握应用v-model指令实现双向数据绑定的方法,学会使用 v-model指令绑定文本框、复选框、单选按钮、下拉菜单; (2)学会值绑定(将…...

[双指针] --- 快乐数 盛最多水的容器

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 本篇博客我们分享一下双指针算法中的快慢指针以及对撞双指针,下面我们开始今天的学习吧~ 🏠 快乐数 📒 题…...

操作系统 - 输入/输出(I/O)管理

输入/输出(I/O)管理 考纲内容 I/O管理基础 设备:设备的基本概念,设备的分类,I/O接口 I/O控制方式:轮询方式,中断方式,DMA方式 I/O软件层次结构:中断处理程序,驱动程序,…...

代码随想录算法训练营第22天(py)| 二叉树 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 力扣链接 给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>L) 思路 如果当前节点元素小于low,递归右子树,返回符合条件的头节点 如果当前节点元…...

使用C语言实现学生信息管理系统

前言 在我们实现学生信息管理系统的过程中,我们几乎会使用到C语言最常用最重要的知识,对于刚学习完C语言的同学来说是一次很好的巩固机会,其中还牵扯到数据结果中链表的插入和删除内容。 实现学生信息管理系统 文件的创建与使用 对于要实现…...

上下文视觉提示实现zero-shot分割检测及多visual-prompt改造

文章目录 一、Closed-Set VS Open-set二、DINOv2.1 论文和代码2.2 内容2.3 安装部署2.4 使用效果 三、多visual prompt 改造3.1 获取示例图mask3.2 修改函数参数3.3 推理代码3.4 效果的提升! 四、总结 本文主要介绍visual prompt模型DINOv,该模型可输入八…...

WebGL学习(一)渲染关系

学习webgl 开发理解渲染关系是必须的,也非常重要,很多人忽视了这个过程。 我这里先简单写一下,后面尽量用通俗易懂的方式,举例讲解。 WebGL,全称Web Graphics Library,是一种在网页上渲染3D图形的技术。它…...

人生建议:向猫学习

心安理得地被爱 猫从不担心自己不配得到爱,也正是这幅理所应当、宠辱不惊的样子,让人欲罢不能。或许 当你相信自己值得世界上最好的爱时,你就会拥有。 多晒太阳多睡觉 猫喜欢睡觉,尤其喜欢躺阳光好的地方。阳光和睡眠&#xff0c…...

软件架构设计属性之三:结构性属性浅析

文章目录 引言一、结构性属性的定义二、结构性属性的关键要素1. 组件化2. 模块化3. 层次化4. 接口定义5. 数据流6. 依赖管理 三、结构性属性的设计原则1. 高内聚低耦合2. 松耦合3. 清晰的接口4. 可维护性5. 可扩展性 四、结构性属性的实现策略1. 组件划分2. 模块化设计3. 接口设…...

JAVA:多线程常见的面试题和答案

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、并发编程三要素? 原 子 性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。可 见 性 可见性指多…...

短信平台-平台群发短信

时代的进步带来了我们生活的便利,而其中最受欢迎和广泛应用的方式之一就是通过短信传递信息。在这个飞速发展的数字时代,我们需要一个高效、可靠的短信平台来满足不断增长的通讯需求。而今天,我要向大家推荐的正是这样一款卓越的短信平台——…...

C++:类和对象

一、前言 C是面向对象的语言,本文将通过上、中、下三大部分,带你深入了解类与对象。 目录 一、前言 二、部分:上 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的…...

JavaScript条件语句与逻辑判断:解锁代码逻辑的奥秘【含代码示例】

JavaScript条件语句与逻辑判断:解锁代码逻辑的奥秘【含代码示例】 基本概念与作用if...else:决策的基础switch:多路分支的能手逻辑运算符:连接逻辑的纽带三元运算符:简洁的力量 功能使用思路与技巧短路求值优化防止swi…...

sparksql自定义函数

前言 Spark SQL UDF(也称为用户定义函数)是Spark SQL&DataFrame最有用的功能,它扩展了Spark内置功能。在本文中,我将解释什么是UDF?为什么我们需要它,以及如何使用Java、Scala示例在DataFrame和SQL上创建和使用它。 注意:UDF是最昂贵的操作,因此只有在必要时才使用…...

新人开发新系统,旧人维护旧系统

通常来说旧系统存在一些难以解决的问题,软件架构及逻辑实现可能会有一定的缺陷和复杂度,甚至有些烂系统可以称为”焦油坑“,意思是出现问题难以分析解决,谁来谁陷进去。因此,如果同时存在新系统(可能正在开…...

鸿蒙应用模型:【Stage模型开发】概述

Stage模型开发概述 基本概念 下图展示了Stage模型中的基本概念。 图1 Stage模型概念图 [AbilityStage] 每个Entry类型或者Feature类型的HAP在运行期都有一个AbilityStage类实例,当HAP中的代码首次被加载到进程中的时候,系统会先创建AbilityStage实例…...

java使用jdbcTemplatep批量插入数据

JdbcTemplate 是 Spring 框架中提供的一个简化 JDBC 操作的工具类,它封装了 JDBC 的核心功能,使得开发者能够更方便、简洁地进行数据库操作。 下面是一个使用 JdbcTemplate 进行批量插入的示例: import org.springframework.jdbc.core.Batch…...

K8s service 进阶

文章目录 K8s service 进阶Service 工作逻辑Service 具体实现Service 资源类型ClusterIPNodePortLoadBalancerExternalName Service 与 EndpointEndpoint 与 容器探针自定义Endpoint Service 相关字段sessionAffinityexternalTrafficPolicyinternalTrafficPolicypublishNotRead…...

CompletableFuture详细讲解

目录 一、基本概念 1.1 异步编程 1.2 CompletableFuture简介 二、创建和完成CompletableFuture 2.1 创建CompletableFuture对象 2.2 手动完成CompletableFuture 2.3 异常完成CompletableFuture 三、异步计算和回调 3.1 异步任务的执行 3.2 处理计算结果 四、组合多个…...

【Linux】初识Linux和Linux环境配置

1.什么是Linux操作系统 说到电脑系统 我想有大多数人会脱口而出:windows、mac 是的,这也是如今市场上主流的两种操作系统。 但是对于IT相关的人士来说,还有一种系统也是必须有姓名 那就是Linux Linux,Linux Is Not UniX 的…...

redis-cli help使用

1. redis-cli命令使用—先连接上服务器 连接到 Redis 服务器: 使用 redis-cli 命令即可连接到本地运行的 Redis 服务器,默认连接到本地的 6379 端口。 redis-cli如果 Redis 服务器不在本地或者端口不同,可以使用 -h 和 -p 参数指定主机和端…...

中华活页文选高中版投稿发表

《中华活页文选(高中版)》创刊于1960年,是中宣部所属中国出版传媒股份有限公司主管、中华书局主办的国家级基础教育期刊,曾获得“中国期刊方阵双效期刊”、国家新闻出版广电总局推荐的“百种优秀报刊”等荣誉称号。本刊以高中学科…...

[图解]企业应用架构模式2024新译本讲解02-表数据入口

1 00:00:00,420 --> 00:00:04,330 这个案例,我们就是用书上的案例了 2 00:00:06,080 --> 00:00:08,860 收入确认的一个案例 3 00:00:09,510 --> 00:00:11,100 书上讲了,收入确认 4 00:00:13,330 --> 00:00:15,270 就是说,你给…...

SSE(Server Sent Event) 踩坑留念

整条链路是 客户端A --> 服务端 A —> 服务端 B 我负责服务端 A 此时要注意 Client 中的 processes 的写法 Post(value “/v2/xx”, processes MediaType.TEXT_EVENT_STREAM) 这样写是一直报错的 改成下面的写法才可以 Post(value “/v2/xx”, processes MediaT…...

plt.xticks()的作用

参考: https://blog.csdn.net/weixin_41796265/article/details/131442400 plt.xticks() 是 Matplotlib 库中的一个函数,用于设置坐标轴刻度的位置和标签。 它的作用包括: 设置 x 轴刻度的位置:可以通过传递一个数组或列表来设…...

开发者的福音:免去搭建服务,让你的应用开发变得像吃蛋糕一样简单!

传统应用开发的"噩梦" 想象一下,你正在准备一场盛大的晚宴,但必须从零开始建造厨房、种植食材、甚至学习烹饪技巧。这就是传统应用开发的现状——你不仅要设计数据库、编写API接口,还要处理对象存储、实时数据库、云数据库等一系列…...