密码学概论-WEB安全社区-弘客官方【交流区】-弘客联盟

密码学概论

密码学概论

有很多同学可能看到密码学这个东西就会比较害怕,不要畏惧,密码学不用研究太多,这里我也只是说一个概论

 

 

我们把密钥记作k,D()为加密函数,E()为解密函数d为明文(也就是加密前的文字)e为密文(也就是加密后的文字)

所以我们可以得到几个等式D(k,d)=e  E(k,e)=d

所以我们如果需要通过密文得到明文,那么我们需要知道密钥和加密算法

 

密码学历史

1、 古典密码阶段(1949年前)

在这个阶段算法和秘钥都是保密的,秘钥空间较小,信息的安全性主要依赖于对于加密和解密算法的保密。

2、 对称密码阶段(1949-1975年)

在这之后就进入到了现代密码学的阶段,和古典密码阶段的主要区别在于这个阶段的加密和解密算法无需保密,信息的安全性主要依赖于对秘钥的保密。需要解决的主要问题是在不可信信道下的秘钥传输问题。

3、 公钥密码阶段(1976年-至今)

在公钥密码阶段,加密秘钥(公钥)可以公开,仅对解密秘钥(私钥)保密,基于一些数学难题保证很难通过公钥推出私钥。

我们今天将会给大家介绍几种常见的古典密码加密和解密的方式,当然这些密码也是比较出名的。

 

古典密码学

古典密码学的第一个就是凯撒密码

如果有专业学过密码学的应该会很有印象,凯撒密码就是密码学的第一个密码

我举一个例子abcd 加密后bcdf

这就是凯撒密码,说白了就是按照二十六字母向右位移一次,位移一次就是加密算法,密钥为1

向左位移就是解密算法

所以我们如果需要通过密文得到明文,那么我们需要知道密钥和加密算法

关于凯撒密码没什么特别好说的,需要记得的是最初的凯撒密码只适用于二十六位字母表,有些ctf中的凯撒加密过程的字符表使用的是ASCII字符表,

d2b5ca33bd172720

 

也就是这个玩意

栅栏密码

栅栏密码(Rail-fence Cipher)就是把要加密的明文分成N个一组,然后把每组的第1个字符组合,每组第2个字符组合…每组的第N(最后一个分组可能不足N个)个字符组合,最后把他们全部连接起来就是密文,这里以2栏栅栏加密为例。

明文:The quick brown fox jumps over the lazy dog

去空格:Thequickbrownfoxjumpsoverthelazydog

分组:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g

第一组:Teucbonojmsvrhlzdg

第二组:hqikrwfxupoeteayo

密文:Teucbonojmsvrhlzdghqikrwfxupoeteayo

摩斯密码

