【信息保护论】信息保护与密码学


前言:因为手边有一本很不错的书,是韩文版的,所以本博文中很多图片可能是韩文版,我都会标注上中文,多有不便请各位海涵。

信息保护概念

什么是信息保护?

信息采集、加工、储存、检索、发送、接收中防止信息的损坏、伪造、泄露等的管理性、技术性手段所构成的行为。
在这里插入图片描述
在各种行业中,经常会面临的一个问题就是开销与性能的权衡,一分钱一分货,消费高的产品往往质量上佳。作为一个个体,选择产品时,不能只考虑一部分,只考虑性能的极限则带来的就是极高的购入与维护费用,并非每一个个体可以负担;而最低的消费往往又会带来产品的瑕疵。情报保护也同理。情报保护的可用性与安全性就是天平上的两端,高可用性意外着操作方便,做工效率高;高安全性不需解释。

举一个简单的例子。我们登录时,使用ID与密码登录,但是每一次的登录会觉得很麻烦,因此现在很多cookie技术能允许各种客户端记住密码,这样我们以后的登录就会省略掉,更加方便——带来的问题也很明显,任何使用这台计算机的人都可以以你的身份进行服务操作。那么如何加强安全性呢?那就是我们下机的时候删掉cookie等记录,但是这个删除操作以及你的下次登录操作都会增加一些格外的动作,比起直接下机就显得麻烦了。因此可用性与安全性是天平上的两端,两者的平衡权衡的越好,作为一个产品或技术就更加成熟。

安全的分类

在这里插入图片描述
数据安全:对数据操作权限的控制与限定。维护数据库,保护用户资料不会被非管理员进行数据操作。
应用安全:开发的应用程序或者web网站等程序本身有bug,攻击者就可以利用漏洞获得管理者权限,从而进行数据操作。因此,对于应用程序/服务器站点的程序设计本身也是安全的一环。
操作系统安全:操作系统本身有漏洞,攻击者利用漏洞攻击后,则数据与应用都不再安全,因为攻击者本身将等同于合法管理员。对操作系统的加固也就是对数据与应用的保护,例如只允许管理员登录的方式等。
物理安全:无论系统设计的多么完美无缺,把系统硬盘拆下来,所有的安全就都没意义了。物理安全是其他高位安全的基础,最基本的,安全级高的设备不应该放在谁都可以碰触到的地方。
用户安全:培养用户安全意识,进行用户安全教育。
网络安全:数据传输过程中,可能出现被窃听、截取、置换等风险,而预防风险就是网络安全需要准备的。

上述安全的保障离不开政策的有效调控,企业的运维思路是所有安全的统合。信息保护的对象就是数据、应用、OS、物理设备(硬盘)、网络、用户意识等。

CIA系统

在这里插入图片描述
CIA:信息系统的安全等级三个性质。CIA是信息保护的核心,CIA的前提条件基于正当的使用者,即合法用户。

简称全称说明
C机密性信息的传递遵循某种协议进行加密,只有授权的用户可以获得正确的信息。
I完整性信息在输入和传输/加密和解密的过程中,不被非法授权修改和破坏,保证数据的一致性
A可用性保证合法用户对信息和资源的使用不会被不正当地拒绝,合法用户可以对数据进行变更和删除等一系列操作

网络安全的威胁

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
CAIN:一种局域网黑客工具。可以对局域网进行arp欺骗。
攻击的实现:当PC想要访问其他网段地址时,需要将数据包发给路由器,而装有cain的设备进行arp欺骗,告知PC路由器的MAC地址是自己的M2而不是MR。从而,PC将会把所有流量交给CAIN,自然CAIN就能捕获到所有来自PC的流量,也就可以实现窃听、篡改、中断这三个安全攻击。

篡改:DNS劫持:当域名解析结果返回后,CAIN可以将错误的域名解析结果发送给PC。PC将访问一个假的网站且不自知。

在这里插入图片描述
截获/窃听监视端口:如果网络管理员或者攻击者能够接触交换机,并对交换机进行监视端口的配置,则不需要使用arp欺骗也能获取网络中的所有流量,当流量经过交换机,交换机会把数据分成两份,一份交给路由器,一份交给监视端口。 (有些交换机不支持配置监视端口的功能)

伪造:假如一个服务器站点只允许192.168.80.120这一个地址访问,则120的计算机关机后,其他计算机只要更改IP地址就能访问服务器站点。这就是一种最简单最直接的伪造,虽然IP地址是120却不是真正的120主机。
在这里插入图片描述

中断:拒绝服务攻击(DOS)和分布式拒绝服务攻击(DDOS)。核心就是占据带宽流量,导致正常访问的计算机因为带宽已满而无法与服务器通信,或者极少数设备能够通信,整体影响了该服务器的服务效率。
目前DDOS攻击没有很好的防范手段,因为这种攻击方式是用于攻击带宽而非服务器,服务器不论是防火墙还是系统本身都武力干预。目前的对策只有使用超高带宽的网络,令规模不大的DDOS攻击无效的预防手段,如果攻击规模足够大,则需要将服务器迁移至其他位置。

计算机面临的威胁——恶意程序

在这里插入图片描述

病毒:会隐藏地感染计算机,一般对系统的破坏都是隐秘且不容易发觉的。可以改写本身系统的程序或者应用程序,删除关键文件等。是以破坏系统为主要用途的安全威胁。
蠕虫:与病毒不同的是,目的在于消耗系统资源。蠕虫病毒会慢慢蚕食内存和CPU,随机计算机工作时间增长,占用的资源越来越多,导致计算机速度变慢,慢到一定程度重启计算机,然后反复这个过程。
木马:功能性威胁。功能指向性强,比如盗号木马。木马与蠕虫的区别是需要与外界通信,盗号或者系统控制,需要将信息发给攻击者。所以木马必须与外界联系,不与外界联系的木马就是纸老虎,没有存在意义。木马程序的查找:启动计算机后,立刻使用msconfig查询是否有可疑的服务,以及使用cmd命令的netstat -n来检查可疑对话。
逻辑炸弹:有触发条件的病毒,潜伏性更好,症状表现少。发作有规律,一般发觉时已经对系统造成很大程度的损坏。

