本人信息安全专业,大三,为着将来考研做准备,打算按照自己目前的理解给大家唠唠密码学。
这个专栏我将从以下七个章节来聊聊密码学,若有不当之处,敬请指出。
• 密码学概论
• 流密码
• 分组密码
• 公钥密码
• 消息认证和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前缀表示“否定”,对密文进行反加密,即解密。这样是不是就清楚多了呢?
加密算法是对明文进行加密时采用的算法;解密算法则是对密文进行解密是采用的算法,举个栗子,小明给好哥们用英文发微信约他出去玩耍,又怕被女朋友发现,于是将每个英文单词向后移一位,得到的结果发给好哥们。小明和好哥们事先就约定好了,如果发的是一团奇奇怪怪的字母,那就说明字母往后移了一位。于是,收到消息的好哥们将字母往前一位以得到小明发来的消息。在这里,加密算法就是所有字母全都向后移一位;解密算法就是所有字母全向前移一位。在这个层面看,其实密码学也就是为了保证信息的安全性,所以运用数学知识进行一些变换,以达到数据安全的目的。
密码学基本术语
发送者:对明文进行加密操作的人员。
接收者:传送消息的预定对象。
敌手:在信息传输和处理系统中,通过搭线窃听、电磁窃听、声音窃听等方式来窃取机密信息。
加密密钥和解密密钥:加密算法和解密算法的操作通常都是在一组密钥控制下进行。
单钥密码体制(对称密码体制,分组密码体制):传统密码体制所用的加密密钥和解密密钥相同,或实质上等同,即从一个易于得出另一个。
双钥密码体制(非对称密码体制,公钥密码体制):若是加密密钥和解密密钥不相同,即从一个难于推出另一个。
发送方顾名思义就是发送消息的一方,而消息如果以明文的形式发送很容易被窃取,于是自然发送方需要对信息进行加密,接收方收到消息后需要进行解密以获取消息,毕竟一串奇奇怪怪的东西谁看得懂呢?
加密密钥可以理解为一把钥匙,发送方用加密密钥对信息进行上锁,防止别的人看见或窃取;解密密钥也类似,接收方用解密密钥对信息开锁,获得锁里面的东西。我们的日常生活中,同一把钥匙既能上锁也能开锁,如果上锁时向左边转三圈,那开锁自然是向右边转三圈。密码学中与之对应的是对称密码,对称密码加密解密使用同一把密钥或易于从加密密钥得出解密密钥。
然而,密码学中还有一种密码:公钥密码,也被称为非对称密码。与对称密码不同,公钥密码使用一对密钥来进行加密和解密操作:公钥和私钥。在公钥密码中,发送方会生成一对密钥,其中一个是公钥,用于加密要发送的信息。公钥可以被任何人获取,并用于对信息进行加密。而私钥则由接收方保密,并用于解密被加密的信息。公钥密码的工作原理是基于数学上的难题,例如大素数分解或椭圆曲线离散对数等。通过这些数学问题的特性,公钥和私钥之间存在一种数学上的关联,使得使用公钥加密的信息只能通过私钥解密,而无法通过公钥本身推导出私钥。
密码分析的攻击类型
破译是试图恢复明文或找出密钥的尝试
• 唯密文攻击
– 只有一些密文
• 已知明文攻击
– 知道一些过去的(明文及其密文)作参考和启发
• 选择明文攻击
– 相当于有一台加密机(能使用加密密钥)
• 选择密文攻击
– 相当于有一台解密机(能使用解密密钥)
这篇文章暂时就先讲到这里,凡时不可求之过急,咱们先休息一会,把这篇理解一下,下篇文章接着学习。