密码学概论之基本概念

本人信息安全专业,大三,为着将来考研做准备,打算按照自己目前的理解给大家唠唠密码学。

这个专栏我将从以下七个章节来聊聊密码学,若有不当之处,敬请指出。 

• 密码学概论

• 流密码

• 分组密码

• 公钥密码

• 消息认证和Hash函数

• 数字签名和认证协议

• 密钥分配与密钥管理

这篇文章则主要是聊聊密码学的一些基本概念。

什么是密码学?

信息在网络中不总是安全的,存在着人为攻击以获取信息或破坏信息;其中获取信息属于被动攻击,破坏信息属于主动攻击,那么什么是被动攻击?什么是主动攻击?两者的区别是啥呢?

如上图所示,被动攻击只获取信息,不破坏伪造信息,也就是说不改变信息;而主动攻击则改变了传递的信息。两者的区别正在于是否改变了传递的信息。

正是由于信息或数据在网络中传递的这种不安全性,密码学应运而生。维基百科上是这样说的:密码学是对安全通信技术的研究,要能够有效的防范潜在攻击。

用通俗易懂的语言来说就是,密码学是研究如何安全传递信息的一门学科,其中包括加密解密、hash函数、数字签名等。加密解密实现数据的保密性,hash函数验证数据的完整性,数字签名验证发送方的身份。

很多同学可能把密码学等同于加密解密,事实上这种观点是不太全面的,毕竟仅仅实现数据保密还远远不够。

举个例子,假设你发现自己收到小明发来的好友申请,同意后,他发消息让你借给他一万元,说第二天还你两万,你傻呵呵地给他转过去了,结果第二天和小明说起这件事时,他却死不承认,“我昨天没给你发消息借钱呀,还什么钱?”

当然,这完全有可能发生,你以为对面给你发消息的是小明,事实上可不一定是小明,很可能是别人冒充小明的身份给你发消息。但是如果这时候你能够验证对方是不是小明,这个问题不就不存在了吗?假设验证结果显示对面确实是小明,第二天他就没法赖账不还了;而如果验证显示不是小明,那很显然你也不会被骗了。

结果,第二天你让小明还你两万的时候小明说:“我明明说的是到时候还你10002。”你傻眼了。这不都保证数据保密和验证身份了吗,他怎么还能抵赖呢?可别忘了,数据虽然保密了,但是保密不代表不被篡改,没准小明当时发送的确实是10002,被攻击方篡改,恰好改成两万了,这个又怎么说得清呢?但假设你能够验证数据的完整性,即是否被篡改,小明就算想抵赖也不成了。

大家是不是清楚多了呢?如果现在对这几个概念不太理解也没事,谁都是从不懂到懂的,知道有这么个概念就行,之后将详细讲解。

密码发展简史

大体分三个阶段

• 历史时期的古典密码加密手段 (1949年之前 加密技术的开拓)

– 恺撒密码

• 计算机出现以来的现代阶段 (1949-1976年 密码学成为一门科学)

– Shannon

• 公钥体系阶段 (1976年之后 公钥密码思想的出现)

– Diffie/Hellman、RSA

如果大家之前没接触过密码学,可能对这些概念不是很了解,没关系,咱们之后还会讲解的(如果没讲的话,可以提醒一下),我在这里也不过分解释了。

密码学基本概念

明文P:发送方即将要发送的消息。

密文C:明文经过密码变换后的消息。

加密E:由明文变换为密文的过程。

解密D:由密文恢复出原明文的过程。

加密算法:对明文进行加密时所采用的一组规则。

解密算法:对密文进行解密时所采用的一组规则。

K密钥:是一种特定的值,能使密码算法按照指定的方式进行,并产生相应的密文。

开始时,可能会把P和C搞混,把E和D搞错,在这里教大家一个小窍门,大家应该对Ciphertext不陌生,这是密文的意思,那自然C和P谁对应明文谁对应密文就很清楚了。什么?之前不知道这个单词?

那教大家个记忆方法,你看C是不是一个半圆,看起来快把自己包裹住了,为啥把自己包住呀,肯定有秘密呗,这不就记住了吗?另一个P自然对应着明文。当然,前提是你得清楚P和C一个是明文一个是密文,要是和E、D搞混了,我就爱莫能助了。不过,也不是没办法,记英语单词。

E和D也是同样的道理,加密的英文encrypt,解密的英文decrypt,记住一个的英文就记住另一个了,也不是必须记住英语单词,记首字母也行,但很容易就弄混了。当然也有个窍门,en前缀表示“使……成某种状态”,使明文被加密;de前缀表示“否定”,对密文进行反加密,即解密。这样是不是就清楚多了呢?

