学习笔记 1 --密码学入门
密码学是研究编制密码和破译密码的技术科学。最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。
密码算法是用于加密和解密的数学函数,密码算法是密码协议的基础。现行的密码算法主要包括序列密码、分组密码、公钥密码、散列函数等,用于保证信息的安全,提供鉴别、完整性、抗抵赖等服务。
计算机安全研究所(Computer Security Institute)报告说,在2007年,接受调查的公司中有71%的公司对传输中的某些数据使用了加密,而53%的公司对存储的某些数据使用了加密。加密可用于保护“静止”数据,例如存储在计算机和存储设备(例如USB闪存驱动器)上的信息)。近年来,有许多关于机密数据的报告,例如客户的个人记录,由于笔记本电脑或备用驱动器的丢失或被盗而暴露;如果物理安全措施失败,则对此类静态文件进行加密有助于保护它们。
常用的密码学技术有:
1.对称加密(Sysmmetric Cryptography)
2.非对称加密(Public-Key Cryptography,Asymmetric Cryptography)
3.单项序列(One-Way Hash Function)
4.消息认证(MAC,Message Authentication Code)
5.数字签名(Digital certificates)
不同应用场景
场景 | 技术 | 特征 |
---|---|---|
防窃听 | 对称加密/非对称加密 | 保密性 |
防篡改 | 单项序列,消息认证码,数字签名 | 完整性 |
防伪装 | 身份认证 ,消息认证,数字签名 | 唯一性 |
防否认 | 数字签名 | 不可否认 |
对称算法有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加/解密密钥是相同的。这些算法也叫秘密密钥算法或单密钥算法,它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。
对称密码最常用,效率高。
DES 算法是把64bit明文加密成64bit密文的算法,密钥长度56bit。以 64 bits 明文为一个单位(每隔 7 bits 会有一个 校验码checksum bit,因此实际有效为 56 bits),分组对明文进行加密的,是一种分组密码(Block Cipher)算法。
DES 算法原理是通过一个称为 Feistel 网络(Feistel网络还在其他算法中也有用到),加密的每个步骤称为轮,整个加密过程是若干轮次的循环,因为XOR的数学特性(相同的数字XOR恒为0),加密解密可以用相同的结构实现,解密过程就是用一样的密钥逆向操作相同轮次就可以获得明文。
具体DES算法参看:学习笔记–DES算法概述
已被破解
为了增加DES的强度,将DES重复三次所得到的一种密码算法,也称作3DES。三重DES并不是加密三次,而是加密解密加密的过程,当三次DES的密钥相同时,就是普通的DES,对DES有向下兼容性;如果是三次密钥都不一样,就是成为DES-DES3;如果两次加密密钥一样,解密密钥不一样,就是DES-DES2.
计算性能不高,暂时未被破解
AES 是于 2000 年被采用的最新的对称加密标准,采用了 Rijndael 算法,Rijndael 算法也是一种分组算法,分组长度固定为128bit,密钥长度规定为 128 bits,192 bits, 256 bits 三种规格, 没有采用Feistel网络,采用的是SPN网络.
Rijindael算法原理
加密:
1.Subbytes逐字节替换
2.Shiftrows行平移
3.Mixcolumns混合列
4.AddRoundKey与轮密钥进行XOR
解密: 相反顺序进行
Rijindael 算法,输入的所有比特都被加密,和每一轮只加密一般输入比特的Feistel相比,加密轮数比较少,可以分别以字节,行,列为单位进行运算.
可自由免费使用,安全、快速,暂未被破解, 推荐使用。
使用一个密码空间巨大的对称密码,目前基本上可以保证安全,但是需要解决的是密钥的安全传输和存储问题,为了解决密钥配送问题,我们需要用到公钥密码.
密钥分为加密密钥和解密密钥两种.公钥和私钥都是一一对应的,成为密钥对.虽然公钥密码解决了密钥配送问题,但是却存在公钥认证问题.
假设以12为模
加法: 7 + 20 = 3 7+20=3 7+20=3
减法: 8 − 7 = 8 + 5 = 1 8-7=8+5=1 8−7=8+5=1
乘法: 7 ∗ 4 = 28 = 4 7*4=28=4 7∗4=28=4
除法: 1 / 7 1/7 1/7即 7 ∗ ( ) = 1 7*()=1 7∗()=1等于7
乘方: 7 4 = 2401 = 1 7^4=2401=1 74=2401=1
对数:乘方的逆运算 log 7 8 \log_78 log78即 7 x = 8 7^x=8 7x=8所以 x = 8 x=8 x=8
模的除法需要注意的是:例如在12 为mod的世界里,在0-11的数字中,只要一个数和12 互质, 总有一对数模乘为1,即总存在一对互为倒数的数,所以一个公钥总可以对应一个私钥.
加 密 : 密 文 = 明 文 E m o d N 解 密 : 明 文 = 密 文 D m o d N 加密: 密文=明文^EmodN \\ 解密: 明文=密文^DmodN 加密:密文=明文EmodN解密:明文=密文DmodN
RSA的密文对明文的E次方求modN的结果.余数即是密文.
公钥:E和N的组合,有了E和N就可完成加密.
私钥:D和N的组合,有了D和N就可完成解密.
生成密钥对
在mod运算中得知,只要存在E,必存在D. 只要数D满足该条件,就可以通过D和N解密E和N加密的密文.
对于攻击者而言:
已知:密文,公钥E和N
未知:明文,私钥D,p,q,L
如果攻击者想要破解就必须获得D,但是想要获得D必须知道和D互质的L,想要得到L必须给N做指数分解得到两个指数p和q.
如果是暴力破解,随着D长度的变大,暴力破解难度指数增长;现在RSA算法中用的p和q都是1024bit,N长度则在2048bit,E和D也和N是一个数量级,所以破解难度巨大.
如果是指数分解攻击,目前还没有高效的质因数分解的算法,所以RSA还是安全的.
如果是推测p和q进行破解,因为p和q是随机数生成器产生的质数,所以随机数生成器的安全性决定了RSA的保密性.
绝大多数公钥算法都是建立在数学难题的基础上实现的,RSA算法是利用大数的质数分解设计.
EIGamal方式
利用mod N 下离散对数的困难度,但是密文长度会是明文的两倍.
Rabin方式
利用mod N下求平方根的困难度, 与质因数分解难度相当.
椭圆曲线方式
经椭圆曲线上的特定点进行特殊的乘法运算来实现的,利用了乘法运算的逆运算非常困难来实现.特点是密钥长度比RSA要短.
格密码的方式
某种程度上,格可以理解成系数为整数的向量空间. 格是n维线性空间中离散点的集合,格中的每个元素都是一个向量。在n维线性空间中m(m≤n)个线性无关的向量(b1,b2,…,bm)所生成的向量集合称为格。向量组(b1,b2,…,bm)称为格的一组基;格的基中的向量个数称为格的维数;同一个格可以有多组不同的基,但是基的维数相同。
L = { a 1 v 1 + a 1 v 1 + a 1 v 1 + . . . + a 1 v 1 + a 1 v 1 + . . . , a n ∈ Z } L= \{ a_1v_1+ a_1v_1+ a_1v_1+...+ a_1v_1+ a_1v_1+..., a_n\in Z \} L={a1v1+a1v1+a1v1+...+a1v1+a1v1+...,an∈Z}
格密码的主要数学基础是格中的两个困难问题:
(1)格的最短矢量问题(SVP):对于给定的一组基,找出其所生成的格中欧氏距离(两点之间的距离)最小的非零向量。
即在格上找到一个非零向量v,满足对格上的任意非零向量u,均有||v||≤||u||。
(2)格的最近矢量问题(CVP):对于给定的格及任一向量,找出格中与该向量距离最近的向量。
即在格上找到一个向量v,满足对格上的任意非零向量u,均有||v-y||≤||u-y||。
格上的困难问题在代数上是很好解决的,但在几何上是困难的.
基于格难题的密码可用于后量子密码算法.
安全性挑战
Shor量子分解算法利用量子计算的并行性,可对大数进行快速分解,大大降低RS算法的破解时间,以及基于离散对数的量子求解算法.
效率挑战
随着传统RSA密钥长度的增加,使用传统公钥密码的效率降低.椭圆曲线算法虽然密钥较短,但是在椭圆曲线加法群上所进行的操作依然很复杂.
不同密码算法的强度不能直接通过密钥长度对比.但是在强度相对均衡的情况下:
并且,公钥密码的处理速度只有对称密码的几百分之一.所以公钥密码不适合对很长的消息进行加密.而且无论公钥算法的N有多长,总有一天会被质因数分解所破解.但是短期内,RSA-2048不会被破解.
对称加密和公钥密码二者都有各自优缺点:
对称密码:效率高但是存在密钥配送和保存问题.
公钥密码:处理速度慢,无法防止中间人攻击
防止中间人攻击需要验证公钥的正确性,即认证
混合密码系统:将对称密码和公钥密码相结合.
混合密码系统机制:
本篇文章主要总结了密码学的大致要点,以及主要的对称密码和公钥密码算法以及原理.
[1] 图解密码技术(第三版)
[2] 简书:Kerwong,密码学入了个门,总结一下
[3] CSDN:中科院大学网安学院五班,格密码学习笔记(一)