人人都应该懂点密码学

你可以从别人那里汲取某些思想,但必须用你自己的方式加以思考,在你的模子里铸成你思想的砂型。——兰姆

本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。

https://github.com/midou-tech/articles

点关注,不迷路!!!

?上次say&see了密码学的DES算法,接下来就有人私信说是一开始就直接讲算法有点难理解,想让我给打打底,这么说当然没问题,那以后我们就每周一篇,从最基础的东西讲起,下面我还会附上一张基础的知识框架图,感兴趣的盆友来看一看,跟着我带你学习密码学。

?刚开始接触密码学的时候,我也是一头雾水??,每次看到加密和解密,各种相似又不同的算法在我的大脑里转圈,我真的是太南了,但是随着学习的深入,好像慢慢了解了其中奥秘,这件事情就不再那么难了,于是我把自己的学习方法总结出来,和大家共同分享。

?我的所有写作内容会更多的照顾到初学者和进阶的大佬,每一个大纲中的知识点都会从简单到复杂,不会一上来就讲些太难的,也不会只分享一些简单易学的、没有营养的内容。大家在看博文的过程中遇到任何问题或者生活工作上遇到问题私聊我,点击联系作者加我微信,or发e-mail至:[email protected] 或者 [email protected] 或者 [email protected] 。

密码学基础框架
数学基础:

?关于在密码学中的数学基础(数学+密码学=……虽然有点难,我还是得说给你听,困难的事情简单的道理),主要讲到群、环、域这三个基础的数学模型,听起来觉着复杂,但其实用起来简单,这个时候我们已经不仅仅满足于对单纯的数字进行普通的运算了,它们所描述的就是将数与运算结合起来的一种运算集合。

?举个简单例子,我简单解释一下什么是,群就是在一个非空集合上定义一个新的运算,使这个运算存在交换律、结合律、单位元(e·a=a)、逆元(a·a的逆元=e)就可称之为一个群。环和域和群类似,相比会增多其中的元数个数,以及自定义运算个数。关于代数的内容,推荐大家可以参考杨子胥的《近世代数》,里边关于密码学中所要用到的数学知识都有详细的介绍,看完书可谓是受益匪浅。

基本概念 :

?讲完数学基础,接下来,我对后边要讲的知识的大概框架描述一下下,首先给大家讲讲在密码学中的一些基本概念,明文(可不是wang zhe rong yao铭文嗷~ ~)、密文、密钥等等这些词汇都是可以通过字面意思理解的,后边再遇到难以理解的词汇我在给大家解释,首先我们要接触的第一个知识就是通信保密系统,当我们理解了这个系统的整体流程,我们就可以知道,当消息泄露时候,我们从哪里入手排查。

保密通信系统框图

?在框图中我们可以看出,加解密的过程中都需要使用到密钥,而密钥的不同使用方法就将密码体制分为单钥体制(加密解密使用同一密钥)和双钥体制(使用不同密钥进行加密和解密),而对于不同的加密结果,都存在多种密码攻击方式,至于这里的具体内容,下次我们来详细解释。

流密码:

?了解完这些基础,我们就算是正式进军密码学了,开门见山的说,一来你遇到的第一个问题就是流密码,这算是密码学里第一个难懂的专业词汇,流密码主要就是指利用一个密钥流生成器产生一个密钥流,然后用这个密钥流来对明文消息进行加密和解密,所谓同步流密码和自同步流密码就是取决于其输入的明文是否会影响加密器中的记忆元件的存储状态。密钥流的产生依赖于密钥流生成器,这个东西主要由一个驱动系统和一个非线性系统,两者相互配合完成任务,目前所用最多的就是利用一个或者多个LFSR构成其驱动部分,这样看来线性反馈移位寄存器可谓是功不可没。流密码的安全性取决于密钥流的安全性,要求密钥流序列有好的随机性,,以使窃听者对它无法预测。也就是说,即使截获其中一段,也无法推测后面是什么。如果密钥流是周期的,要完全做到随机性是困难的。严格地说,这样的序列不可能做到随机,只能要求截获比周期短的一段密钥流时不会泄露更多信息,这样的序伪随机序列。