加密与解密技术

在这里插入图片描述

加密与解密这一过程,我简单总结为5个英文字母。加密和解密过程中,秘钥最为重要,秘钥的生成依赖于加密和解密算法,如果算法被破解,则秘钥本身也变得没有意义。

PECDK
plaintextencipherciphertextdecryptkey
明文加密密文解密秘钥

加密&解密的对应公式: C = E k ( P ) , P = D k ( C ) C=E_k(P),P=D_k(C) C=Ek(P),P=Dk(C)

加密与解密两者结合统称为密码。
在这里插入图片描述
上图涵盖了本文的核心对应关系。左边第一栏代表遇到的问题,第二栏代表解决该问题的理论,第三栏为代表举措。

密码学历史中出现过的密码技术

Caesar cipher

在这里插入图片描述
凯撒码将对应字符表后移x位,x为加密者任取值。图中是3,当计算机编码时,会映射到ASCII表,原本65对应A,现在68才是对应A。
下接一例:
在这里插入图片描述
用对应的映射关系,将明文变更到密文。解密时只需要通过映射表反向映射即可。
在这里插入图片描述
问题点:由于秘钥空间有限,且对应关系字符串有限,时间允许的情况下即便是人类也能够一对一不断去尝试,直到试出对应秘钥。

暴力破解(brute-force attack)

尝试所有密码空间内可行的秘钥,使用计算机的超过运算速度进行尝试,直到试出真正的秘钥。再复杂的加密法,都会有被破解的一天,因为只要电脑运算的时间够快,透过反复的try-error,总是有机会try出正确的解密秘钥,而密码也是一样,只要有足够多的尝试机会,再复杂的密码都有可能被破解。
暴力解码如果能给予无限的时间和无限的开支报销(无限计算机power的计算机得多贵啊),则理论上可以破解所有密码。只不过现实角度而言,我们要破解一个密码,破解一个密码用几百年是不现实的事情,有这个想法不如精心策划一场武装袭击来的现实。

Simple Substitution Cipher

在这里插入图片描述

单一置换加密,对Caesar cipher进行了改进,不再将全字符包按照固定规律偏移映射,而是将全字符按照乱序全映射。比起Caesar cipher复杂度显著提高。

加密与解密过程同Caesar cipher,掌握对应映射关系即可,不再演示。

问题点:明文中高频单词对应的也会出现在密文中,对攻击者而言,更容易从人的立场上思考和破解。如对于英文中,高频单词the,使用该加密法,不论如何the这个连续的三个字符都会对应到高频词表上,只要做一下统计就能找出t/h/e的映射表,然后再找单词中内含有the的单词,进行逐步推理,即可破解。
在这里插入图片描述
大家可以尝试一下这个有趣的思考题,每个小人的动作对应一个字母,根据已有的提示写出空缺部分。说到底这种破解方法很类似解数独。

密钥空间(key space)

对应加密算法可以使用的所有秘钥的集合,密钥空间的大小就是这个集合所有的元素总数,密钥空间越大,则暴力解码越困难。

对于单一置换加密算法,密钥空间是26!= 403291461126605635584000000

暴力解码攻击需要的时间:如果一秒解码10亿个,解码上述空间的秘钥也需要120亿年。

但是配合上频率分析,则简单的多了。我们已经分析过了,下面上一个例子。
在这里插入图片描述
上述密文,我们使用频度分析法来尝试破解。
在这里插入图片描述
上图为密文中字母出现的频率。
在这里插入图片描述
上图为所有英文词库中,所有字母的占比率。
在这里插入图片描述
把整体出现频率最高的用e来代替,由于Y和I都是最高频率,这里随机选一个Y。则密文变成上图所示。
在这里插入图片描述
然后考虑到英语中高频单词the。进行字母映射。
在这里插入图片描述
然后在考虑一些经常出现的单词。
半破解的密文,再来猜想和尝试:
t h e t h D W g − − > t h e t h i n g thethDWg-->the thing thethDWg>thething
g r I N e − − > g r a c e , g r a d e , g r a p e , g r a t e , g r a v e , g r i p e , g r o f e . . grINe-->grace, grade, grape, grate, grave, gripe, grofe.. grINe>grace,grade,grape,grate,grave,gripe,grofe..
在这里插入图片描述
解密这一个过程本身就是不断的try-error中得到正解。
在这里插入图片描述
Shich看到后我们可以联想到which,则S对应w。
thethingtoQRench,可以明确划分出the thing to QEench。QE可以猜测对应的单词quench,而hot ZuUUer也可以猜hot summer等……然后在联系上文是否有猜错的地方
在这里插入图片描述
可以得到一个半加密的密文,在这种情况下继续推测或者暴力解法都是可行的。
在这里插入图片描述
不断整理
猜猜猜在这里插入图片描述
在这里插入图片描述
最终能得到置换表,也就是秘钥。
在这里插入图片描述
将对应的秘钥应用的密文中解码,即可得到明文。
在这里插入图片描述
在这里插入图片描述
总结:单一置换算法中,不仅高频字符是弱点,低频字符也是弱点。解码速度会随着只言片语的破解而越来越快。

多重置换密码

克服单一置换算法的弊端,让字符对应表尽可能均匀分布。

Hill Cipher

