密码技术学习一:密码

news2024/10/5 14:35:50

0、前言

本文是作者阅读《图解密码技术》时,学习总结的一些知识,在此推荐想要深入学习密码知识的同志,将此书作为入门书来看还是比较适合的。

1、密码技术简介

1.1加密与解密

在两者通信过程中,不想通信的内容被第三方知道,就需要发送者将明文加密发送给接收者,然后接收者通过解密将密文解开,才能读懂通信的内容;

第三方截取到密文也无济于事,因为他读不懂密文,这个过程就叫做加密和解密。

 

1.2对称密码和公钥密码(非对称密码)

        在计算机技术中,用来解决复杂问题的步骤通常称做算法,从明文生成密文的步骤也叫做"加密算法",解密的步骤叫做“解密算法”,二者统称为”密码算法“;

现实世界中,我们开锁,上锁都需要用到钥匙,而密码算法中需要也需要用到类似的东西进行加解密,这个东西叫做“密钥”。

对称密码:是指在加密和解密过程中使用同一种密钥的方式。

公钥密码:是指在加密和解密中使用不同密钥的方式,因此公钥密码又被成为非对称加密。

1.3其他密码技术

        密码技术不仅仅是基于密码的机密性,用于校验消息是否被篡改的完整性、以及确认消息是否是本人认证的技术等都是密码技术的重要组成部分。

1.3.1 单向散列函数

场景:我们在日常使用软件的时候,是不是经常从一些非官方途径获取(嘿嘿能看这文章的兄弟,绝对有经历),那我们也会担心我们使用软件之前,软件被人破解修改过,甚至加入病毒程序也有可能。

        为了防止程序被篡改,可以在发布软件的同时发布该软件的散列值,该散列值就是用单向散列函数计算出来的数值;下载该软件的人可以自行计算该文件的散列值并与发布者的散列值对比,如果一样就说明未被篡改。

1.3.2消息认证码

为了确定消息是否来自所期望的通信对象,可以使用消息认证码技术,它还可以确认消息是否被篡改。

1.3.3 数字签名

        数字签名技术就好比将现实世界中的签名和盖章移植到数字世界的技术;

举个例子:A将消息“花100块购买一个篮球”通过电子邮件发送给B,怎么保证这个消息不是别人伪装A发的?怎么保证消息内容正确,没被人篡改过?怎么让A无法否认自己发了消息?

数字签名技术的解决办法是在A发送消息之前,给消息内容加上数字签名,然后再发送,B接收到消息后,可以先对数字签名进行验证,判断是否内容被篡改,是否消息是A发送的。

1.3.4伪随机数生成器

        伪随机数生成器是一种能够模拟产生随机数列的算法。场景举例:在web中进行ssl/tls通信时,会生成一个仅用于当前通信的临时密钥,这个密钥就是通过伪随机数生成器生成的。

 

1.4隐写术和数字水印

隐写术隐藏的是消息本身,而密码隐藏的是真正的内容。

        隐写术很容易理解,我们都知道藏头诗,想表达的内容都在每一行的第一个字,将真正的消息隐藏起来了就是隐写术的体现,但是一旦我们知道是藏头诗,便可以直接读出内容,因此无法代替密码本身。

数字签名:

        数字签名就应用了隐写术加密码:数字签名是一种将著作权拥有者及购买者的信息加密后嵌入文件中的技术。这样以来即便有人能发现密文也无法读取出嵌入文件的签名内容。

2、对称密码

2.1比特序列密码

        现代的密码都是建立在计算机的基础上,而计算机底层能读懂的是机器语言即0和1,所有类型的数据都会转化为0和1组成的比特序列,拿字母举例,比如midnight这个单词对应的比特序列如下:

 

每个字母有对应的二进制码,这个即我们熟知的ASCII码,这种方式称为编码

为什么不说是加密呢,因为尽管我们人类看不懂(说不定有天才),但计算机可以凭借强大的运算能力轻而易举地“读懂”。

2.1.1 XOR

XOR全称是exclusive or,就是异或,异或运算就不用介绍了吧。

这种运算对于加密的场景,举例如下:

        在这里要是蒙版使用的比特序列完全随机,那么就保证了图像真正的完全被掩盖,因为你不知道蒙版的情况下,就无法预测和推测出这个随机比特序列产生的结果。