分组密码:

?分组密码与流密码最大的不同在于,流密码的加密器中有一个记忆元件,而分组密码不存在,在许多密码系统中,分组密码也是系统安全的一个重要组成部分,用分组密码易于构造伪随机数生成器、流密码、消息认证码(MAC)和杂凑函数等,还可进而成为消息认证技术、数据完整性机制、实体认证协议以及单钥数字签字体制的核心组成部分。本部分主要介绍一下feistel结构,以及利用feistel结构构成的DES算法和AES算法,并且从一名学习者的角度介绍一下其安全性。

公钥密码:

?在公钥密码体制中,我们首先需要掌握一些简单的数论知识,例如,模运算,费尔玛定理,欧拉定理,欧几里得定理,中国剩余定理等等,这些基础数论知识在之后的学习中再和大家一一道来,掌握了数论知识以后,我们主要学习公钥加密体制以及RSA算法,以及基于椭圆曲线的密码体制,这一部分就稍稍有些难以理解,公钥密码体制的概念是在解决单钥密码体制中最难解决的两个问题时提出的,这两个问题分别是密钥分配和数字签字。公钥密码算法的最大特点是采用两个相关密钥将加密和解密能力分开,一个密钥是公开密钥,用于加密;另一个密钥是秘密密钥,用于解密。RSA算法是1978年由R.Rivest,A.Shamir和L.Adleman提出的一种用数论构造的、也是迄今为止理论上最为成熟完善的公钥密码体制,该体制已得到广泛的应用。为保证RSA算法的安全性,它的密钥长度需一再增大,使得它的运算负担越来越大。相比之下,椭圆曲线密码体制ECC可用短得多的密钥获得同样的安全性,因此具有广泛的应用前景。ECC已被IEEE公钥密码标准P1363采用。

消息认证与杂凑算法:

?关于消息认证机制呢,简单来说就是对所接受到的消息进行确认,保证其一定来自于发送方,且消息内容并未被篡改,在认证过程中,需有产生认证符,这一基本功能又作为认证协议的一个组成部分。认证符也就是用于认证消息的数值,主要由消息认证码MAC(messageauthenticationcode)和杂凑函数(hashfunction)两个途径来产生认证符,所以在这个部分我们就要主要讲两者的区别和联系。在杂凑函数中主要涉及两种算法,分别是MD系列以及SHA系列,两者相似又不同,具体详情我们以后慢慢说。

数字签名:

?数字签名的主要目的就是对消息进行签字,确保其本身的身份,数字签字由公钥密码发展而来,它在网络安全,包括身份认证、数据完整性、不可否认性以及匿名性等方面有着重要应用。

?以上就是密码学的基础框架图,想必看到这里你也理解了不少东西吧,当然这些都还只是基础部分,想要学好还需要多下功夫多了解,关于后边的具体内容呢,我们下回详解??

历史文章:

学习linux命令,看这篇2w多字的命令详解就够了

HTTP就是这么简单

Redis基础

顶级程序员工具集

二十多个免费高清图片素材网站送给你

求点赞?? 求关注??

「转发」是明目张胆的喜欢,「在看」是偷偷摸摸的爱。

如果有人想发文章,我这里提供有偿征文(具体细则微信联系),欢迎投稿或推荐你的项目。提供以下几种投稿方式:

  • 去我的github提交 issue: https://github.com/midou-tech/articles
  • 发送到邮箱: [email protected] 或者 [email protected] 或者 [email protected]
  • 微信发送: 扫描下面二维码,公众号里面有作者微信号。

精选文章都同步在公众号里面,公众号看起会更方便,随时随地想看就看。微信搜索龙跃十二或者扫码即可订阅。

原文地址:https://www.cnblogs.com/zhonglongbo/p/12194752.html

时间: 2024-07-28 13:28:44

人人都应该懂点密码学的相关文章

人人都该懂点儿TCP(转)

