一.物联网安全概述
1.信息安全的主要内容
2.密码学
编码学和分析学的关系:相互对立、相互依存、相互促进
3.密码学历史
- 1.第一阶段:几千年前到1949年,此时还没有形成一门科学,靠密码分析者的直觉和经验来进行
代表:Caesar密码、Playfair密码 - 2.第二阶段:1949年到1975年,正式成为了一门学科
- 3.第三阶段:1976年至今,形成了密码体系
4.密码理论与技术
1.基于数学的密码理论与技术
- 公钥密码
- Hash函数
- 消息认证码
- 身份识别
- 序列密码
- PKI技术
2.非数学的密码理论与技术
- 消息隐藏
- 量子密码
- 基于生物特征的识别理论与技术
5.安全协议
安全协议的研究主要包括两方面:
- 1.安全协议的安全性分析方法研究
- 2.各种实用性安全协议的设计与分析研究
安全协议的安全性分析方法主要有两种:
- 1.攻击检验方法
- 2.形式化分析方法(重点)
6.安全协议理论与技术
图像化描述:
7.信息对抗理论与技术
- 黑客防范系统
- 信息伪装理论与技术
- 信息分析与监控
- 入侵检测原理与技术
- 反击方法
- 应急响应系统
- 计算机病毒
- 人工免疫系统在反病毒和抗入侵系统种的应用
8.网络安全与安全产品
网络安全是信息安全中的重要研究内容之一,也是当前信息安全领域中的研究热点。研究内容包括:网络安全整体解决方案的设计与分析,网络安全产品的研发等。网络安全包括物理安全和逻辑安全。物理安全指网络系统中各通信、计算机设备及相关设施的物理保护,免于破坏、丢失等。逻辑安全包含信息完整性、保密性、非否认性和可用性。它是一个涉及网络、操作系统、数据库、应用系统、人员管理等方方面面的事情,必须综合考虑。
网络中的安全威胁主要有:
- 身份窃取,指用户身份在通信时被非法截取
- 假冒,指非法用户假冒合法用户身份获取敏感信息的行为
- 数据窃取,指非法用户截获通信网络的数据
- 否认,指通信方事后否认曾经参与某次活动的行为
- 非授权访问
- 拒绝服务,指合法用户的正当申请被拒绝、延迟、更改等
- 错误路由
目前,在市场上比较流行,而又能够代表未来发展方向的安全产品大致有以下几类:
- 防火墙
- 安全路由器
- 虚拟专用网(VPN)
- 安全服务器
- 电子签证机构--CA和PKI产品
- 用户认证产品( 如IC卡等)
- 安全管理中心
- 入侵检测系统(IDS)
- 安全数据库和安全操作系统
9.本章考点总结
- 密码学发展的三个阶段
- 基于(非)数学理论的一些理论与技术
- 安全协议的形式化分析方法
- 安全体系结构的模型以及形式化分析
- 信息战、病毒站
- 网络安全及其产品
二.经典密码学
1.一些术语
- 原始的消息称为明文,加密后的消息称为密文
- 从明文到密文的变换过程称为加密,从密文到明文的变换过程称为解密
- 研究各种加密方案的学科称为密码编码学,加密方案称为密码体制或密码
- 研究破译密码获得消息的学科称为密码分析学
- 密码编码学和密码分析学统称为密码学
2.加密通信的模型
密码学的目的: Alice和Bob两个人在不安全的信道上进行通信,而破译者Oscar不能理解他们通信的内容。
3.移位密码体制(凯撒密码)
字母顺序参考表:
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
具体来说,移位加密通常将明文中的每个字母替换为其在字母表中向后(或向前)移动固定数量的位置得到对应的密文字母。
步骤如下:
- 选择一个偏移量 k,确定每个字符需要向后移动还是向前移动。
- 对于明文中的每个字符,根据偏移将其向后或向前移动相应的位数,并将结果记录下来。
- 将所有移位后的字符连接起来,得到密文。
例如:这里假设明文是 word ,现在的密匙(偏移量)为3,那么我们加密后的密文就是 zrug 。(这里需要结合字母顺序表查看,顺序表由发送发与接收方约定定义,无第三方知道) 这里的偏移量表示字母移动的距离,当偏移量为正数时,字母向后移动;当偏移量为负数时,字母向前移动。
4.替换密码体制
其实这是一个很笼统的说法:
替换密码其实就是把明文采取某种替换规则变成密文的加密方法,像凯撒密码、仿射密码本身都是替换密码的一种特例。
下面我们了解它的一般解法即可:
在一般的替换密码中,解密的过程通常需要知道密钥或替换规则。如果密钥未知,可以尝试使用以下方法之一来解密:
- 频率分析:这是一种破解替换密码的常用方法。基于每种语言中字母出现的频率,可以对密文进行分析,找出其中出现频率较高的字符,然后将它们映射到明文中相应出现频率较高的字符。这种方法在一般的替换密码中可能有效,但需要一定数量的密文和对明文语言的理解。
- 已知明文攻击:如果已知部分明文和相应的密文,可以尝试通过比较这些已知的字符来推断密钥或替换规则。这种方法的有效性取决于已知明文的长度和密钥的复杂性。
- 暴力破解:尝试所有可能的密钥或替换规则,直到找到一个可以将密文解密为有意义的明文的密钥。这种方法在密钥空间较小的情况下可能有效,但随着密钥空间的增大,所需的计算资源和时间也会显著增加。
- 密码分析工具:使用现有的密码分析工具,如在线解密器或密码分析软件,尝试破解密文。这些工具通常会结合多种方法,如频率分析、已知明文攻击和启发式搜索等,来提高破解成功率。
5.仿射密码体制
加密和解密过程如下:
具体来说,仿射加密需要选择两个整数a和b作为加密密钥。加密过程中,先将明文中的每个字符对应到一个数字上(比如A对应0,B对应1等),形成一个数字序列。然后,对该数字序列中的每个数字x,执行下面的运算:
y = (ax + b) mod m
其中,m是字母表大小(比如26,如果只考虑大写字母的话),mod表示模运算,即取余数。这样得到的y就是该数字的加密结果。最后,将每个加密结果对应到相应的字母上(比如0对应A,1对应B等),就得到了加密后的密文。
解密过程与加密过程相似,也是选择两个整数a和b作为解密密钥,并将密文中的每个字符对应到一个数字上,再执行下面的运算:
x = a^-1(y - b) mod m
其中,a-1表示a的逆元,也就是满足aa-1 ≡ 1 (mod m)的整数。这样得到的x就是该数字的解密结果。最后,将每个解密结果对应到相应的字母上,就得到了原始的明文。
举例说明:
6.维吉尼亚密码
什么都是虚地,直接用例子说明:
右边的表称为Vigenere方阵,利用它可以方便的加密和解密。当用密钥字母k;对明文字母m;进行加密时,Vigenere方阵中第k;行第m;列的字母就是相应的密文。
例如:设明文为This cryptosystem is not secure,密钥为cipher,则密文为:VPXZGIAXIVWPUBTTMJPWIZITWZT。
解码破译时有两种方法:一是kasiski方法,二是重合指数法。第二步用互重合指数法。
这里我们直说kasiski方法。
找出长度至少为3的相同密文段,记录每个相同密文段出现的开始位置,计算出其他相同密文段到第一个相同密文段的距离,这些距离的最大公约数就可能是密钥长度。
确定密钥长度就行了,后面确定密钥是什么要采用互重合指数法,这太难了,直接放弃。
7.希尔密码体制
个人理解:
- 1.把明文写成一个矩阵
- 2.我们的密钥也是一个矩阵
- 3.两个矩阵进行矩阵乘法
- 4.写出对应的密文
同理,解密时把密文写成一个矩阵,然后与密钥的逆元相乘即可得出明文。
例如,有一组密钥:
进行加密:
进行解密:
结果矩阵的数字与移位密码的字母顺序表对应。
8.置换密码体制
这一部分真的是看了很多资料,没有一个讲清楚的,自己在这卡了一个多小时才理解,确实不容易,chatgpt也是个垃圾,全部都是错的。
所谓置换,就是把原来明文中就存在的交换一下位置,中间不涉及几何运算。
- 1.假设加密密钥为(1 3)(2 5 4 6),我们要把它写成这种:
- 2.把明文按长度分组,这是基础
3.在本例中直接直接按351642的顺序填密文,假设明文crypto
3 5 1 6 4 2 y t c o p r 所以crypto的加密密文是ytcopr。
4.根据加密密钥求逆,得解密密钥
这里有一个简单办法,在1之后直接从下往上看,比如3对应1,那么3的逆置换就是1,类推
1 2 3 4 5 6 3 6 1 5 2 4 所以,解密密钥为:
- 5.接下来,解密就相当于对密文使用解密密钥进行加密,得到的“密文”就是明文。
数缘科技
三.现代加密方法
1.简化的DES(S-DES)
1.加密算法
加密算法涉及五个函数:
- (1)初始置换IP(initial permutation)
- (2)复合函数fk1,它是由密钥K确定的,具有转换和替换的运算。
- (3)转换函数SW
- (4)复合函数fk2
- (5)初始置换IP的逆置换IP^-1^
2.S-DES示意图
3.计算两个加密子密钥
解释:
- P10相当于对初始K进行密钥为P10的置换加密处理
- LS-1为循环左移一次,分别对左右5bit进行
- LS-2为循环左移二次,分别对左右5bit进行
- P8相当于按P8顺序取其中的8位
例如,现在我们有K=(10100 00010),现在我们先求它的两个子密钥:
- 1.进行P10操作,结果为:(10000 01100)
- 2.左右分别进行LS-1操作:10000---->00001 ,01100---->11000
- 3.合并进行P8操作得到K1:(1010 0100)
- 4.步骤2的结果合并进行LS-2操作:00001---->00100, 11000---->00011
- 5.上一步结果合并进行P8操作得到K2:(0100 0011)
S-DES加密中,计算两个子密钥是前提,一定要掌握。
4.加密运算
原理图:
还是举例子计算方便:现在假设有明文P=1011 0101,子密钥在3中产生,求密文C?
- 1.用IP函数对P进行初始置换:得到的IP=0111 1100
- 2.取IP中右边4bit进行E/P操作,即1100----->0110 1001
- 3.与子密钥K1进行异或运算,0110 1001⊕1010 0100==1100 1101
4.取左4bit进行S0盒运算,取右4bit进行S1盒运算
所谓S0、S1盒运算,其实就是取数操作,输入的4bit数其中1位和4位作为行数,2为与3位作为列数,读取盒子里面的数进行运算。
例如本例中1100进行S0盒运算:
- 1.第一位与第四位为10,表示2
- 2.第二位与第三位为10,表示2
- 3.取S0盒中第二行第二列的数3,用二进制表示为11
- 4.所以S0盒输出的两位为11
同理本例中的1101进行S1盒运算:
- 1.第一位与第四位为11,表示3
- 2.第二位与第三位为10,表示2
- 3.取S1盒中第三行第二列的数1,二进制表示为01
- 4.所以S1盒输出的两位为01
- 5.两个盒子出来的结果合并进行P4操作,1101---->1101(本例比较 特殊而已,刚好没变)
- 6.取步骤1的左4位与结果进行异或运算,1101 ⊕ 0111==1010
- 7.对上一步的结果再进行类似步骤2的E/P操作,即1010----->0101 0101
- 8.结果与子密钥K2进行异或运算:0101 0101⊕ 0100 0011==0001 0110
- 9.取其中左4bit进行S0盒运算,取右4bit进行S1盒运算
- 10.两个盒子出来的结果合并进行P4操作,1011----->0111(本次结果就变了)
- 11.取步骤1的右4位作为L与0111进行异或运算,0111⊕1100==1011
- 12.步骤11的结果与步骤6的结果合并成1011 1010
- 13.最后进行IP逆变换,结果即为密文。
5.解密过程
解密过程就不详细说了,大家参考:
弄懂了加密过程,解密虽然不一样,但计算你是会的。
2.DES描述
1.目的
DES利用56比特串长度的密钥K来加密长度为64位的明文,得到长度为64位的密文;而我们上面的S-DES是使用8bit的密钥K来加密长度为8为的明文。
2.三个阶段
1.给定的明文X,通过一个固定的初始置换IP来排列X得到X0。X0=L0R0。
L0表示前32位,R0表示后32位。
- 2.计算函数F的16次迭代。
- 3.对比特串使用逆置换得到密文。
3.从密钥K计算子密钥Ki
- 1.给定64位的密钥K,放弃奇偶校验位(8,16,24,32,40,48,56,64)并根据固定置换PC-1来排列K中剩下的位。
2.对1<=i<=16,计算Ci=LSi(Ci-1)Di=LSi(Di-1)LSi表示循环左移2或1个位置,取决于i的的值。i=1,2,9和16 时移1个位置,否则移2位置。Ki=PC-2(CiDi), PC-2为固定置换。
注:一共16轮,每一轮使用K中48位组成一个48比特密钥。
考试遇到DES了,这边建议直接放弃。
3.密码分析
DES的核心是S盒,除此之外的计算是属线性的。S盒作为该密码体制的非线性组件对安全性至关重要。
1.差分密码分析
- 差分攻击技术还可用于6轮DES,对8轮的DES需2^14^ 个选择明文,对16轮DES需要2^47^ 个选择明文。
- 对其他密码体制的攻击也是有效的。
2.线性密码分析
- 用线性密码分析方法攻破DES获得密钥需要2^43^ 个明文
- 用差分分析方法攻破DES获得密钥需要2^47^ 个选择明文
- 尽管获取明文比获取选择明文容易,但是这只是一个小的改进,线性密码分析方法对于攻击DES还是只有理论意义。
四.现代常规的分组加密算法
1.原因
主要考察较为流行的最重要的几个对称密钥的分组密码算法。这些算法都是自DES公布之后,人们了解DES的弱点越来越深入的情况下给出的。给出的方式有两种,一种是对DES进行复合,强化它的抗攻击能力;另一种是开辟新的方法,即象DES那样加解密速度快,又具有抗差分攻击和其他方式攻击的能力。
关于DES算法的另一个最有争议的问题就是担心实际56比特的密钥长度不足以抵御穷举攻击。
主要考察五种加密算法:
- 1.Triple DES
- 2.IDEA
- AES
- SMS4
- 序列密码
2.Triple DES
DES不能成为群
1.二重DES
给定明文P和两个加秘密钥k1和k2,采用DES对P进行加密E,有密文 C=E~K2~(E~K1~(P))
对C进行解密D,有明文 P=D~K1~(D~K2~(C))
缺点:二重DES很难抵挡住中间相遇攻击法
2.带有双密钥的三重DES
目前为止,还没有人给出攻击三重DES的有效方法。对其密钥空间中密钥进行穷举搜索,那么由于空间太大为2^112^ =5×10^33^,这实际上是不可行的。若用差分攻击的方法,相对于单一DES来说复杂性以指数形式增长,要超过10^52^。
注意:
- 1.Merkle和Hellman设法创造一个条件,想把中间相遇攻击的方法用于三重DES,但目前也不太成功。
- 2.虽然对上述带双密钥的三重DES到目前为止还没有好的实际攻击办法,但人们还是放心不下,又建议使用三密钥的三重DES,此时密钥总长为168bits.
3.IDEA(国际数据加密算法)
- 分组长度为64位
- 密钥长度为128位(抗强力攻击能力比DES强),同一算法既可加密也可解密。
- IDEA的“混淆”和“扩散”设计原则来自三种运算,它们易于软、硬件实现(加密速度快)
IDEA的密钥生成:
- (1)前8个子密钥直接从密钥中取出(将128bit的密钥分成8块,每块就是一个子密钥);
- (2)对密钥进行25bit的循环左移,接下来的密钥就从中取出(将循环左移25bit的128bit的密钥分成8块,每块就是一个子密钥);
- (3)重复(2)步4次,加上第一步得到的8个子密钥,总计得到了48个子密钥;
- (4)对(3)得到的结果再进行进行25bit的循环左移,分成8块,取前4块作为最后的4个子密钥,这样就产生了52个子密钥。
IDEA的解密:
加密解密实质相同,但使用不同的密钥;
解密密钥以如下方法从加密子密钥中导出:
- 解密循环I的头4个子密钥从加密循环10-I的头4个子密钥中导出;解密密钥第1、4个子密钥对应于1、4加密子密钥的乘法逆元;2、3对应2、3的加法逆元;
- 对前8个循环来说,循环I的最后两个子密钥等于加密循环9-I的最后两个子密钥;
优缺点:
- IDEA是PGP的一部分;
- IDEA能抗差分分析和相关分析;
- IDEA似乎没有DES意义下的弱密钥;
- Bruce Schneier 认为IDEA是DES的最好替代,但问题是IDEA太新,许多问题没解决。
4.AES候选算法
目的是为了确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护下一世纪政府的敏感信息。也希望能够成为保密和非保密部门公用的数据加密标准(DES)。
要求---
- 比三重DES快,至少还要一样的安全,
- 应当具有128比特分组长度和256比特分组密钥长度(不过必须支持128和192比特的密钥)
- 还应该具有较大的灵活性。
评选过程中采用的方法:
- 1.用量化的或定性的尺度作为选择的标准;
- 2.选择一种以上的算法;
- 3.选择一个备用算法;
- 4.考虑公众的建议以改进算法。
5.S-AES
1.补充概念
状态矩阵:2行2列的矩阵,矩阵元素是半个字节,也就是4 bits例如:
2.S-AES轮密钥加
把16bit的明文按列存储在状态矩阵里,然后和16bit的轮密钥按位进行异或运算。
3.S-AES半字节代替
State矩阵中每个半字节的左边两位确定行值,右边两位确定列值,然后查表进行代替,加密的时候查S盒,解密的时候查逆S盒。
所以有:
这里1000表示10行00列,查S盒也就是6,用4位二进制表示就是0110,其余各部分同理。
4.行移位
- 对state矩阵的第一行保持不变,第二行循环左移半个字节(4位)。求逆类似,对state矩阵的第一行保持不变,第二行循环右移半个字节(4位)。
效果就相当于第二行的左右半字节换了个位置。
5.列混淆
其实该算法就是一个矩阵运算,只不过我们我们这里的运算规则不同。
运算规则:
直接用例子进行计算:
在上面这个例子中,应该是1●6 ⊕ 4●C
,这一点学了线性代数应该知道,就是行列相乘相加,但是这里的乘法和加法的规则发生了变化。这里的运算是在GF(24)进行,符号●表示在GF(2^4^ )的乘法。
这里我们详细列出1●6⊕4 ●C=3的计算过程:
1
用2进制表示为0001,对应多项式为16
用2进制表示为0110,对应多项式为x^2^ +x- 1●6=1*(x^2^ +x)mod(x^4^ +x +1)=x^2^ +x
4
用2进制表示为0100,对应多项式为x^2^C
用2进制表示为1100,对应多项式为x^3^ +x^2^- 4 ●C=x^2^ * (x^3^ + x^2^ )=(x^5^ +x^4^ )mod(x^4^ +x+1)=x^2^ +1
- 1●6的结果用4位表示位0110,4 ●C的结果用4位表示位0101,两个异或0110⊕0101=0011
- 0011用十进制表示为3
上面的第6步你可能感到疑惑(也就是计算4 ●C这一步),这里我再写详细一点:
- x^5^ +x^4^ 的最高次为5,x^4^ +x+1最高次为4,商x;
- x*(x^4^ +x+1)=x^5^ + x^2^ +x,将x^5^ + x^2^ +x与x^5^ +x^4^ 进行异或运算=x^4^ +x^2^ +x
- x^4^ +x^2^ +x的最高次是4,x^4^ +x+1最高次为4,商1;
- x^4^ +x^2^ +x与x^4^ +x+1进行异或运算=x^2^ +1
- x^2^ +1明显不能再计算了,所以结果就是x^2^ +1
列混淆乘的矩阵是固定的,所以可以先把值算出来保存好,需要的时候查表就可以了,这儿我已经给大家整理好了:
● | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
4 | 0 | 4 | 8 | C | 3 | 7 | B | F | 6 | 2 | E | A | 5 | 1 | D | 9 |
6.列混淆求逆
运算规则:
列混淆求逆乘的矩阵是固定的,所以可以先把值算出来保存好,需要的时候查表就可以了,这里我又贴心的给大家整理出来了:
● | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
9 | 0 | 9 | 1 | 8 | 2 | B | 3 | A | 4 | D | 5 | C | 6 | F | 7 | E |
2 | 0 | 2 | 4 | 6 | 8 | A | C | E | 3 | 1 | 7 | 5 | B | 9 | F | D |
有朋友可能会问这个求逆不就是换了一个固定矩阵进行列混淆吗,没错,你也应该猜到在本例中这两个矩阵应该是可逆的关系。
7.S-AES密钥扩展
16bits的初始密钥被分成两个8bits的字,即w0和w1,然后通过如下算法计算出4个新的字作为密钥。
这里的SubNib是字节替换的意思,而RobNib是循环移位的意思。
6.S-AES完整例子
上一部分介绍了S-AES中的各种运算,那么肯定我们需要一个完整的例子来实操一遍。
1.
密钥为2D55=0010 1101 0101 0101=w0w12.
根据密钥扩展算法得到扩展密钥w2=1011 1100 w3=1110 1001 w4=1010 0011 w5=0100 1010明文为0110 1011 1010 0011 (这一部分结合上面的注释,手动计算一遍,很简单的)3.
轮密钥加(w0w1)4.
加密半字节代替5.
加密行移位6.
列混淆7.
轮密钥加(w2w3)8.
第二轮半字节代替9.
第二轮行移位10.
第二轮轮密钥加(w4w5)11
得到密文
所以明文为 0110 1011 1010 0011
最终的密文是0011 1100 0011 1011
。
7.AES
S-AES是AES的简化版,用于课堂教学而已,这个我们不掌握,了解就行。
AES明文分组长度为128bits,密钥长度可以为128bits,192bits或者256bits,密文分组长度为128bits。根据密钥长度,算法被称为AES-128,AES-192和AES-256。
AES一些运算:
- 轮密钥加
- 字节代替及其逆
- 行移位及其逆
- 列混淆及其逆
- 密钥扩展(轮密钥生成)
算了,这里也不写了,考试直接放弃。
8.我国商用密码SMS4
分组密码数据
- 分组长度=128位、密钥长度=128位
- 数据处理单位:字节( 8位),字(32位)
密码算法结构
- 基本轮函数加迭代
- 解密算法与加密算法相同(解密时将轮密钥逆序使用)
实例:
- 明文: 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
- 密钥: 01 23 45 67 89 ab cd ef fe dc ba 98 76 54 32 10
- 密文: 68 1e df 34 d2 06 96 5e 86 b3 e9 4f 53 6e 42 46
- SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法
- SM2、SM9是非对称算法SM3是哈希算法。
- SM2、SM3、SM4最为常用,用于对应替代RSA、SHA、DES、3DES等国际通用密码算法体系。
9.流密码(序列密码)
流密码是将明文划分成字符(如单个字母),或其编码的基本单元(如0, 1数字),字符分别与密钥流作用进行加密,解密时以同步产生的同样的密钥流实现。
流密码强度完全依赖于密钥序列的随机性(Randomness)和不可预测性(Unpredictability)。
核心问题是密钥流生成器的设计。
保持收发两端密钥流的精确同步是实现可靠解密的关键技术。
五.数学基础
1.素数和互素
素数=质数
互素=互质(最大公约数为1)
2.群、环、域
1.群
在数学中,群(Group)是代数结构的一种,它由一个集合和一个满足特定条件的二元运算组成。群可以看作是一种特殊的集合,它具有一定的运算规则。为了更好地理解群,我们需要了解其定义和性质。
学了数据结构吗,数据结构不也是元素加一些逻辑规则吗?尤其是图,参考数据结构理解。
群的定义: 一个群是一个有序对 (G, ),其中 G 是一个非空集合, 是一个二元运算(即在集合 G 的两个元素之间进行的运算),满足以下四个条件:
- 封闭性(Closure):对于所有 a, b 属于 G,运算结果 a * b 也属于 G。
- 结合律(Associativity):对于所有 a, b, c 属于 G,有 (a b) c = a (b c)。
- 单位元(Identity):存在一个元素 e 属于 G,使得对于所有 a 属于 G,有 e a = a e = a。
- 逆元(Inverse):对于每个 a 属于 G,都存在一个元素 b 属于 G,使得 a b = b a = e,其中 e 是单位元。
群与集合的关系: 群是建立在集合基础上的代数结构。也就是说,群首先是一个集合,然后在这个集合上定义了一个满足特定条件的二元运算。所以,我们可以把群看作是一种特殊的集合,它具有一定的运算规则。
群的一些例子:
- 整数集合 Z 和加法运算:(Z, +),其中单位元是 0,每个整数 a 的逆元是 -a。
- 非零实数集合 R 和乘法运算:(R, ×),其中单位元是 1,每个非零实数 a 的逆元是 1/a。
2.环
环(Ring)是数学中的另一种代数结构,它是在群的基础上引入了另一个运算。环由一个非空集合和两个满足特定条件的二元运算(通常称为加法和乘法)组成。为了更好地理解环,我们需要了解其定义和性质。
环的定义: 一个环是一个有序三元组 (R, +, ),其中 R 是一个非空集合,+ 和 是两个二元运算(分别称为加法和乘法),满足以下条件:
- (R, +) 是一个阿贝尔(Abelian)群,即满足加法的封闭性、结合律、单位元(加法单位元,通常记为 0)和逆元(加法逆元,对于元素 a,其加法逆元通常记为 -a),以及交换律(对于所有 a, b 属于 R,有 a + b = b + a)。
- 乘法满足封闭性和结合律:对于所有 a, b, c 属于 R,有 a b 属于 R 且 (a b) c = a (b c)。 3. 乘法对加法满足分配律:对于所有 a, b, c 属于 R,有 a (b + c) = a b + a c 且 (a + b) c = a c + b * c。
环与集合的关系: 环是建立在集合基础上的代数结构。也就是说,环首先是一个集合,然后在这个集合上定义了两个满足特定条件的二元运算(加法和乘法)。所以,我们可以把环看作是一种特殊的集合,它具有两个运算规则。 环的一些例子: 1. 整数集合 Z 和加法、乘法运算:(Z, +, )。 2. 有理数集合 Q、实数集合 R 和复数集合 C,分别与它们的加法和乘法运算组成环:(Q, +, ),(R, +, ) 和 (C, +, )。
如果一个群的元素是有限的,则该群称为有限群,并且群的阶就等于群的元素个数。否则称为无限群。一个群如果满足以下条件则称为交换群(Abel群):(A5)交换律:对任意a ,b属于G,有 a·b=b·a。循环群在群中定义求幂运算为重复运用群中的运算,如a3=a·a·a,定义 a0= e,a-n=(a-1)n,如果群中的每个元素都是一个固定的元素a(aG)的幂ak(k为整数),则称群G为循环群,其中a为生成元。循环群总是交换群,它可能是有限群或无限群。
3.域
一个域是一个有序三元组 (F, +, ),其中 F 是一个非空集合,+ 和 是两个二元运算(分别称为加法和乘法),满足以下条件:
- (F, +) 是一个阿贝尔(Abelian)群,即满足加法的封闭性、结合律、单位元(加法单位元,通常记为 0)和逆元(加法逆元,对于元素 a,其加法逆元通常记为 -a),以及交换律(对于所有 a, b 属于 F,有 a + b = b + a)。
- (F \ {0}, ) 也是一个阿贝尔群,即去掉加法单位元 0 后的集合 F \ {0},在乘法运算下满足封闭性、结合律、单位元(乘法单位元,通常记为 1)和逆元(乘法逆元,对于非零元素 a,其乘法逆元通常记为 a^(-1) 或 1/a),以及交换律(对于所有 a, b 属于 F \ {0},有 a b = b * a)。
- 乘法对加法满足分配律:对于所有 a, b, c 属于 F,有 a (b + c) = a b + a c 且 (a + b) c = a c + b c。
域与群、环的关系: 域是在环的基础上增加了乘法逆元的代数结构。换句话说,域是一种特殊的环,它要求非零元素在乘法运算下也构成一个阿贝尔群。而环本身是在群的基础上引入了另一个运算(乘法)的代数结构。
3.模运算
相对于某个固定模数m的同余关系,是整数间的一种等价关系。具有等价关系的三点基本性质:
- 自反性:对任意整数a有a≡a(mod m)
- 对称性:如果a≡b(mod m)则b≡a(mod m)
- 传递性:如果a≡b (mod m)b≡c(mod m)则a≡c(mod m)
整数模m同余类共有m个,他们分别为mk+0,mk+1, mk+2,…mk+(m-1); k∈Z,每一个算一类,每一类都可以选一个代表元,一般选这一类中的最小的非负整数。于是称[0],[1],[2],…[m-1]为标准完全剩余系。定理:(消去率)对于ab≡ac(mod m)来说,若(a,m)=1则b≡c(mod m)
一次同余方程ax≡b(mod m)这个方程有没有解,相当于问有没有那样一个整数x,使得对于某个整数y来说,有ax+my=b?
如记(a,m)=d,则同余方程ax≡b(mod m)有解的充分必要条件是d∣b。当这个条件满足时,恰有d个模m同余类中的整数是上述方程的解。
整数Z模正整数m得到的剩余类集合可以记为Zm(或Z/(m)) Zm={[0],[1],…,[m-1]} Zm对剩余类的加法,乘法是封闭的,可列出它们的加乘表。我们称为Zm为剩余类环(或同余类环)
4.定理部分
- Format定理
- Euler定理(欧拉定理)
- 中国剩余定理
六.公钥密码学
公钥密码又称为双钥密码、非对称密码
1.RSA公钥算法
大家可以看我写的一篇博客RSA算法仿真模拟
实验步骤如下:
看不懂的话,我把这些步骤用个例子实例化:
- 选择两个大素数p和q。假设选择的素数为p=11和q=17。
- 计算n=p*q,得到n=187。
- 计算欧拉函数φ(n)=(p-1)(q-1),得到φ(n)=160。
- 选择一个与φ(n)互质的正整数e。通常可以选择65537作为公钥指数e。
- 计算e模φ(n)的逆元d,即d*e ≡ 1 mod φ(n)。这里可以使用扩展欧几里得算法计算,得到d=7937。
- 公钥为(n,e)=(187,65537),私钥为d=7937。
- 将明文"abcdefg"转换为数字形式,例如使用ASCII码转换,得到数字序列a=97, b=98, c=99, d=100, e=101, f=102, g=103。
- 对于每一个数字ai,使用公钥进行加密。加密过程为ci = ai^e mod n。
- 得到密文序列c={423, 130, 58, 66, 108, 61, 133}。
- 将密文序列c发送给接收者。
- 接收者使用私钥对密文进行解密。对于每一个密文ci,使用私钥进行解密。解密过程为ai = ci^d mod n。
- 得到原始数字序列a={97, 98, 99, 100, 101, 102, 103},即明文"abcdefg"。
2.攻击RSA
1.因素分解攻击
现在有许多种因数分解算法,但是没有一种可以分解带有多项式时间复杂度的大整数。为了安全,目前的RSA要求n必须大于300个十进制数位,这就是说模必须最小是1024比特。即使运用现在最大最快的计算机,分解这么大的整数所要花费的时间也是不可想象的。这就表明只要还没有发现更有效的因数分解算法,RSA就是安全的。
2.选择密文攻击
3.对加密指数的攻击
为了缩短加密时间,使用小的加密指数e是非常诱人的。普通的e值是e = 3(第二个素数)。不过有几种针对低加密指数的潜在攻击,在这里我们只作简单的讨论。这些攻击一般不会造成系统的崩溃,不过还是得进行预防。为了阻止这些类型的攻击,我们推荐使用 e=216+1=65537(或者一个接近这个值的素数)。
4.Coppersmith定理攻击
主低加密指数攻击称为Coppersmith定理攻击(Coppersmith theorem attack)。该项定理表明在一个e阶的mod n多项式f(x)中,如果有一个根小于n1/e,就可以运用一个复杂度为log n的算法求出这些根。这个定理可以应用于C = f (P) = P^e^ mod n的RSA密码系统。如果e = 3并且在明文当中只有三分之一的比特是未知的,那么这种算法可以求出明文中所有的比特。
5.广播攻击
如果一个实体使用相同的低加密指数给一个接收者的群发送相同的信息,就会发动广播攻击(broadcast attack)。例如,假设有如下的情节:Alice要使用相同的公共指数e = 3和模数n1、n2、n3给三个接收者发送相同的信息。 C1=P^3^ mod n1 ,C2=P^3^mod n2 ,C3=P^3^ mod n3对这些等式运用CRT,攻击者就可以求出形式为 C’=P^3^ mod n1 n2 n3的等式。这就表明P3 < n1 n2 n3 。也表明C’=P3是在规则算法中(不是模算法)。攻击者可以求出C’=P^1/3^ 的值。
6.相关信息攻击
相关信息攻击(related message attack)是由Franklin Reiter提出来的,下面我们就简单描述一下这种攻击。Alice用e = 3加密两个明文P1和P2,然后再把C1和C2发送给Bob。如果通过一个线性函数把P1和P2联系起来,那么攻击者就可以在一个可行的计算时间内恢复P1和P2。
7.短填充攻击
短填充攻击(short pad attack)是由Coppersmith提出来的,下面我们就简单描述一下这种攻击。Alice有一条信息M要发送给Bob。她先用r1对信息填充,加密的结果是得到了C1,并把C1发送给Bob。攻击者拦截C1并把它丢掉。Bob通知Alice他还没有收到信息,所以Alice就再次使用r2对信息填充,加密后发送给Bob。攻击者又拦截了这一信息。攻击者现在有C1和C2,并且她知道C1和C2都是属于相同明文的密文。Coppersmith证明如果r1和r2都是短的,攻击者也许就能恢复原信息M。
8.对解密指数发动攻击
可以对解密指数发动攻击的两种攻击方式:
暴露解密指数攻击(revealed decryption exponent attack)
暴露解密指数攻击 如果攻击者可以求出解密指数d,她就可以对当前加密的信息进行解密。不过,到这里攻击并还没有停止。如果攻击者知道d的值,她就可以运用概率算法(这里不讨论)来对n进行因数分解,并求出p和q值。因此,如果Bob只改变了泄露解密指数但是保持模n相同,因为攻击者有n的因数分解,所以她就可以对未来的信息进行解密。这就是说,如果Bob发现解密指数已经泄露,他就要有新的p和q的值还要计算出n,并创建所有新的公钥和私钥。
低解密指数攻击(low decryption exponent attack)。
Bob也许会想到,运用一个小的私钥d就会加快解密的过程。 Wiener表示如果d<(1/3)n^1/4^ ,一种基于连分数(一个数论当中的问题)的特殊攻击类型就可以危害RSA的安全。要发生这样的事情,必须要有q < p < 2q。如果这两种情况存在,攻击者就可以在多项式时间中分解n。在RSA中,我们推荐用d>=(1/3)n^1/4^ 来防止低加密指数攻击。
9.明文攻击
攻击者已经知道了有关明文的一些内容。这一特征也许就会引起一些针对明文的攻击。在这一部分中我们提到三种攻击:短信息攻击、循环攻击和公开攻击。
短信息攻击(short message attack) 在短信息攻击中,如果攻击者知道可能的明文组,那么她除了知道明文是密文的转换之外,还知道一些别的信息。攻击者可以对所有可能的信息进行加密,直到结果和所拦截的信息相同。例如,如果知道Alice正在发送一个4位数的数字,攻击者就可以轻易地试验0000~9999的明文数字,来发现明文。为此,短信息必须要在开头和结尾用随机比特进行填充,来阻止这类攻击。循环攻击(cycling attack) 循环攻击是基于这样一个事实,那就是密文是明文的一个置换,密文的连续加密最终结果就是明文。也就是说,如果对所拦截的密文C连续加密,攻击者最终就得到了明文。不过,攻击者不知道明文究竟是什么,所以她就不知道什么时候要停止加密。她就要往前多走一步。这样如果她再次得到了密文C,她只要返回一步就得到了明文。
公开信息攻击(unconcealed message attack) 是一种基于明文和密文之间置换关系的攻击。一则公开信息就是自身加密(不被隐藏)的信息。已经证明总有一些信息是自身加密的。因为通常加密指数是一个奇数,有一些明文如P = 0和P = 1,都是自身加密的。如果加密指数是仔细选出来的,那就会有更多的这种信息被忽略。如果算出来的密文和明文相同,加密程序总要在提交密文之前阻止并拒绝明文。
10.对模的攻击
11.执行攻击
前面所述的攻击都基于RSA的基本的结构,有几种针对RSA执行的攻击。时序攻击和能量攻击。
时序攻击(timing attack) Paul Kocher精密地论证了这种纯密文攻击,我们称为时序攻击。这种攻击基于快速指数算法(前面讨论过)。如果私密指数d中的相关比特是0的话,这种算法只应用平方;如果相关的位是1,这种算法就既应用平方也应用乘法。也就是说,如果相关的比特是1,完成每一个迭代需要的时序会更长。这种时序上的不同就可以使攻击者逐一找出d中的比特值。有两种方法可以阻止时序攻击:(1) 把随机延迟加到指数上使每一个指数所消耗的时间相同。(2) Rivest引入了盲签名(blinding)。这个概念就是在解密前用一个随机数乘以密文。
能量攻击(power attack) 能量攻击和时序攻击相似。Kocher表示,如果攻击者能够准确测量出解密过程中所消耗的能量,她就可以发动一个基于时序攻击原则的能量攻击。涉及乘法和平方的迭代所消耗的能量要比只涉及平方的迭代多。可以用来避免时序攻击的同类技术也可以用来阻止能量攻击。
好了,到这里,你应该不仅对密码学,同时对物联网信息安全有了一些了解。尤其是本文的几种加密算法需要掌握哦!