2.2、一次性密码本

        因为存在暴力破解这样遍历密钥空间的方法,那么一切密文都迟早会被破解出来,针对这种情况怎么应对呢?答案之一是一次性密码本

        一次性密码本:就是将明文与一串随机的比特序列做XOR运算。

比如上面提到的midnight单词,编码后是8*8共64位长的比特序列,我们随机生成64位比特序列和前者做XOR运算,产生出密文。我相信大家都会有疑惑“不是刚才说密钥空间有限(随机比特序列只有64位),那么暴力破解啊,不是迟早能蒙出来么?”,但是换个角度去想,暴力破解是能破解出所有的可能结果,但是作为破解方,在众多结果中,他如何能知道midnight就是答案呢?主要是不能确定哪个密钥是加密使用的,那么就无法判断结果。

        提一个结论:一次性密码本几乎无法实际中使用。

        我相信每个人都感觉到了问题所在,一次性密码本确实绝对无法被破解,但是作为消息接收方,必须获取密钥才能破解密文啊,问题来了:密文丢了就丢了,坏人无法破解,可是密钥也丢了咋办?笑晕,一次性密码本仅仅是将“如何保护密码”转变成“如何保护密码本”了啊,实际上加密传输的问题并没实质性得到解决。据说一些高度机密的场合(自己脑补)一次性密码本会使用,那么就肯定要通过绝对随机的方式生成密码本先,然后加密完,通过不同的手段(特工007?呵呵)分别送到接收方,过程中要严格保证不被截获或遗失。

2.3、DES

        DES:全称data encryption standard,是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称密码,一直以来被美国及其他国家政府和银行等广泛使用,但如今几十年过去,des已经在短时间内被破解。

        原理:des是将64比特的明文加密成64比特密文的对称加密算法,它的密钥长度是64位,但每隔7位会设置一个用于错误检查的比特,因此实际密钥长度是56位。des只能加密64比特的数据,要是明文过长,需要将其分成许多段,每段64比特分别加密。

        des的基本结构是基于Feistel网络,在Feistel网络中,加密的各个步骤称为轮。

步骤:细节不多写了,大家感兴趣可以针对性的去了解,大致总结为以下步骤(解密的话,按照步骤反着来就行):

  • 将输入的数据分为左右两个部分;
  • 右侧的部分直接作为输出的右侧;
  • 右侧数据发送到轮函数,用了生成密钥序列;
  • 将密钥序列与左侧数据做XOR运算,得到输出的左侧;

总结:无论多少轮,无论用多复杂的论函数、Feistel网络都能够使用相同结构进行加密和解密。

 

2.4、AES

AES概念:取代DES而成为新标准的一种对称密码算法,2000年Rijndael打败其他竞争对手被NIST(美国国家标准技术研究所)选为AES标准。和DES一样,Rijndael算法也是根据多轮所构成,但它没有使用Feistel网络,它的结构是SPN结构,详细细节咱们就不做深究了,感兴趣的同学可以专门去了解。总之:Rijndael的特点就是从明文到密文的加密过程,全称可以用公式来表达,此算法背后有着严谨的数学结构,到目前为止还没有出现针对AES的有效攻击,所以大家在选择使用哪种密码时尽量考虑用AES,用的人越多,表明对其进行研究的人也越多,当发现什么缺陷时,人们都会第一时间得知。

2.4.1、分组密码

概念:分组密码就是每次只能处理特定长度的一块数据的一类密码算法,AES就是此类算法,它的分组长度可以从128bit、192bit和256bit中选。

2.4.2、模式

概念:分组密码算法只能加密固定长度数据,当我们需要加密的明文超过了此固定长度,就需要对分组密码算法进行迭代。迭代的方式称为模式:

  • ECB模式:电子密码本模式;
  • CBC模式:密码分组链接模式;
  • CFB模式:密文反馈模式;
  • OFB模式:输出反馈模式;
  • CTR模式:计数器模式。

注意:ECB模式是所有模式中最简单的一种,它的明文分组和密文分组是一一对应的关系,这会被当做破译密码的线索,因此ECB模式有一定的风险,建议不要使用。