摩尔斯电码(英语:Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人艾尔菲德·维尔(Alfred Lewis Vail)与萨缪尔·摩尔斯(Samuel Finley Breese Morse)在1836年发明。摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用0和1两种状态的二进制代码,它的代码包括五种:

1.点(.)

2.划(-)

3.每个字符间短的停顿(在点和划之间的停顿)

4.每个词之间中等的停顿

5.以及句子之间长的停顿

摩尔斯电码字母与数字对应表:

d2b5ca33bd172805

 

对称加密算法

DES 全称 Data Encryption Standard,是一种使用密钥加密的块算法。现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破 DES 密码的报道了。尽管如此,该加密算法还是运用非常普遍,是一种标准的加密算法,3DES 是 DES 的加强版本。

DES 加密算法出自 IBM 的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为 DES 使用56位密钥(密钥长度越长越安全),以现代计算能力24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用 DES 加密算法。

DES 标准密钥就是56位,8个字符即8个字节,每个字节的最高位不用,即每个字节只用7位,8个字符正好是56位。

 

3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

3DES(即Triple DES)是 DES 向 AES 过渡的加密算法,它使用3条56位的密钥对数据进行三次加密,是 DES 的一个更安全的变形。它以 DES 为基本模块,通过组合分组方法设计出分组加密算法。比起最初的 DES,AES 更为安全。

3DES说的直接一点就是使用两个密钥执行三次加密得到的密文

D(K1,D(K2,D(K1,e)))=d

这就是将3DES加密算法的展开形式,这里我没有说具体是如何计算的,因为我没有在这个论坛里面提到过高等数学,如果要说明白具体是如何计算的,那么我得写几个晚上,读者也得读几个晚上

关于对称加密算法还有AES算法

上面讲了 DES 加密算法、3DES 加密算法等,但是因为 AES 加密算法的安全性要高于 DES 和 3DES,所以 AES 已经成为了主要的对称加密算法。AES 加密算法就是众多对称加密算法中的一种,它的英文全称是 Advanced Encryption Standard,翻译过来是高级加密标准,它是用来替代之前的 DES 加密算法的。AES 加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,一共有四种加密模式,我们通常采用需要初始向量 IV 的 CBC 模式,初始向量的长度也是128位16个字节。

AES 一共有四种加密模式,分别是 ECB(电子密码本模式)、CBC(密码分组链接模式)、CFB、OFB,我们一般使用的是 CBC 模式。四种模式中除了 ECB 相对不安全之外,其它三种模式的区别并没有那么大(ECB 模式是最基本的加密模式,即仅仅使用明文和密钥来加密数据,相同的明文块会被加密成相同的密文块,这样明文和密文的结构将是完全一样的,就会更容易被破解,相对来说不是那么安全,因此很少使用,而 CBC 模式则比 ECB 模式多了一个初始向量 IV,加密的时候,第一个明文块会首先和初始向量 IV 做异或操作,然后再经过密钥加密,然后第一个密文块又会作为第二个明文块的加密向量来异或,依次类推下去,这样相同的明文块加密出的密文块就是不同的,明文的结构和密文的结构也将是不同的,因此更加安全,我们常用的就是 CBC 加密模式)。

AES 要求密钥的长度可以是128位16个字节、192位或者256位,位数越高,加密强度自然越大,但是加密的效率自然会低一些,因此要做好衡量。我们开发通常采用128位16个字节的密钥,我们使用 AES 加密时需要主动提供密钥,而且只需要提供一个密钥就够了,每段数据加密使用的都是这一个密钥,密钥来源为随机生成(我们开发时传入的那个为初始密钥,除了初始密钥以外,后面每一轮的密钥都是由上一轮的密钥扩展而来的,密钥扩展有四个步骤:排列、置换、与轮常量异或、生成下一轮密钥的其他列)。

 

公钥加密算法

非对称加密算法的特点就是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密;用公钥加密的明文,只能用私钥解密。

首先复习一下数学上的几个基本概念,它们在后面的介绍中要用到:

一、 什么是“素数”?

  素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。素数也称为“质数”。

 

二、什么是“互质数”(或“互素数”)?

  小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。

  判别方法主要有以下几种(不限于此):

(1)两个质数一定是互质数。例如,2与7、13与19。

(2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。

(3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。

(4)相邻的两个自然数是互质数。如 15与 16。

(5)相邻的两个奇数是互质数。如 49与 51。

(6)大数是质数的两个数是互质数。如97与88。

(7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。

(8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。

 

三、什么是模指数运算?

  指数运算谁都懂,不必说了,先说说模运算。模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。

模指数运算就是先做指数运算,取其结果再做模运算。如(5^3) mod 7 = (125 mod 7) = 6。

 

下面我们来说RSA算法非对称加密算法我也只准备说RSA算法

公钥KU  n:两素数p和q的乘积(p和q必须保密)(n为模值)

e:与(p-1)*(q-1)互质(e称为公钥指数)

私钥KR  n:两素数p和q的乘积(p和q必须保密)(n为模值)

d:满足(d*e) mod ((p-1)*(q-1)) = 1(d称为私钥指数)

加密过程 C=M^e mod n  (C为密文)

解密过程 M=C^d mod n  (M为明文)

其中,符号^表示数学上的指数运算;mod表示模运算,即相除取余数。具体算法步骤如下:

(1)选择一对不同的、足够大的素数p,q。

(2)计算n=p*q。

(3)计算f(n)=(p-1)*(q-1),同时对p, q严加保密,不让任何人知道。

(4)找一个与f(n)互质的数e作为公钥指数,且1<e<f(n)。

(5)计算私钥指数d,使得d满足(d*e) mod f(n) = 1

(6)公钥KU=(e,n),私钥KR=(d,n)。

(7)加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适当的组,然后再进行交换。设密文为C,则加密过程为:C=M^e mod n。

(8)解密过程为:M=C^d mod n。

RSA的安全性

首先,我们来探讨为什么RSA密码难于破解?

   在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:(d*e) mod ((p-1)*(q-1)) = 1,我们可以看出,密码破解的实质问题是:从p*q的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。

   当p和q是一个大素数的时候,从它们的积p*q去分解因子p和q,这是一个公认的数学难题。比如当p*q大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。

缺点1:虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。

缺点2:从上边可以看出,同样安全级别的加密算法,RSA需要更长的密钥。这就使运算速度较慢,较对称密码算法慢几个数量级。且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。

缺点3:RSA产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。

因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。实际应用中一般用来加密对称算法的密钥,而密文多用对称加密算法加密传输。

RSA算法密钥长度的选择是安全性和程序性能平衡的结果,密钥长度越长,安全性越好,加密解密所需时间越长。实际中常使用1024bit秘钥和2048bit秘钥,分别称为RSA1024和RSA2048。秘钥包含公钥和私钥,即公钥私钥长度一样,都是1024bit或2048bit。RSA几个特性如下:

 

1.密钥长度增长一倍,公钥操作所需时间增加约4倍,私钥操作所需时间增加约8倍,公私钥生成时间约增长16倍。

 

  1. 一次能加密的密文长度与密钥长度成正比, len_in_byte(raw_data) = len_in_bit(key)/8 -11,如1024bit的密钥,一次能加密的内容长度为 1024/8 -11 = 117 byte。所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。

 

  1. 加密后密文的长度为密钥的长度,如密钥长度为1024bit(128Byte),最后生成的密文固定为 1024bit(128Byte)。

 

 

附录

密码学远不止于这些,这些只能说是我把一些常见的密码说了一下而已,密码学可以说在网络安全的用处很大的,当然公钥加密算法是基于非对称加密算法的,关于密码学还有hash值是我们没有说过的,hash值我想在这里说,或许会让人不能一次性读完吧,关于下期,我们会再回头说一下非对称加密算法的DSA,公钥加密体制现在很大程度上用于认证,例如ssl证书,之前我们在应用层的网络协议上说到过,这里不再说太多,密码学属于网络安全的一个分支学科吧,可以不用特别熟练每一个密码算法,但是都会略微了解这个,网络安全不在于精,在于广,精也只需要精于漏洞挖掘能力而已

请登录后发表评论

    没有回复内容