密码学概述(2)
/** 好东西大家共享 **/
前面我们已经大致了解了公钥体系的算法,问题是,具体的加密是如何实现的呢?下面我们先简单的看看如何实现加密,再通过一个实例来进行详细说明。
我们知道,公钥体制中是有一对密码的,给别人用的就叫公钥,给自己用的就叫私钥,这两个可以互相并且只有为对方加解密的份儿,用公钥加密后的东东,只有私钥能解。连它自己也没有办法解掉,同样,用私钥加密的东东,只有公钥能解。如下图:
下面我们来看一个示例:
首先我们把上一节的RSA算法排列成下面的步骤:
①选择两个大质数户和p和q,每个都大于10100;
②计算n =p*q和z= (p一1)*(q一1);
③选择一个与z 有关的质数,令其为d ;
④找到一个e使满足e*d=1(模z)。 d保密。
事先计算好这些参数,我们就可以准备加密了。将明码(当作位串看待)划分成块,使得每个明码报文P落在0<P<n之间,这可以通过将明码分成每块有k位的组来实现,并且屋是使得zk<n成立的最大整数。
加密一个报文P,计算C=Pe(模n) 。解密C,计算P=Cd(模n)。可以证明,在确定的范围内,加密和解密函数是互逆的。为实现加密你需要e和n。为实现解密你需要d和n。所以公钥由(e,n)组成,私钥由(d,n)或只是d组成。现在我们就来看这个简单的例子。我们选择了p=3,q=11,则n=33,g=20。d的一个适合的值是d=7,因为7和20没有公共因子。选定这些值后,e可以通过求解式7e=1(模20)得出,即e=3。明码报文P的一个密码C,则由C=P3(模33)将密文解密。图中给出明码“SUZANNE”的加密作为例子。
因为我们的质数选择得很小,所以P必须小于33,因此,每个明码块只能包含一个字符。结果形成了一个单一字母表代换密码。
明文
密文
解密
字母
序号
P3
P3(MOD 33)
C7
C7(MOD 33)
字母
S
U
Z
A
N
N
E
19
21
26
01
14
14
05
6859
9261
17576
1
2744
2744
125
28
21
20
1
5
5
26
13492928512
1801088541
128000000
1
78125
78125
8031810176
19
21
26
1
14
14
5
S
U
Z
A
N
N
E
OK,现在大家应该对加密和解密的过程非常的明了了吧?那现在我们就来看下一种算法了!
消息摘要算法(HASH算法):处理加密传输问题时,不可避免地要碰到“消息摘要”。消息摘要是指采用一种加密保护的(即不易破坏)单向散列算法将PGP中的一个消息的某一部分进行换算。所谓单向散列算法,就是你无法从算法的输出推算出它的输入。在消息摘要算法中,文件数据作为单向散列运算的输入,这个输入通过HASH函数产生一个哈希值。如果有人改动了文件,哈希值就会相应地改变,接收者即能检测到这种改动过的痕迹。从理论上来讲,攻击者不可能制造一个替用的消息来产生一个完全相同的消息摘要。更深一步,密钥可以加密消息摘要形成数字签名。
消息摘要使用几种有着些许差别的算法。其中两种最普遍、最流行的消息摘要方式是:
RSA一MD2和 RsA一MD5。 一个消息摘要是一个加密校验和,不像CRC是一个算术校验和。下面我们来看一看MD5的算法原理: MD5算法是对杂凑压缩信息块按512位进行处理的,首先
它对杂凑信息进行填充,使信息的长度等于512的倍数。填充方法是首先在压缩信息后填充以字节长的信息长度,然后再用首位为1,后面全为0的填充信息填充,使经过填充后的信息长度为512的倍数,然后对信息依次每次处理512位,每次进行4轮,每轮16步总共64步的信息变换处理,每次输出结果为128位,然后把前一次的输出作为下一次信息变换的输入初始值(第一次初始值算法已经固定),这样最后输出一个128b位的杂凑结果。目前MD5被认为是最安全的杂凑算法之一,现已经在很多应用中被当成标准使用。
好了,我看今天就到这里,不瞒你说,这个又复杂又长的几个算法讲的我瞌睡都来了,所以放学回家睡觉吧。