在这里插入图片描述
则有密文对应字母满足下矩阵表达式。C代表密文,P代表明文,K代表秘钥。
下图中明文是PAYMOREMONEY(Pay more money)
在这里插入图片描述
加密过程:
字母表共26字母,A是第一个,计算机中用0表示序号1。则对应的PAY分别是15.0.24。用该数值进行与key的行列运算。可以得到11 13 18,他们对应到字母表的顺序就是L N S。通过这种方法,不同字母可能运算出同一字母的密文,同一字母的密文也可能运算出不同字母的密文。也就说,置换的频率分布不再直接反映到明文中。
在这里插入图片描述
解密过程:
求秘钥K的逆矩阵,然后用该逆矩阵矩阵乘密文,就可以获得明文。
在这里插入图片描述

Vigenere Cipher

该密码技术有多个映射表,根据不同的情况选择不同的映射表,从而达到非单一映射的目的,也能解决单一置换密码的问题。
如,Key是 deceptive ,明文是 we are discovered save yourself
在这里插入图片描述
Key读取x坐标,明文读取y坐标。也就说key值为d时,映射表选取第四列,明文w对应的密文是Z。
在这里插入图片描述

对称加密技术

简单而言,加密与解密使用的密钥是相同的,就是对称加密。

Encoding:编码。将字符串变更为比特流,
在这里插入图片描述
XOR运算:(异或)
在这里插入图片描述
明文XOR秘钥=密文;密文XOR秘钥=明文。
首先,明确上述两个概念。

ONE-TIME PAD 绝对无法破解的密码

秘钥长度与信息本身一样长,保证密文中不出现任何固定模式,因而不可能对密文进行分析和推导从而破译。发送与接收方都持有一个相同的密码本,密码本每一页都有一个足够长的随机字符当做密钥。一旦密码本中的某一页用来加密或解密了,就毁掉这一页,加密下一条时,同理反复。只要保证密码本不泄露,则就拥有无法破解的加密。

现实性:这种密码技术虽然看似无敌,但是实际可操作性却很差。如何交换密码本?如果你们天各一方,通过邮件等方式本就不安全,而如果你们可以见面的话又没有加密通话的必要,因为你们可以直接交流。所以应用场景很少且实际操作性差是其显著特征。加密效率自然也低。

这次再次证明了安全性与可用性的天平特点,安全上无懈可击的ONE-TIME PAD密码技术,加密与解密都非常麻烦。

  • 例:
    在这里插入图片描述
    加密过程:
    在这里插入图片描述
    解密过程:
    在这里插入图片描述
    暴力解码的不可能性:
    1.不是暴力解码的范畴,ONE-TIME PAD并不是要在时间范围内破解密码,是因为根本无从得知秘钥空间。
    2.即便是无限计算机power的计算机也无法破解。
    3.即便得到了看似规整的明文,也不能确定是否是真正的明文。midnight, onenight, mistress 等有着相同的密文格式,那么你推理到的明文是真正的明文吗?无从判断。
    只有获得密码本才能解密。

DES(Data Encryption Standard)

最标准典型的对称加密标准,暴力解码可以破解。现在已经几乎被淘汰,曾经是世界上广泛应用于块加密的对称秘钥加密算法。采用56位秘钥加密64位明文。当n个64位数据块都经过DES加密处理后,所得得到的n个64位密文数据块的串联就是密文。
在这里插入图片描述
大体流程:对16个明文块进行加密,每次加密的子密钥也不同,加密后得到的16块密文串联即是完整密文。


对于密钥:64位,其中8位校验位进行保留,实际有效数据只有56位。
下面我们来看一下详细的子密钥生成过程:

  1. 子秘钥选择
    在这里插入图片描述
    假设初始秘钥是K,以空格为分组间隔,每一组的最后一位是校验位,无实际意义,计算有效数据时会剔除掉。但是本轮选择中仍然使用,根据置换表,选择新密钥的组合。表中第一项是57,意味着K的第五十七位是新密钥的第一位,以此类推。可以生成一个新的预·子秘钥。
  2. 左移与压缩置换
    在这里插入图片描述
    选择到的预·子秘钥分成左右两部分,记为Ci和Di,他们在进行左移操作后,会结合在一起并进行置换操作生成子秘钥Ki。同时他们也会预留一份到下一轮的操作中。
    左移操作:每次移动的位数是有标准规定的。每轮移动多少位,按照规定来。左移操作很简单,假如说左移1位,对于数据1010而言,即第一位放入队尾,其他数据均前移一位,得到的是0101。
    在这里插入图片描述
    压缩置换:压缩置换可以将得到最终要用于加密的子秘钥,将56位压缩成48位。
    在这里插入图片描述
    方法也是按照表,一一对应,按位将原组合对应到新的位置,然后就生成了新的子秘钥。

在这里插入图片描述

对于明文,操作如图。需要注意的是每一轮的右数据会直接当做下一轮的左数据,而左数据与迭代运算后的右数据进行一系列运算后充当下一轮的右数据。
在DES里,有三个难点。分别是初始置换和最终置换,轮迭代运算,S盒压缩处理。

  1. 初始置换和最终置换
    初始置换:按照初始置换表,将原数据的比特流完全打乱,以乱序形式进行过加密。只要算法没有问题,则按照规律打乱的乱序一定可以复原。
    在这里插入图片描述
    同理对所有数据进行操作。初始置换和终止置换的原理是一样的,他们的排列方式是互逆的,经过初始置换和终止置换,64位明文就被还原了。
    例题如下:
    在这里插入图片描述
    考虑的应该是原来1所在的位置现在在表格的哪里,而不是去表格中找对应位置是哪个数字。
  2. 扩展置换:经过初始置换的原64位数据被分为左右32位数据两部分,其中一部分进行扩展置换到48位。
    在这里插入图片描述
    扩展过程如下图所示。将32位数据分成八组,每组4位。在其首尾各添加一个空位,然后每一组的空首部继承上一组原尾部数据;每组的空尾部使用下一组的原首部数据。如果是第一组和最后一组,则视为他们二者相连,连接关系是8-1-2-3-4-5-6-7-8-1
    在这里插入图片描述
    下面看一个动态图。
    在这里插入图片描述
  3. S盒压缩处理:
    在这里插入图片描述
    在这里插入图片描述
  4. P置换,P置换过程非常简单,也是对应某一个表格进行对位换数,目的是增加密文的复杂程度、混乱度,尽可能避免解密。就不再过多赘述了。

