对称密码学

1. 使用OpenSSL 命令行

        在 Ubuntu Linux Distribution (发行版)中, OpenSSL 通常可用。当然,如果不可用的话,也可以使用下以下命令安装 OpenSSL:

$ sudo apt-get install openssl

安装完后可以使用以下命令检查 OpenSSL 版本:

$ openssl version

其输出将如下所示:

OpenSSL 1.0.2 1 Mar 2016

2. 密码学简介

        密码学(Cryptography) 是在面对敌手时确保信息安全的科学。这里有一个前提设想是,敌手(或者说对手) 可以使用无限的资源。密码(Ciphers) 是用于加密或解密数据的算法,如果对手拦截到该数据,但是无法解密(Decryption),那么该数据就是无意义的,而解密需要密钥。

        密码学主要用于提供保密服务,它本身不能被认为是一个完整的解决方案,而是在更广泛的安全系统中解决安全问题的关键组成部分。例如,保护区块链生态系统需要许多不同的密码学原语,如哈希函数、对称密钥密码学、数字签名和公共密钥密码学等。

        除保密服务外,加密技术还提供其它安全服务,如完整性(Integrity) 、不可否认性(Non-Repudiation) 和 身份验证(Authentication) --包括实体身份验证和数据源身份验证。另外,它还提供可追责性(Accountability) ,这是许多安全系统的要求。可追责性可以解决电子现金双重支付的问题。 

3. 密码学的数学基础

3.1 集合

集合(Set,记为 S) 就是将不同的对象放在一起,例如 S= {1,2,3,4,5}。

3.2 群

群(Group,记为 G)是定义了一个二元运算的交换集合,该运算组合了集合的两个元素。群运算是分闭的,并全对于已定义的标识元素来说是可结合的。另外,集合中的每个元素都有一个逆(Inverse)。

具体来说,G 中的每个序偶(a,b)通过运算生成 G 中的元素(a,b),并满足以下公理。

封闭性:封闭(Closure)意味着如果元素 a 和 b 在集合中,则对元素执行运算后得到的元素也将在集合中,即如果 a 和 b 都属于 G,则 a.b 也属于 G。

结合律:结合(Associative) 意味着元素的分组不分影响运算的结果。例如,对于 G 中的任意元素a,b,c,都有:

(a.b).c=a.(b.c)

单位元:G 中存在一个元素 e,对于任意元素 都有:

a.e=e.a=a

逆元:对于 G 中的任意元素 a,都存在一个元素 a' G,使得下式成立:

a.a' = a'.a  =e

3.3 域

        域(Field,记为 F) 是一个包含加法和乘法群的集合。更确切地说,集合中的所有元素都构成一个加法和乘法群。它满足加法运算和乘法运算的特定公理(即上面介绍的封闭性、结合律、单位元和逆元)。

4. 密码学模型

下图显示了通用密码学模型

        在上图中,P 表示纯文本( Plaintext), E 表示加密(Encryption),C 表示密文(Ciphertext),D 表示解密(Decryption)。基于该模型,对实体、发送者、接收者、对手、密钥和信道等概念的解释如下:

 实体:发送、接收数据或执行运算的个人或系统。

发送者:发出数据的实体

接收者:接收数据的实体

对手:试图绕开或破解安全服务的实体。

密钥:用于加密或解密其他数据的数据。

信道:为实体之间的沟通提供一种媒介。

5. 现代信息安全的基本要求

现代信息安全的基本要求包括 5 项,即保密性、完整性、可认证性、不可否认性和可追责性。

5.1 保密性

        保密性(Confidentiality) 是指应确保信息仅对授权实体可用,防止将信息泄露给未经授权的人,这涉及加密和解密技术的应用。

5.2 完整性

        完整性(Integrity) 是指应确保仅授权实体能够修改信息,防止信息出现未经授权的篡改,这涉及消息认证码和数字签名等技术的应用。

5.3 可认证性

        认证(Authentication) 可确保有关实体的身体或消息的有效性,保证信息来自正确的发送者,这涉及消息认证和数字签名等技术的应用。

6. 密码学原语

        密码学原语(Cryptographic Primitives) 是安全协议或系统的基本构建块。

        所谓安全协议(Security Protocol) 就是指要采取的一组步骤,它通过利用适当的安全机制来实现所需的安全目标。目前正在使用的安全协议有多种类型,如认证协议、不可否认协议和密钥管理协议等。

         密码学原语的分类如下图所示:

7. 对称密码学介绍

7.1 流密码

7.2 分组密码

8. 分组密密码加密模式

        分组密码的加密工作模式允许使用同一个分组密码对多于一块的数据进行加密,并保证其安全性。

        在分组加密模式下,根据使用的密码类型,将明文分为固定长度的块。然后,将加密函数应用于每个块。

        8.1 电子密码本

        电子密码本(Electronic Code Book,ECB)是一种基本的操作模式。在该模式中,通过将加密算法一对一地应用于每个明文块来生成加密数据。这是最直接的加密模式,但是由于它不太安全并且可以泄露信息,因此在实践中已不建议使用。

        分组密码的电子密码本模式如下图所示:

        在上图中可以看到,我们提供了明文 P 作为分组密码加密函数的输入,再加上密钥 KEY,共同产生密文 C 作为输出。

 8.2 密码块链接

        在密码块链接(Cipher Block Chaining,CBC)模式下,每个明文块都与先前加密的块进行 XOR 运算。CBC 模式使用初始化向量(Initialization Vector,IV) 加密第一个块。建议随机选择 IV,如下图所示:

8.3 计数器模式

        计数器 (Counter,CTR) 模式有效地使用了分组密码作为流密码。在这种情况下,将提供一个唯一的随机数,该随机数与计数器值连接以生成密钥流,如下图所示:

9. 密钥流生成模式

        在密钥流生成模式(Keystream Generation Mode) 下,加密函数可生成一个密钥流,然后将其与纯文本流进行 XOR 运算以实现加密。

9.1 消息认证模式

        在消息认证模式(Message Authentication Mode) 下,消息认证代码(Message Authentication Code,MAC) 来自加密函数。MAC 是提供完整性服务的加密校验和。使用分组密码生成 MAC 的最常见方法是 CBC-MAC。在 CBC-MAC 中,链的最后一块的一部分用作 MAC。例如,MAC 可用于确认消息是否由未授权实体修改,这可以通过 MAC 函数使用密钥对消息进行加密来实现。具体方法是:接收者在接收到消息后,使用密钥再次对接收到的消息进行加密,并将其与从发送者接收到的 MAC 进行比较,如果它们都匹配,则可知消息未被授权的用户修改,这就是 MAC 能提供完整性服务的原理;如果它们都不匹配,则表示消息在传输过程中未授权实体修改过。

9.2 加密哈希模式

        哈希函数主要用于将消息压缩为固定长度的摘要。在密码哈希模式(Cryptographic Hash Mode)下,分组密码用作压缩函数以生成纯文本哈希。

10. 数据加密标准

        当前市场主导的分组密码是高级加密标准(AES),我们将介绍 AES 的设计和机制。但是,在讨论 AES 之前,有必要先介绍一下数据加密标准(Data Encryption Standard,DES)的历史,因为正是 DES 促进了新 AES 标准的开发。

        数据加密标准由美国国家标准技术研究院(National Institute of Standards and Technology,NIST)引入,作为加密的标准算法,在 20 世纪 80 年代和 90 年代被广泛使用。但是,由于技术和密码学研究的进步,它并不能被证明对暴力破解攻击(Brute Force Attack) 具有很强的抵抗力。例如,1998 年 7 月,电子前沿基金会(Electronic Frontier Foundation,EFF)就使用 EFF DES Cracker (或 Deep Crack) 的专用机器破坏了 DES。

        DES 仅使用 56 位密钥,这引起了人们的一些担忧。该问题通过引入三重 DES(Triple DES,3DES) 获得了解决,3DES提出了使用 168 位密钥,方法是将 DES 算法执行 3 次以获得 3 个 56 位密钥,这样暴力破解攻击就几乎不可能成功。但是,3DES 轮的数量众多而计算速度慢,分组长度为 64 位而效率低下,从而难以用软件有效实现。

以下是有关如何使用 AES 进行加密和解密的 OpenSSL 示例:

openssl enc -aes-256-cbc -in message.txt -out message.bin
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:

OpenSSL 工具可用于下图显示的所有密码: 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 自定义微信小程序 tabBar 导航栏

背景 做了一个校园招聘类小程序,使用 uniapp vue3 uview-plus pinia 构建,这个小程序要实现多角色登录,根据权限动态切换 tab 栏文字、图标。 使用pages.json中配置tabBar无法根据角色动态配置 tabBar,因此自定义tabBar&…

如何构建你自己的实时人脸识别系统

引言 随着人工智能技术的发展,人脸识别已经成为日常生活中的常见技术,被广泛应用于安全验证、个性化服务等多个领域。本教程将指导你如何使用Python编程语言结合OpenCV和face_recognition库来构建一个基本的人脸识别系统。我们将从安装必要的库开始&…

C++ 设计模式——解释器模式

目录 C 设计模式——解释器模式1. 主要组成成分2. 逐步构建解释器模式步骤1: 定义抽象表达式步骤2: 实现终结符表达式步骤3: 实现非终结符表达式步骤4: 构建语法树步骤5: 实现内存管理步骤6: 创建上下文和客户端 3. 解释器模式 UML 图UML 图解析 4. 解释器模式的优点5. 解释器模…

生日贺卡录放音芯片,多段音频录音ic生产厂商,NVF04M-32minute

可以录音播放的生日贺卡与传统的纸质贺卡相比,它有着创意以及个性的特点,仅需少量的电子元器件,即可实现录音功能,搭配上文字,让声音存储在生日贺卡里,让贺卡也变得有温度,祝福我想亲口对TA说。…

fantastic-admin前端+django后端,初始化全流程记录