推荐使用:CBC和CTR模式,详情参见《实用密码学》

3、公钥密码(非对称密码)

密钥配送问题:我们之前提到的对称密码,在使用过程中,加密和解密都用的同一套密钥,这个特性就导致,若是密钥被人截取,就能直接解密对应的密文,所以在如何配送和保管密钥上面存在很大的问题。

可以通过公钥密码解决密钥配送问题:密钥分为加密密钥和解密密钥两种,发送者使用加密密钥对消息进行加密,接收者使用解密密钥对消息进行解密,加密密钥是接收者提前发给发送者的,这里即便有人截获密钥也没有用,这个只能用来加密,解密密钥一直都在接收者处。

公钥和私钥:公钥密码中,加密密钥一般是公开的,被称之为公钥,相对的,解密密钥不能公开给任何人,只能你自己使用,所以称为私钥;公钥和私钥是一一对应的,一对公私钥被称为密钥对,各自不能单独生成。

3.1、RSA算法

比较常用的公钥密码算法是RSA算法

密文 = 明文 E mod N (RSA加密)

密文就是明文E次方对N求余,其中E和N的组合就是公钥

明文 = 密文 D mod N (RSA解密)

明文是密文D次方对N求余,D与N的组合是私钥

破译:RSA算法难以破解的密码是因为目前为止人类还没有发现对大整数进行质因数分解的高效算法,甚至无法确定是否存在这种算法。

优缺点:公钥密码在安全性上比对称密码要好很多,但是效率上与对称密码相差甚远,所以特定的场景下,对称密码还是很实用。

其余还有EIGamal方式、Rabin方式、椭圆曲线密码

3.2、混合密码系统

  • 用对称密码加密消息
  • 通过伪随机数生成器生成:对称密码加密中使用的会话密钥
  • 用公钥密码加密会话密钥
  • 从混合密码系统外部赋予:公钥密码加密时使用的密钥

混合密码系统加密流程

 解密流程:

 

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

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

相关文章

在R语言中进行缺失值填充:估算缺失值

介绍 缺失值被认为是预测建模的首要障碍。因此,掌握克服这些问题的方法很重要。最近我们被客户要求撰写关于缺失值处理的研究报告,包括一些图形和统计输出。 估算缺失值的方法的选择在很大程度上影响了模型的预测能力。在大多数统计分析方法中&#xf…

有状态软件如何在 k8s 上快速扩容甚至自动扩容

概述 在传统的虚机/物理机环境里, 如果我们想要对一个有状态应用扩容, 我们需要做哪些步骤? 申请虚机/物理机安装依赖下载安装包按规范配置主机名, hosts配置网络: 包括域名, DNS, 虚 ip, 防火墙...配置监控 今天虚机环境上出现了问题, 是因为 RabbitMQ 资源不足. 手动扩容…

一夜之间火爆GitHub的JavaWeb轻量级开发面试教程,终于浮出水面

前言 学习是一种基础性的能力。然而,“吾生也有涯,而知也无涯。”,如果学习不注意方法,则会“以有涯随无涯,殆矣”。 学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力。我们在刚出生…

[附源码]Python计算机毕业设计Django医院门诊管理信息系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

React组件通信

react因为组件化,使得组件间通信十分的重要。本文就来简单介绍一些常见的react组件间传递的内容。 我将归纳为以下几种关系来详述:父组件与子组件之间,子组件与父组件之间,发布者与订阅者模式(context),兄弟…

Netty入门——基于NIO实现机器客服案例

Netty简单案例前言环境准备前置知识网络传输的几种实现方式BIO——同步阻塞IONIO——同步非阻塞IOAIO——异步非阻塞IO适用范围Netty简介特点核心组件使用场景运行简图案例简介关键代码客户端服务器端运行状况总结前言 最近学完了Netty,在这里关于Netty中实现NIO做…

【Shell 脚本速成】09、Shell 循环控制语句 for

目录 一、循环控制 break 语句 二、循环控制 continue 语句 三、循环控制 sleep 四、参数控制命令-shift 五、脚本退出命令 exit 总结 六、for 嵌套 6.1 for 嵌套 if 七、for 与数组 7.1 使用 for 循环遍历读出数组 7.2 使用 for 循环进行数组存值 一、循环控制 bre…