加密算法是对明文进行加密时采用的算法;解密算法则是对密文进行解密是采用的算法,举个栗子,小明给好哥们用英文发微信约他出去玩耍,又怕被女朋友发现,于是将每个英文单词向后移一位,得到的结果发给好哥们。小明和好哥们事先就约定好了,如果发的是一团奇奇怪怪的字母,那就说明字母往后移了一位。于是,收到消息的好哥们将字母往前一位以得到小明发来的消息。在这里,加密算法就是所有字母全都向后移一位;解密算法就是所有字母全向前移一位。在这个层面看,其实密码学也就是为了保证信息的安全性,所以运用数学知识进行一些变换,以达到数据安全的目的。

密码学基本术语

发送者:对明文进行加密操作的人员。

接收者:传送消息的预定对象。

敌手:在信息传输和处理系统中,通过搭线窃听、电磁窃听、声音窃听等方式来窃取机密信息。

加密密钥和解密密钥:加密算法和解密算法的操作通常都是在一组密钥控制下进行。

单钥密码体制(对称密码体制,分组密码体制):传统密码体制所用的加密密钥和解密密钥相同,或实质上等同,即从一个易于得出另一个。

双钥密码体制(非对称密码体制,公钥密码体制):若是加密密钥和解密密钥不相同,即从一个难于推出另一个。

发送方顾名思义就是发送消息的一方,而消息如果以明文的形式发送很容易被窃取,于是自然发送方需要对信息进行加密,接收方收到消息后需要进行解密以获取消息,毕竟一串奇奇怪怪的东西谁看得懂呢?

加密密钥可以理解为一把钥匙,发送方用加密密钥对信息进行上锁,防止别的人看见或窃取;解密密钥也类似,接收方用解密密钥对信息开锁,获得锁里面的东西。我们的日常生活中,同一把钥匙既能上锁也能开锁,如果上锁时向左边转三圈,那开锁自然是向右边转三圈。密码学中与之对应的是对称密码,对称密码加密解密使用同一把密钥或易于从加密密钥得出解密密钥。

然而,密码学中还有一种密码:公钥密码,也被称为非对称密码。与对称密码不同,公钥密码使用一对密钥来进行加密和解密操作:公钥和私钥。在公钥密码中,发送方会生成一对密钥,其中一个是公钥,用于加密要发送的信息。公钥可以被任何人获取,并用于对信息进行加密。而私钥则由接收方保密,并用于解密被加密的信息。公钥密码的工作原理是基于数学上的难题,例如大素数分解或椭圆曲线离散对数等。通过这些数学问题的特性,公钥和私钥之间存在一种数学上的关联,使得使用公钥加密的信息只能通过私钥解密,而无法通过公钥本身推导出私钥。

密码分析的攻击类型

破译是试图恢复明文或找出密钥的尝试

• 唯密文攻击

– 只有一些密文

• 已知明文攻击

– 知道一些过去的(明文及其密文)作参考和启发

• 选择明文攻击

– 相当于有一台加密机(能使用加密密钥)

• 选择密文攻击

– 相当于有一台解密机(能使用解密密钥)

这篇文章暂时就先讲到这里,凡时不可求之过急,咱们先休息一会,把这篇理解一下,下篇文章接着学习。

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

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

相关文章

二叉树遍历及应用

文章目录 前言构建二叉树前序遍历中序遍历后序遍历二叉树的结点个数二叉树的叶节点个数二叉树的高度二叉树第K层结点个数 前言 二叉树的遍历及应用主要是运用了递归、分治的思想。在这一篇文章,小编将介绍二叉树的前序遍历、中序遍历、后序遍历,求二叉树…

服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例

服务器数据恢复环境: 某品牌linux操作系统服务器,服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。 服务器故障&检测: 服务器在运行过程中突然瘫痪,管理员对服务器进行了重装…

全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码

源码简介: 全新仿某度文库网站源码/在线文库源码,是以phpMySQL开发的,它是仿某度文库PHP源码。有功能免费文库网站 文档分享平台 实现文档上传下载及在线预览。 仿百度文库是一个以phpMySQL进行开发的免费文库网站源码。仿某度文库实现文档…

24双非硕的秋招总结

24 双非硕的秋招总结 结果: 运气捡漏去了腾讯 想想自己整个研究生学习过程,还是挺坎坷的,记录一下,也给未来的同学提供一些参考。 研一 我是研一上开始学前端的,应该是21年10月份左右,我们实验室是专门…

【算法】Rabin-Karp 算法

目录 1.概述2.代码实现3.应用 更多数据结构与算法的相关知识可以查看数据结构与算法这一专栏。 有关字符串模式匹配的其它算法: 【算法】Brute-Force 算法 【算法】KMP 算法 1.概述 (1)Rabin-Karp 算法是由 Richard M. Karp 和 Michael O. R…

