人人都应该懂点密码学

Posted zhonglongbo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了人人都应该懂点密码学相关的知识,希望对你有一定的参考价值。

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

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

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

点关注,不迷路!!!

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

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

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

技术图片
密码学基础框架
数学基础:

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

?举个简单例子,我简单解释一下什么是,群就是在一个非空集合上定义一个新的运算,使这个运算存在交换律、结合律、单位元(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

  • 发送到邮箱: 2507367760@qq.com 或者 longyueshier@163.com 或者 longyueshier@gmail.com

  • 微信发送: 扫描下面二维码,公众号里面有作者微信号。

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

技术图片

以上是关于人人都应该懂点密码学的主要内容,如果未能解决你的问题,请参考以下文章

每个人都应该懂点攻防

每个人都应该懂点函数式编程

每个人都应该懂点函数式编程

为什么每个程序员都应该懂点前端知识?

TCP那些事儿

人人都能读懂的非对称加密