作者:Julia Evans 译者:赖信涛原文链接:Why you should understand (a little) about TCP 译文链接:http://geek.csdn.net/news/detail/44474 即使你的工作也许不需要对TCP了如指掌,也不需要去了解具体的TCP/IP实例.你也应该懂一些基本的TCP知识,本文会告诉你为什么. 我以前在Recurse Center工作的时候,曾经用Python写过一个TCP栈(还写了一篇博文用Python实现TCP栈可以学到什

人人都该懂点儿TCP---ACK延缓(转)

作者:Julia Evans 译者:赖信涛原文链接:Why you should understand (a little) about TCP 译文链接:http://geek.csdn.net/news/detail/44474 即使你的工作也许不需要对TCP了如指掌,也不需要去了解具体的TCP/IP实例.你也应该懂一些基本的TCP知识,本文会告诉你为什么. 我以前在Recurse Center工作的时候,曾经用Python写过一个TCP栈(还写了一篇博文用Python实现TCP栈可以学到什

人人都必需懂的OSI参考模型,到底是什么玩意儿

在很久很久以前,企业级通讯设备的协议是不互通的.HP,IBM等厂商都根据自己的协议生产了不同的软硬件.这样做也是因为数据通讯的保密性,但是这样做有一个弊端,就是不同品牌的设备之间相互通讯非常困难. 举个例子,以前的中国,阎锡山为了做山西土皇帝,山高皇帝远,在自己势力范围内建造窄轨铁路,蒋介石国军的火车无法进入山西境内,无法便利调动军队.物资,实现一人独大的军阀割据格局.以互联网的眼光看,如果标准轨道铁路网是一个互联网,那阎锡山的窄轨铁路就是一个自我封闭的局域网,为了打破这种非标准化的私有标准,需

人人都能懂的原型对象

提到JS中的对象,我们就不得不提JS对象中的原型.我们知道,JS是可以面向对象编程的语言,通常在面向对象中,继承关系都是通过类来实现的.但是,请记住,在JS中,并没有类的概念.在JS的设计之初就没有类,那么在JS中,继承是通过什么来实现的呢?答案就是原型. 每一个构造函数都有一个与之相关联的对象,该对象称之为原型对象.每个实例对象都能共享其原型对象上的属性和方法.原型对象的作用主要用来实现属性的继承,让实例对象能共享原型对象的属性,减少内存分配.所以,在上一节中,我们想在每个Person对象中共

密歇根大学 - 人人都懂的编程课(Python)

人人都懂的编程课(Python) Week03 Exercise Rewrite your pay program using try and except so that your program handles non-numeric input gracefully. Enter Hours: 20 Enter Rate: nine Error, please enter numeric input

从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

从程序员到项目经理之程序员加油站 -- 不是人人都懂的学习要点(转发)

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

人人都看得懂的正则表达式

正则表达式可以帮助我们更好的描述复杂的文本格式.一旦你描述清楚了这些格式,那你就可以利用它们对文本数据进行检索.替换.提取和修改操作. 下面有一个正则表达式的简单例子.第一步先要引入有关正则式的命名空间: using System.Text.RegularExpressions; 第二步就是用指定的正则式构建一个正则表达式对象,下面的正则式是用来搜索长度为10的a-z的英文字母: Regex obj = new Regex("[a-z]{10}"); 最后,根据正则式在指定数据中检索匹

【转】测试,人人都是产品经理之测试产品的选择和创造

  序言:明天新的一年的的工作开始了,在晚上写这篇文章,也算是对自己一年工作的一个简单的总结以及对今年所想做的事情作为一个开端吧.这次回家,疯狂了一把,不管测试.不管自动化.也不管技术,只知道与朋友们欢畅,踏上回来的途中,却反射性的重新拿起了书.每个人也许想知道自己的价值在哪,无论在哪,我觉得每个人都是自己的产品经理,而定位自己的需求,寻找产品的价值都是一件很难的事情,首先知道自己要什么,再知道自己可以设计出来?最后还要经过反复的实践和测试,才能诞生出一个让自己感到稍微满意的产品,因为这些文章,