微服务实战系列之MemCache

前言 书接前文,马不停蹄,博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存,通过设置缓存集群,实现数据的快速响应,同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存,因无法保…

字符集与编码规则

字符集 强调:UTF-8是编码规则,不是字符集 过程: 字符 --查表获得对应数字,--编码 解码---查表----获取字符 ASCII码 :一个字节 8bit GBK字符集(windows系统默认使用的GBK,系统显示ANSI) 存…

JavaScript WebAPI(三)(详解)

这次介绍一下webAPI中的一些知识: 回调函数 回调函数是指 如果将函数A做为参数传递给函数B时,我们称函数A为回调函数 例如: // 立即执行函数中传递的函数是一个回调函数 (function(){ console.log("我是回调函数") })(); // …

人工智能时代:AIGC的横空出世

🌈个人主页:聆风吟 🔥系列专栏:数据结构、网络奇遇记 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 什么是AIGC?二. AIGC的主要特征2.1 文本生成2.2 图像生成2.3 语音生成2.4 视…

基于若依的ruoyi-nbcio流程管理系统增加流程节点配置(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 这一节主要是对每个流程节点的字段规则设置与操作规则设置,目前也是只针对自定义业务表单。 1、…

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin

Android获取原始图片Bitmap的宽高大小尺寸,Kotlin val options BitmapFactory.Options()options.inJustDecodeBounds trueval decodeBmp BitmapFactory.decodeResource(resources, R.mipmap.p1, options)//此时,decode出来的decodeBmp宽高并不是原始图…

C语言-预处理与库

预处理、动态库、静态库 1. 声明与定义分离 一个源文件对应一个头文件 注意&#xff1a; 头文件名以 .h 作为后缀头文件名要与对应的原文件名 一致 例&#xff1a; 源文件&#xff1a;01_code.c #include <stdio.h> int num01 10; int num02 20; void add(int a, in…

OpenSSL 使用AES对文件加解密

AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院&#xff08;NIST&#xff09;于2001年发布的&#xff0c;它取代了原先的DES&#xff08;Data Encryption Stand…

JVM GC算法

一, 垃圾回收分类: 按线程数分&#xff0c;可以分为串行垃圾回收器和并行垃圾回收器。 按工作模式分&#xff0c;可以分为并发垃圾回收器和独占式垃圾回收器 按碎片处理方式分&#xff0c;可以分为压缩式垃圾回收器和非压缩式垃圾回收器按工作的内存区间分&#xff0c;又可分为…

2000-2021年上市公司过度负债数据

2000-2021年上市公司过度负债数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a; 证券代码、证券简称、会计期间、上市日期、行业代码、行业名称、是否剔除ST或*ST股、是否剔除当年新上市、已经退市或被暂停退市的公司、产权性质、盈利能力、杠杆率行业中位数、成长性…

数据结构与算法-静态查找表

&#x1f31e; “清醒 自律 知进退&#xff01;” 查找 &#x1f388;1.查找的相关概念&#x1f388;2.静态查找表&#x1f52d;2.1静态查找表的类定义&#x1f52d;2.2顺序查找&#x1f52d;2.3二分查找&#x1f50e;二分查找例题 &#x1f52d;2.4分块查找&#x1f52d;2.5三…

oracle sql相关语法

SQL*PLUS 在SQL*PLUS执行&#xff0c;会在执行后显示查询的执行计划和统计信息 SET AUTOTRACE ON;SELECT * FROM your_table WHERE column_name value;SET AUTOTRACE OFF;PLSQL PLSQL查询sql界面&#xff0c;鼠标右键&#xff0c;点击执行计划&#xff0c;会出现sql的执行计…

鸿蒙原生应用/元服务开发-AGC分发如何生成密钥和和证书请求文件

HarmonyOS通过数字证书&#xff08;.cer文件&#xff09;和Profile文件&#xff08;.p7b文件&#xff09;等签名信息来保证应用的完整性&#xff0c;应用如需上架到华为应用市场必须通过签名校验。因此&#xff0c;开发者需要使用发布证书和Profile文件对应用进行签名后才能发布…

04_Flutter自定义Slider滑块

04_Flutter自定义Slider滑块 一.Slider控件基本用法 Column(mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[Text("sliderValue: ${_sliderValue.toInt()}"),Slider(value: _sliderValue,min: 0,max: 100,divisions: 10,thumbColor: Colors.…

Java研学-配置文件

一 配置文件 1 作用–解决硬编码的问题 在实际开发中,有时将变量的值直接定义在.java源文件中;如果维护人员想要修改数据,无法完成(因为没有修改权限),这种操作称之为硬编码 2 执行原理: 将经常需要改变的数据定义在指定类型的文件中,通过java代码对指定的类型的文件进行操作…