块加密与流加密

块加密:将数据按照块为基本单位进行加密,典例就是DES加密。对大量数据加密效率高,条理。
流加密:将数据按位加密,典例是ONE-TIME PAD。

Feistel

在这里插入图片描述
与DES很相似的加密算法,同样是多轮迭代运算后计算出结果。过程稍微简单一些,第i轮迭代的输入Li-1和Ri-1来自于上轮迭代的输出,子秘钥由秘钥K推导而出。
Feistel建议使用乘积密码的概念来逼近理想分组密码。乘积密码是指依次使用两个或两个以上基本密码,所得结果的密码强度将强于所有单个密码的强度。Feistel密码交替使用代替和置换来进行加密解密。
代替:每个明文元素或元素组被唯一地替换为相应的密文元素或元素组。
置换:明文元素的序列被替换为该序列的一个置换。也就是说,序列中没有元素被添加、删除或替换,但序列中元素出现的顺序改变了。
在这里插入图片描述
在这里插入图片描述

3DES

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解密过程则是用相同的key将上图中的加密、解密反转后操作即可。

AES

又称Rijndael 加密算法。加密过程如下图所示,首先要通过原密钥通过轮密钥加法生成子秘钥。我们以128位数据为例,按要求进行10轮运算,注意最后一轮运算没有列混合这一项操作。
整体流程是明文与密钥进行一次异或运算,然后再进行10轮规定的迭代运算。其中第十轮略有不同。
在这里插入图片描述
1.字节代换SubByte
在这里插入图片描述
高位字节作为行数,低位字节作为列数,根据S盒对应的映射表找到对应数据进行替换。
2.行移位ShiftRows
每一行分别左移x-1位。
在这里插入图片描述
3.列混合:将每一列乘一个固定的矩阵,得到一个新的结果代替原矩阵。
在这里插入图片描述
4.轮密钥加:将轮密钥和上面获得的矩阵进行疑惑运算,得到的最终结果就是这一轮的最终值。这是一轮的流程。
在这里插入图片描述
我们需要总共进行10轮上述流程,注意的是第十轮没有列混合,且我们一共使用到了11个轮密钥。

块密码模式

块加密(Block Cipher)是将某些特定的数据流(按位计算的比特)分组,每次对一组进行加密的技术。快加密的典例有DES、AES,其中DES和3DES加密的块为64bit,而AES有三种标准,分别是128、192、256bit。有块加密,自然也有其对立面,我们称为流加密(Stream Cipher)。流加密是将比特流按位加密,虽说是按位加密,但是也可以1 、8、32位进行流加密。
块加密模式:将明文分成多段,以块加密的形式对其加密,各数据块循环执行加密算法,最终将密文块串联形成密文。
接下来将介绍5种块加密模式,由于某些英文翻译后有些奇怪,所以这里就对这几种模型不再中文翻译。

Electric CodeBook mode