fantastic-admin前端是我目前看到最完善的前端框架,只需要简单的设置就可以快速开始项目。 但是我本人的能力有限,对前端知识一知半解,之前废了九牛二虎之力才跑通了前后端流程,由于新的项目需要,有了开发新后台的想法…

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展,尤其是大模型(如GPT、BERT、Vision Transformer等)的广泛应用,确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段,能够…

学习计算机网络

a类0~127,b类128~191,c类192~223 网络地址:看子网掩码,分网络位和主机位,后面是主机位,主机位全部为0,网络地址。 直接广播地址:看子网掩码,分网络位和主机位&#xff…

Jenkins构建CI/CD

CI/CD 软件开发的连续方法基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性。从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预。 它涉及在每次小迭代中不断构建,测试和部署代码更改,从而减少…

vue2+ueditor集成秀米编辑器

一、百度富文本编辑器 1.首先下载 百度富文本编辑器 下载地址:GitHub - fex-team/ueditor: rich text 富文本编辑器 2.把下载好的文件整理好 放在图片目录下 3. 安装插件vue-ueditor-wrap npm install vue-ueditor-wrap 4.在你所需要展示的页面 引入vue-uedito…

判断给定的一个不限长的数字串大小变化趋势、经典面试题:猴子排成圈踢出求最后剩下大王编号以及Debian服务器php中安装IMAP扩展各种报错解决过程

一、判断给定的一个不限长的数字串大小变化趋势 自制了一道面试题:给定一个不限长的数字字符串,判断每一位数字的大小变化趋势是否是^或v趋势,如果是就返回true,如果不是就返回false。比如121即属于^,322129即属于v。这…

Verilog和Matlab实现RGB888互转YUV444

文章目录 一、色彩空间1.1 RGB色彩空间1.2 CMYK色彩空间1.3 YUV色彩空间 二、色彩空间转换公式2.1 RGB转CMYK2.2 CMYK转RGB2.3 RGB888转YUV4442.4 YUV444转RGB888 三、MATLAB实现RGB888转YUV4443.1 matlab代码3.2 matlab结果 四、Verilog实现RGB888转YUV444 一、色彩空间 色彩空…

【区块链 + 物联网】区块链边缘计算网关设备 | FISCO BCOS应用案例

目前边缘端设备主要以人工智能应用为主,或以数据采集网络设备为主,还未有区块链边缘计算网关设备,难以 在依托终端设备的传统行业中进行区块链 应用。本项目研制区块链边缘计算网关,将区块链、计算与网络集成 在一起,…

单片机学习笔记

一、单片机帝国的诞生与发展 1.1 单片机的基本概念 单片机是一种集成电路芯片,采用超大规模的集成电路把具有数据处理功能的中央处理器存储器、输入输出端口、外围电路和相关外设集成在一块硅片上构成一个小而完整的微型计算机系统。 一般而言,单片机也…

Java语言程序设计基础篇_编程练习题**17.21 (十六进制编辑器)

目录 题目:**17.21 (十六进制编辑器) 代码示例 结果展示 题目:**17.21 (十六进制编辑器) 编写一个 GUI 应用程序,让用户在文本域输入一个文件名,然后按回车键,在文本域显示它的十六进制表达形式。用户也可以修改十六…

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型

分类预测|基于蜣螂优化极限梯度提升决策树的数据分类预测Matlab程序DBO-Xgboost 多特征输入单输出 含基础模型 文章目录 一、基本原理1. 数据准备2. XGBoost模型建立3. DBO优化XGBoost参数4. 模型训练5. 模型评估6. 结果分析与应用原理总结 二、实验结果三、核心代码四、代码获…

1-9 图像膨胀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel np.ones((3, 3), np.uint8) _, binary_image cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) dilated_image cv2.dilate(binary_image, kernel, iterations1) 三、运行现象 四、完整代码 五、完整工程贴出 一、提前准备 …

scrapy 爬取微博(一)【最新超详细解析】:创建微博爬取工程

本项目属于个人学习记录,爬取的数据会于12小时内销毁,且不可用于商用。 1 初始化环境 首先我们需要有python环境,先安装一下python,然后配置环境变量,这边给出windows的配置: 我这边的安装目录是D:\pyt…

PHP轻量级高性能HTTP服务框架 - webman

摘要 webman 是一款基于 workerman 开发的高性能 HTTP 服务框架。webman 用于替代传统的 php-fpm 架构,提供超高性能可扩展的 HTTP 服务。你可以用 webman 开发网站,也可以开发 HTTP 接口或者微服务。 除此之外,webman 还支持自定义进程&am…

Django发送邮件

【图书介绍】《Django 5企业级Web应用开发实战(视频教学版)》_django 5企业级web应用开发实战(视频教学版)-CSDN博客 Django 5框架Web应用开发_夏天又到了的博客-CSDN博客 本文学习怎么使用Django发送邮件。 尽管使用Python的smtplib模块发送电子邮件…

vant 动态查询下拉菜单(可用)

动态查询item项 <van-form submit"onSubmit" ref"formRef"><Title title"企业信息" title-line title-size"19" class"ml-[18px] mb-[18px]"></Title><van-cell-group inset class"py-[18px]&quo…