Zabbix6.0使用教程 (一)—zabbix新增功能介绍2

上一篇我们已经介绍了部分zabbix6.0的新增功能,这期我们将继续为家详细介绍下余下的zabbix6.0新增功能,大家可以往下看。 六、监控项 6.1 自动类型选择 监控项配置表单会自动建议匹配的信息类型,如果选定的监控项键值仅返回特定类型的数据…

迷宫逃离的问题-CoCube

ROS1云课→20迷宫不惑之A*大法(一种虽古老但实用全局路径规划算法) 将CoCube分别放入如下地图中的左侧,如何从右侧逃离: 需要算法:求解起点到终点的路径。 还需要什么? 参考: (eng.…

目标检测算法——垃圾分类数据集汇总(附下载链接)

🎄🎄近期,小海带在空闲之余收集整理了一批垃圾分类数据集供大家参考。 整理不易,小伙伴们记得一键三连喔!!!🎈🎈 目录 一、Kaggle 垃圾分类图片数据集 二、垃圾分类数据…

全国青少年软件编程等级考试Python标准解读(1_6级)

考核性质: 全国青少年软件编程等级考试标准(Python语言)由中国电子学会科普培训与应用推广中心和北京大学信息科学技术学院共同制定。由全国青少年电子信息科普创新联盟标准工作组开发,由中国电子学会普及工作委员会审核通过&…

央视主持人康辉再次出圈,一口气播出一个多小时不卡顿、零失误

说起中央电视台的主持人,曾经有好几个国字脸,不过随着时间的流逝,他们都消失在历史的长河里。如今的央视主持人队伍,康辉可以算得上天花板级别的人,他也因此俘获了一大批观众,成为最受欢迎的主持人。 专业科…

阿里P5的测试开发工程师,都有哪些要求?

【北京】高德 高级测试开发工程师(面议) 职位描述: 1、负责高德信息服务核心服务端系统测试和质量保障体系建设; 2、为复杂高德信息-本地生活系统设计并执行高质量的综合测试方案; 3、通过多种技术手段实现高度自…

数据库常见死锁原因及处理

目录前言什么是死锁死锁产生的四个必要条件1. 表锁死锁死锁场景解决方案建议2. 行锁死锁2.1 两个事务分别想拿到对方持有的锁,互相等待,于是产生死锁死锁场景解决方案2.2 共享锁转换为排他锁死锁场景解决方案3. INSERT ... ON DUPLICATE KEY UPDATE产生d…

[附源码]Python计算机毕业设计Django疫情防控平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Watch事件介绍_java培训

Watch事件 Java培训课程 Watch事件 一次触发 当数据有了变化时zkserver向客户端发送一个watch,它是一次性的动作,即触发一次就不再有效,类似一次性纸杯。 只监控一次。如果想继续Watch的话,需要客户端重新设置Watcher。因此如果你得到一个w…

【Android Studio程序开发】按钮触控---按钮控件Button

除了文本视图之外,按钮Button也是一种基础控件。因为Button是由TextView派生而来,所以文本视图 拥有的属性和方法,包括文本内容、文本大小、文本颜色等,按钮控件均能使用。不同的是,Button拥有默认的按钮背景&#xff…

采购管理系统有什么用,哪个好?

如今随着各行各业的采购组织管理理念的不断变换,利用信息化手段来管理企业采购行为已然成为一种趋势。 现代采购管理系统可以使采购组织规范采购工作的组织实施,建立有责任感的管理体系,从而提高企业经济效益和采购质量,增强企业…

Linux搭建 FTP服务器

Linux搭建 FTP服务器 vsftpd 是 very secure ftp daemon 的缩写,它是 Linux 上使用最受欢迎、使用最广泛的 FTP 服务器之一,它具有安全,速度快,稳定的特点,很多重要的 FTP 站点比如 ftp.gnu.org、ftp.freebsd.org 都是…

【JavaWeb开发-Servlet】day03-URL参数传递与MySQL数据库连接

目录 1、登录示例,谁用url传递参数 (1)创建一个Servlet类,名字叫做loginServlet (2)保留需要的部分 (3)删除多余代码 (4)编写loginServlet.class &#xff08…