简称ECB MOD。是最简单的加密模式。
在这里插入图片描述
在这里插入图片描述
{ P i = D k ( C i ) C i = E k ( P i ) \begin{cases} P_i=D_k(C_i) \\ C_i=E_k(P_i) \end{cases} {Pi=Dk(Ci)Ci=Ek(Pi)
如图所示,对不同的数据块分别使用加密算法,获得的密文块后重组。

Padding:当数据被分割后,某些数据不足以占据一个块的最小数据单元时,此时会添加无效数据填充该数据块到最小数据单元,填充的这部分无效数据被称为padding。

问题点:机密性最差,不安全。明文分组与密文分组是一一对应的关系,如果明文中存在多个相同的明文分组,这些明文分组最终都将被转换为相同的密文分组(加密算法是相同的)。此时观察密文,可以知道明文哪些部分出现频率高,并可以按照语言习惯为线索来破译密码。

风险攻击案例:我们假设一个情景,A要给B转账100万元。假设使用ECB mode,将其分为三块,第一块是资金出处A,第二块是资金目的地B,第三款是转账金额100万。此时攻击者虽然没有得知三个数据块分别代表什么意义,但是他置换其中几个数据块的位置,如果数据块1和2互换,则本应该转账的用户成为了收钱的用户,资金会从本应收钱的用户账户里划走,这就是非常大的安全隐患。而如果数据块2和3调换,则可能出现账户不存在或者给第三方转账了庞大数额的情况。而这些情况都可以被当事人进行否认,因为其进行了正常操作。(想要防止否认就需要用到另一种技术,后文会讲)因此,ECBmode存在即便攻击者不知道内容也能进行安全干预的问题。是非常不安全的密码技术。

Cipher Block Chaining mode

这个加密模式改善了ECB中的单一反应问题,参与加密算法加密的不仅是明文,还有一个干扰项,明文与前一个数据库加密后的密文块进行异或运算后,再使用加密算法加密。这个过程中,第一项明文块会跟初始化向量进行异或运算。
IV(initialization vector):初始化向量。为第一个明文块或密文块准备的异或运算干扰项。
加密过程:
在这里插入图片描述
加密方式:
{ C i = E k ( P i ⊕ C i − 1 ) , i ≠ 1 C 1 = E k ( P 1 ⊕ I V ) \begin{cases}C_i=E_k(P_i \oplus C_{i-1}),i≠1 \\ C_1=E_k(P_1 \oplus IV)\end{cases} {Ci=Ek(PiCi1),i=1C1=Ek(P1IV)

解密过程:
在这里插入图片描述
解密方式: { P i = D k ( C i ) ⊕ P i − 1 , i ≠ 1 P 1 = D k ( C 1 ) ⊕ I V ) \begin{cases} P_i=D_k(C_i) \oplus P_{i-1}, i≠1\\ P_1=D_k(C_1) \oplus IV) \end{cases} {Pi=Dk(Ci)Pi1,i=1P1=Dk(C1)IV)
CBC的特点:解决了ECB模式的缺点,即即便有相同的明文块,在与前面的密文块进行异或运算后也会得出截然不同的密文块。想要制作密文块3,则需要使用明文块123。因为与前一个密文块存在关系,自然也存在响应的风险。
问题1:位数据变更
在这里插入图片描述
问题2:数据漏落

在这里插入图片描述
位反转攻击
在这里插入图片描述
攻击者只要篡改初始化向量IV,则对于加密过程,会对整个CBC模式造成影响,如果是解密过程,则会对第一个密文块造成影响。

Padding Oracle Attack:是一种利用块加密技术的padding进行攻击的技术。只要将填充部分padding的几位数据做变更然后用多种顺序传输过去,由于接收端无法正确解密,攻击者可以取得对应的错误情报并进行分析,从而推断出正确的明文。

Cipher-FeedBack mode

CFB模式下,可以利用块加密生成的秘钥进行流加密。生成秘钥的流——key stream是CFB加密中加密算法生成的数据流,为了生成这个数据流需要使用伪随机数生成器。IV就是伪随机数生成器的种子(seed)为核心生成的。
加密过程:
在这里插入图片描述
{ C i = E k ( C i − 1 ) ⊕ P i ,    i ≠ 1 C 1 = E k ( I V ) ⊕ P 1 \begin{cases}C_i=E_k(C_{i-1}) \oplus P_i,\; i≠1 \\ C_1=E_k(IV) \oplus P_1\end{cases} {Ci=Ek(Ci1)Pi,i=1C1=Ek(IV)P1
解密过程:
在这里插入图片描述
{ P i = E k ( C i − 1 ) ⊕ C i ,    i ≠ 1 P 1 = E k ( I V ) ⊕ C 1 \begin{cases}P_i=E_k(C_{i-1}) \oplus C_i,\; i≠1 \\ P_1=E_k(IV) \oplus C_1\end{cases} {Pi=Ek(Ci1)Ci,i=1P1=Ek(IV)C1

面临的威胁:Replay Attack 再传送攻击
在这里插入图片描述
在这里插入图片描述
如上图,解密时,首先对IV加密然后与密文XOR,但是由于234被替换成了昨天的密文块,则密文块1加密后与昨天的密文块2XOR得到一个错误的结果,而34密文块会解析成昨天的正确的明文块3和4。

Output-FeedBack mode

在这里插入图片描述
{ C i = E k ( . . . ( E k ( I V ) ) ⊕ P i ,    i ≠ 1 C 1 = E k ( I V ) ⊕ P 1 \begin{cases}C_i=E_k(...(E_k(IV) )\oplus P_i,\; i≠1 \\ C_1=E_k(IV) \oplus P_1\end{cases} {Ci=Ek(...(Ek(IV))Pi,i=1C1=Ek(IV)P1
在这里插入图片描述
{ P i = E k ( . . . ( E k ( I V ) ) ⊕ C i ,    i ≠ 1 P 1 = E k ( I V ) ⊕ C 1 \begin{cases}P_i=E_k(...(E_k(IV) )\oplus C_i,\; i≠1 \\ P_1=E_k(IV) \oplus C_1\end{cases} {Pi=Ek(...(Ek(IV))Ci,i=1P1=Ek(IV)C1
可以看到OFB模式就是对IV进行不断的加密,每加密一次,与下一阶段的密文或明文块做异或运算从而得到对应的明文或密文。每次使用IV都会用一个新的随机比特流。

注意OFB和CFB的区别。两者模式相近。
在这里插入图片描述

CounTeR mode

CTR模式是流加密模式,不是块加密。
在这里插入图片描述
C i = E k ( C T R ) ⊕ P i C_i=E_k(CTR) \oplus P_i Ci=Ek(CTR)Pi
在这里插入图片描述
P i = E k ( C T R ) ⊕ C i P_i=E_k(CTR) \oplus C_i Pi=Ek(CTR)Ci

区分OFB和CTR:
在这里插入图片描述
CTR模式的特征:

  • 加密和解密是完全相同的构造
  • 程序构造非常简单
  • 与OFB模式相同,都是流加密
  • CTR模式的块密码技术可以是以任意顺序进行过加密或解密
  • 能够并发处理的系统中,CTR模式可以高速处理数据
  • 由于以流加密形式进行块加密,因此即便一个数据块的某一位反转,实际上只会影响对应1位的数据及明文,不会像CBC等加密方式扩大影响。
  • OFB模式下,如果秘钥流key stream的一个数据块加密结果与之前的结果偶然相同,则以后的密钥流将在一个密钥空间进行完全相同的反复。CTR则没有这个问题。

Mode 总结

密码模式全称优点缺点备注
ECBElectric CodeBook mode①简单②高速③加密与解密过程均可以并发处理①明文中的规律直观反映到密文中②可以通过对密文块的删除和交换顺序对明文进行一定功能意义上的操作和改变③有位单位错误的密文块解密后,对应的明文块也将出错④再传送攻击可操作不可用
CBCCipher Block Chaining mode①明文的规律不会反映到密文中②解密过程可以并发处理③可以解密任意密文块①有位单位错误的密文块解密后,对应的明文块也将出错②加密过程不可以并发处理推荐
CFBCipher-FeedBack mode①不需要填充(padding)②解密过程可以并发处理③可以解密任意密文块①加密过程不可以并发处理②有位单位错误的密文块解密后,对应的明文块也将出错③再传送攻击可操作现在不再使用,选择CTR模式
OFBOutput-FeedBack mode①不需要填充(padding)②加密与解密可以事前预先准备③加密解密过程构造相同④有位单位错误的密文块解密后,对应的明文块不会出错,仅影响对应位数据①不可以并发处理②如果密文某位数据反转,则明文数据也将反转选择CTR模式
CTRCounTeR mode①不需要填充(padding)②加密与解密可以事前预先准备③加密解密过程构造相同④有位单位错误的密文块解密后,对应的明文块不会出错,仅影响对应位数据⑤可以并发处理如果密文某位数据反转,则明文数据也将反转选择CTR模式

CTS模式(Cipher Text Stealing Mode)

是ECB和CBC组合使用的典例,将最后一个数据块之前的密文块代替padding使用。加密与解密过程如下:
在这里插入图片描述
直观图如下:
在这里插入图片描述
解密过程如下:
在这里插入图片描述
在这里插入图片描述

完全是加密过程的逆过程。
这一部分建议看图仔细理解,图标表达的先后顺序与思路很清晰。

非对称加密技术

密钥配送问题

密钥配送问题:如果要使用对称加密,则收发双方应该在事前先共享密钥,而密钥如何共享,如何安全的共享密钥就是密钥配送问题。

  1. 密钥事前共享:手段有很多,比如直接见面然后共享;邮件传输等。现实角度的问题有距离问题,以及管理问题。与你联系的用户越多,则你需要保管的对称秘钥也越多。假设某企业有1000名员工,这1000名员工由于保密协议,相互之间传输资料要求使用加密传输,则每个员工需要保存999个秘钥,整个公司则需要499500个秘钥。现实上不可能。
  2. Key Distribution Center; KDC。有一个值得信赖的密钥保管设备,只需要用户与KDC之间共享,将全员的秘钥保存在这里,当需要建立通信时,则将需要的秘钥下发给有需求的用户。
    举例流程如下:

1.A告诉KDC想要与B通信
2.KDC使用伪随机数生成器,生成一个临时通信用的密钥K。这个临时密钥只用于A与B的通信,使用结束后将销毁。
3.KDC从数据库中获得的A和B的密钥,通过C=EkA(K)的形式,将临时密钥的密文交给A,A使用自己的密钥将其破译,获得临时密钥K。通过C=EkB(K)的形式,将临时密钥的密文交给B,B使用自己的密钥将其破译,获得临时密钥K。
4.A使用临时密钥K加密信息并传送给B,然后B使用临时密钥K解密,获得文本,两者通信使用临时密钥,结束后通知KDC释放密钥。
C=EK ( P) ;P=DK ( C)

问题点:成员数将成为KDC的负荷,人数越多,则负荷越大。KDC是公司或单位的全部密钥存储中心,其本身可能成为专门的攻击目标,一旦KDC被攻破,则全单位安全性将被攻破。

  1. Diffie-Hellman 密钥交换
    想要加密通信的两人交换某信息,该信息即便被截获或窃听也无妨,两人使用这些获得的信息生成一个相同的密钥,但是窃听者却无法生成该密钥。
    在这里插入图片描述
    通过上图这个类比的例子,生成的密钥,按照对称加密的方法传输数据即可。

  2. 公钥技术
    在对称加密中,加密与解密使用的是同一密钥,因此称为对称,那么非对称加密则是加密与解密使用不通过密钥的密码技术。公钥技术就是将加密与加密分开,并以巧妙的思路在信息传输中应用的典例。
    假设每个人拥有两把密钥,一把公钥,一把私钥。公钥用于访问公共资源更便利简洁,私钥用于保护隐私安全。类比一个例子,每个人都有自己单位,自己办公室的钥匙,但是却没有能够打开同事桌子抽屉和储物柜的钥匙,同理你的同事也没有能够打开你的储物柜和抽屉的钥匙。私钥就是用来保护隐私且仅当事人持有,公钥则是大家都有,只要是关系者都可以每人分配一把的钥匙。公钥与私钥的生成是严格的,无法根据公钥推断私钥。
    在上述体系下每人都拥有一把私钥和一把公钥。我们将公钥(public key)简称为kpb,把私钥(private key)简称为kpr。且将公钥共享给全世界,也就说世界上任何一个人都可以知道我的公钥,但是由于私钥在自己手里,则其他人无法知道自己的私钥。

假设A与B要通信,则使用公钥技术的通信方式是:A要与B通信,由于所有人知道所有人的公钥,所以A知道B的公钥,A用B的公钥加密后传输给B, C = E K p b ( P ) C=E_{K_{pb}}(P) C=EKpb(P)。然后B接收到该密文C,使用自己的私钥去解密, P = D K p r ( C ) P=D_{K_{pr}}(C) P=DKpr(C)。B要给A回复,则使用A的公钥加密信息,然后A收到后用A自己的密钥解密即可。
我们可以发现,这个过程省掉了密钥配送问题,每个人公布自己的公钥,且其他人想要联系自己时,使用自己的公钥加密,自己是使用私钥解密即可,该通信过程不用担心被窃听,因为窃听者没有对应私钥,无法破译该密文。

RSA算法

RSA是公钥技术里面的典例,除去RSA还有

整数论

整数论是RSA的基础,这里简单对一些基础性的东西进行扫盲,方便理解RSA。由于不是数学类博文,不做过于详细的描述。

  • 约数(divisors):24的约数有1, 2, 3, 4, 6, 8, 12, 24
  • 素数(prime numbers):质数,整数p大于1,且对于p的约数只有其本身和1.这样的数p称为素数。2, 3, 4, 5, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,79, 83, 89…
  • 相对质数(relatively prime number):两个数没有除去1以外的相同的因数,则互相是彼此的相对质数。
  • mod运算: a = q n + r a=qn+r a=qn+r
    简单来说,假设a=11,n=7,则原式为11=7n+r,这里可以直观的看到n=1,r=4。 11 = 7 ∗ 1 + 4 11=7*1+4 11=71+4
    此时,mod运算可以写成以下几种格式:
    4 = 11    m o d    7 4=11\;mod\;7 4=11mod7
    11 = 4    m o d    7 11=4\;mod\;7 11=4mod7
    4 = − 3    m o d    7 4=-3\;mod\;7 4=3mod7
    4 = 18    m o d    7 4=18\;mod\;7 4=18mod7
    . . . ... ...
    为了简单的理解mod运算,可以说mod运算就是求余数,除去这个数后还余下多少。

高素指数运算法:利用mod运算中,18mod7=-3mod7这种关系,任何18的倍数,都可以用-3来表示,18的平方mod7也等于-3的平方mod7.因此看下面一个例子:
1 1 7 = 11 ∗ 1 1 2 ∗ 1 1 4 11^7=11*11^2*11^4 117=11112114
在这里插入图片描述

(Fermat Theorem):
1.如果p是素数,且a是无法被p整除正数,则满足: a p − 1 = 1    m o d    p a^{p-1}=1\; mod\; p ap1=1modp
在这里插入图片描述
2.如果p是素数且a是正数,则满足: a p = a    m o d    p a^p=a\; mod\; p ap=amodp
在这里插入图片描述
欧拉函数:
{ φ ( 1 ) = 1 φ ( n ) = n − 1 , n 是 素 数 φ ( n ) = φ ( p q ) = φ ( p ) ∗ φ ( q ) = ( p − 1 ) ( q − 1 ) , p    q 是 素 数 \begin{cases} \varphi(1)=1\\ \varphi(n)=n-1,n是素数\\ \varphi(n)=\varphi(pq)=\varphi(p)*\varphi(q)=(p-1)(q-1),p\;q是素数 \end{cases} φ(1)=1φ(n)=n1,nφ(n)=φ(pq)=φ(p)φ(q)=(p1)(q1),pq
所有互为相对质数的a和n,满足: a φ ( n ) = 1    m o d    n a^{\varphi(n)}=1\;mod\;n aφ(n)=1modn a φ ( n ) + 1 = a    m o d    n a^{\varphi(n)+1}=a\;mod\;n aφ(n)+1=amodn
在这里插入图片描述
离散代数 y = g x    m o d    p y=g^x\;mod\;p y=gxmodp拥有g、x、p已知则y很容易即可获得答案,但是已知y、g、p来计算x却非常困难的特性。这是RSA算法的核心思想。
RSA算法的例子,假设明文为19,则满足:
在这里插入图片描述

RSA核心内容

RSA加密: C = P E    m o d    N C=P^E\;mod\;N C=PEmodN
RSA解密: P = C D    m o d    N P=C^D\;mod\;N P=CDmodN
(E,N)组合是公钥,而(D,N)组合是私钥。
也就说,在RSA算法中:

元素作用
(E,N)公钥
(D,N)私钥
加密算法 C = P E    m o d    N C=P^E\;mod\;N C=PEmodN
解密算法 P = C D    m o d    N P=C^D\;mod\;N P=CDmodN

在密码学中,任何密码最重要的永远都是密钥的生成。那么RSA密钥的生成过程可以大致分为四个步骤。

需要求的数过程解释
N N = p ∗ q N=p*q N=pqp和q是素数,这两个素数越大,安全性越高
L L = l c m ( p − 1 , q − 1 ) L=lcm(p-1,q-1) L=lcm(p1,q1)L不在加密和解密过程中直接使用,只有生成密钥对时使用。lcm是指求两个数的最小公倍数。
E G C D ( E , L ) = 1 , 1 < E < L GCD(E, L) = 1,1<E<L GCD(E,L)=1,1<E<LE&L是相对质数.,GCD是最大公约数的意思
D E × D m o d L = 1 , 1 < D < L E × D mod L = 1,1 < D < L E×DmodL=1,1<D<L-

下面我们举一个简单的例子:

  1. 选择两个素数,为了计算不过复杂,选择17,19。则 p = 17 , q = 19 p=17,q=19 p=17q=19
  2. N = p ∗ q = 323 N=p*q=323 N=pq=323
  3. L = l c m ( p − 1 , q − 1 ) = l c m ( 16 , 18 ) = 144 L = lcm(p-1, q-1) = lcm(16, 18) = 144 L=lcm(p1,q1)=lcm(16,18)=144
  4. 满足 G C D ( E , L ) = 1 GCD(E,L)=1 GCD(E,L)=1的数有5, 7, 11, 13, 17, 19, 23, 25, 29, 31, …,这里我们选5,则 E = 5 E=5 E=5
  5. E × D    m o d    L = 5 × 29    m o d    144 = 145    m o d 144    = 1 , 所 以 D = 29 E × D\; mod\; L = 5 × 29\; mod\; 144 = 145\; mod 144\; = 1 ,所以 D=29 E×DmodL=5×29mod144=145mod144=1,D=29
  6. ( E , N ) = ( 5 , 323 ) (E, N) = (5, 323) (E,N)=(5,323)
  7. ( D , N ) = ( 29 , 323 ) (D, N) = (29, 323) (D,N)=(29,323)
元素作用
(5, 323)公钥
(29, 323)私钥
加密算法 C = P E    m o d    N = 12 3 5    m o d    323 = 225 C=P^E\;mod\;N=123^5\;mod\;323=225 C=PEmodN=1235mod323=225
解密算法 P = C D    m o d    N = 22 5 2 9    m o d    323 = 123 P=C^D\;mod\;N=225^29\;mod\;323=123 P=CDmodN=22529mod323=123

在这里插入图片描述

针对RSA的攻击
  1. 从密文到明文的分析:从这一方面,攻击者能够截获的情报有作为公钥的E和N以及密文本身。不知道的有D和生成密钥过程中使用的p,q,L。使用 P = C D    m o d    N P=C^D\;mod\;N P=CDmodN计算将会成为非常困难的离散代数问题,直到现在为止,这种离散代数问题能够效率解决的算法仍未出现,因此,想要以这种方法解析明文,需要相当高的数学水平以及超强计算机力的计算机,现实角度而言不可能。
  2. 暴力解码:现实角度上不可能。D的候补进行全部尝试的话,随着D的比特数增加会越发困难。p和q的比特数有512比特以上的话,N就有1024比特以上。想要找到D需要对1024位数进行暴力解码。随着计算机力的提高,512位和1024的RSA确实能够被当前最前沿的超级计算机暴力破解,但是只需要将RSA的位数提高,计算机力又不足了。然而随着计算机力的提升,在2020年的今天,2048位曾被宣告无法暴力解码也已经存在很多不安全的论证,现阶段4096和3074位的密码是理论上安全的RSA加密。当然一般用途下2048位仍然可用于企业,1024和512作为团队和个人应用也是没有问题的。
  3. 通过E × D mod L = 1求D。不知道p和q,攻击者想求出D可以说是天方夜谭。
  4. N的因数分解。N=pXq,这是唯一可行的方法,只要能够找到一个高速因式分解的算法,则RSA会从本质上被破解。现阶段没有这样高效的因式分解算法。与其进行算数上的演练,不如从人类学心理学上来推测密码使用者可能会使用的p和q来的更快。
  5. MITM中间者攻击:并非是破解RSA算法本身,而是破坏了机密性。

中间人攻击场景:
A与B通信过程中,黑客H存在。A给B发送自己公钥的途中,被H截获并中断传输,然后H用自己的公钥代替A的公钥发给B,此后B发给A的通信中,A无法使用自己的私钥解读而H可以使用自己的私钥肆无忌惮的浏览内容。如果这个过程是双向的,H盗取了AB的公钥并将自己的公钥传给彼此,则H可以作为一个完美的中间人传达AB之间的意思的同时加入自己的想法而不容易被发现。

  1. 选择密码攻击:利用网络等错误返回信息来推测明文的攻击手段,通过伪造密文随便发来接收各种各样的返回的错误报告,并从这些错误中提取有效信息进行对应的明文推测。
    RSA-OAEP:(Optimal Asymmetric Encryption Padding)。针对选择密码攻击,改良的RSA。追加了密文认证过程,通过哈希值和指定个数0组合成的认证信息与明文结合后再加密的方式,解密如果认证信息不正确则判定为错误。

ElGamal、Rabin、(elliptic curve cryptosystems; ECC)简述

其他公钥加密算法还有:ElGamal、Rabin、(elliptic curve cryptosystems; ECC)等。
ElGamal:有密文是明文两倍长度的缺点。也是利用难因数分解的离散数学问题为核心思想,在GnuPG使用。
Rabin:利用求解mod N的平方根非常困难设计的算法,同样因数分解困难而正在被使用。
椭圆曲线密码ECC:最近比较受瞩目的算法,比RSA比特数要少。定义椭圆曲线上的乘法,这个乘法的逆运算非常困难是这个算法的核心。

密码学基础Q&A

1.公钥加密是否比对称加密机密性要更高?
A)不能一概而论。随着密钥比特位的增加,机密性对应也会增加。

2.1024bit的公钥加密和128bit的对称加密中,是公钥加密更安全吗?
A)否。公钥加密与对称加密的长度是不能够直接相比的。我们来看一个图表,比较直观。
下图反应了暴力解码相同时间内能破解的对应密码位数。(bit为单位)

对称加密公钥加密
1282304
1121792
80768
64512
56384

下图反映了对应加密用密钥的商用使用年限

密钥类型发送端使用年限接收端使用年限
对称加密用密钥25
加密用公钥2
解密用公钥2
鉴证用公钥2
签名用公钥2

下图反映了多种加密算法的安全强度

安全强度(单位bit)对称加密算法哈希函数因数分解离散代数公钥离散代数私钥椭圆曲线密码
11211211220482048224224
12812812830723072256256
19219219276807680384384
2562562561536015360512512

3.是否因为公钥技术的诞生,以后就慢慢取代对称加密技术,甚至不再使用对称加密技术了呢?
A)否。一般相同安全性的前提下,公钥加密技术比对称加密技术速度慢许多倍。公钥技术不适合加密过长的明文,应该根据目的区分使用公钥加密和对称加密。例如之前将的KDC就可以通过公钥加密与对称加密结合的形式来实现效率且安全的传输方式。

4.RSA算法应用至今,那么可用的大素数随着各个企业以及有需求的个人的使用,按照512位计算的话,那么这些大素数是否已经用的差不多了?
A)否。数字远比想象的庞大,512位可用表现的素数有10150个以上。

5.RSA加密时,有必要尝试对大数进行因式分解吗?
A)否。RSA中不管是加密、解密还是密钥对的生成,都不需要进行因数分解。

6.破解RSA是否就是要攻克大数因式分解?
A)不知道。虽然只要能够高速进行大数因式分解,则RSA宣告被破解,但是并非破解RSA就必须要攻克因式分解,这两者没有必然关系。或许有不使用因式分解也能破译密码的方法,只不过现在不知道而已,思路不应该被限制的太窄。

7.为了RSA不被轻易破解,那么设置位数的最好是多少呢?
A)不能一概而论。不管设置多大的数,不计成本总是可以因式分解的(你让全世界所有计算机分解某一个区间,极端情况下),只不过我们考虑的是高速因式分解,因此在考虑时间、经济开销、人力开销等各种成本的前提下,综合得到一个标准。

破解例子
512位的密码在1999年8月被因式分解,使用了292台电脑和5.2个月已经9周的事先计算
640位的密码(193位十进制数)在2005.11.2被破解
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chahot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值