加解密、PKI与CA基础
介绍
这门知识如果以前尝过的各位想必都知道:枯燥无比!因此在文中我会尽量讲的生动些,举一些例子,并试图以一个完整的例子来贯穿整个讲述过程。
今年又恰逢莎翁逝世400周年,一方面也为了纪念这位伟大的作家、戏曲家因此我引用了莎翁中“哈姆雷特”的例子。
加解密的历史起源
公元前400年,古希腊人发明了置换密码。
加密领域源于Julius Caesar 和罗马帝国。Caesar用一简单的加密方法(如图),来跟他的将军们联系。Caesar的方法只是简单地将正文的每个字母移动一个固定的偏移量(在这个例子中是12)。例如,“A”变成“M”,“B”变成“N”,如此等等。
考察Caesar的加密方法,我们会发现两个内容:加密算法和密钥。加密算法是用来改变原始数据的方法。在这个例子中“字母移位”就是加密算法。密钥是使加密过程得出一个唯一结果的变量。这个例子中密钥是12。用一个不同的密钥,将得到一个不同的结果。
在我们的简单的加密例子中,你可能可以看到,当Caesar为他的将军加密了一个消息后,这个将军将用同样的密钥来解密这则消息。
二战时的恩尼格玛机
恩尼格玛密码机是一种用于加密与解密的密码机。德语是Enigma,又译为哑谜机或谜
恩尼格玛密码机最早由德国发明家亚瑟·谢尔比乌斯和理查德·里特发明的。最早用于商业,也被军队和政府采用,最著名的就是第二次世界大战的纳粹德国
1、发信人首先要调节三个转子的方向,三个转子的初始方向就 是密钥,收发双方必须事先约定好。
2、然后依次用键盘键入明文,经过一系列过程显示器上会有相 应的字母发亮,并把闪亮的字母依次记下来,就是密文。
3、然后就可以把加密后的消息用比如电报的方式发送出去。
4、当收信方收到电文后,使用一台相同的ENIGMA,按照原来的约定,把转子的方向调整到和发信方相同的初始方向上。
5、然后依次键入收到的密文,并把闪亮的字母依次记下来,就得到了明文。
对称加密-DES
DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。1977年美国联邦信息处理标准中使用的一种对称密码技术,曾今被美国和其他国家政府银行使用。不过现在已被暴力破解,我们除了用它解密以前的密文外,已不再使用DES了。
1997年1月28日,美国的RSA数据安全公司在RSA安全年会上公布了一项“秘密密钥挑战”(Secret-KeyChallange)竞赛,分别悬赏$1000、$5000、$10000用于攻破不同密钥长度的RC5密码算法,同时还悬赏$10000破密钥长度为56bits的DES算法。
加密明文的密钥是随机选取的,明文和密钥都被严格保密,只向挑战者们公布密文和所用的初始化向量。解出的密钥以E-Mail的方式迅速报告给RSA公司,第一个解出密钥的人即成为相应挑战赛的胜利者。加利福尼亚大学伯克利分校的研究生IanGoldberg用大约250台工作站组成的网络,只用了3.5小时就攻破了40位的RC5算法。在瑞士建立的一个欧洲小组使用了遍及欧洲的3,500台机器,13天时间攻破48位密码。Brewer预计在类似的环境中攻破一个56位的密码需要大约22年。
为什么要加密
来看一个实际的例子吧,在莎翁的戏剧《王子复仇记中》
国王克劳狄斯觉察罪行败露,借哈姆莱特错杀御前大臣波洛涅斯之事,假惺星地送去英国避难,却在国书中威逼英国国王见到哈姆莱特后立刻将其枭首。
狡诈的克劳狄斯要哈姆雷特由两个大臣陪同坐船到英国去,以避免所谓的处分。当时的英国是向北欧强国丹麦纳贡的属国,所以克劳狄斯给英国朝廷写了封信,编造了一些理由,要他们把哈姆雷特处死。聪明的哈姆雷特怀疑这里面肯定有名堂,于是在夜里偷偷从那两个大臣处拿到那封信,巧妙地把自己的名字擦掉,而换上那两个大臣的名字。不久,座船受到海盗的袭击,哈姆雷特勇敢地拿着剑杀上了敌人的船,不料他自己的座船却怯懦地溜之大吉了。那两个大臣把他丢下,带着改过的信件急急忙忙跑到英国去却被英国国王杀死!
60年代美国核弹密码事故
对于拥有地球上最大核武库的美国来说,核密码一向是白宫的最高机密。早在1962年,时任美国总统肯尼迪就下令在所有的核导弹上启用核密码系统,然而让人惊诧的是,在之后的15年时间里,这个核密码竟然是“00000000”……
对于足以掀起第三次世界大战的美国核武器而言,密码一向是最高的机密。然而令人瞠目结舌的是,在核密码系统启动初期的近15年时间里,陆基核导弹的发射密码竟然只是极其简单、极易被破解的“00000000”。
加密的必要性
- 如果一个算法的机制必须保密,那么,这意味着这个算法有弱点。一个好的加密算法只依赖于它的密钥。也就是说,发现一个好加密算法的机制并不能显著提高一个黑客的攻击力。
- 个加密算法想要得到采纳,它必须被广泛传播,以便于让公众来仔细审查。经过许多的“加密专家”的无数次彻底审查,如果没有发现缺陷,这个算法将开始被接受。
加密不代表绝对的安全
- 增加攻击成本
- 延长攻击时间
作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分解出公约数,从而打破了RSA算法的基础(即假设我们不能很有效的分解一个已知的整数)。同时,秀尔算法展示了因数分解这问题在量子计算机上可以很有效率的解决,所以一个足够大的量子计算机可以破解RSA。
量子计算机D-Wave 2,如果你有一千五百万美元闲钱,那你可以买一部回家玩玩。
常用加密-对称加密
对称加密的主要好处是速度。由于它的高速,它非常适合于海量数据的加密。随着加密/数字签名工业的发展,要求的密钥长度持续增长。例如,40bit的密钥在几年前还能为大家接受,但现在已经证明这样长度的密钥能在非常短的时间内破解。现在的密钥一般必须在80到128bit之间。
对称加密在哈姆雷特的例子中
哈姆雷特在信臣晚上睡觉时,拿到钥匙和密文后重新写下一段明文,然后再用同样的钥匙把“在见到克劳狄斯的信臣后把这两个信臣杀死”这段明文加密后让信臣带着去见英国国王!
对称加密中的密钥传输
克劳狄斯也可以事先先把密钥单独让一个信臣先送给英国国王
然后仅把密文让信臣伴随着哈姆雷特去见国王,这样以防止哈姆雷特在中间篡改密文
但是:
哈姆雷特也可以事先通过“威逼利诱”,或者是派自己的亲信半途截杀送密钥的特使等方法得到密钥
常用加密-非对称加密(RSA)
1976年以前,所有的加密方法都是同一种模式:对称加密
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。
这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
非对称加密(RSA)算法的特点
倒过来私钥加密、公钥解密?对吗?可以但不对?应该严格意义上説成私钥签名、公钥认证!
非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被提出来的。在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。公钥密码体制的算法中最著名的代表是RSA系统,此外还有:背包密码、McEliece密码、Diffe_Hellman、Rabin、零知识证明、椭圆曲线、EIGamal算法等。
非对称密码体制的优点在于:首先,在多人之间进行保密信息传输所需的密钥组和数量很小;第二,密钥的发布不成问题;第三,公开密钥系统可实现数字签名。缺点:公开密钥加密比私有密钥加密在加密/解密时的速度慢。
从上述对对称密钥算法和非对称密钥算法的描述中可看出,对称密钥加解密使用的同一个密钥,或者能从加密密钥很容易推出解密密钥;②对称密钥算法具有加密处理简单,加解密速度快,密钥较短,发展历史悠久等特点,非对称密钥算法具有加解密速度慢的特点,密钥尺寸大,发展历史较短等特点。
RSA加密在哈姆雷特的例子中
然后仅把密文让信臣伴随着哈姆雷特去见国王
哈姆雷特通过半夜偷看,发觉是密文,就算他事先劫到了私钥,也只能解密得知信件事説的是一件什么事。
但这不等于哈姆雷特不能“篡改”,哈姆雷特完全可以把这纸原稿烧了,自己手写一封明文塞回克劳狄斯的信臣的信袋里。
而当英国国王通过克劳狄斯的信臣收到了明文后,明文上写的是“杀死送信的人”,那么英国国王也会毫不犹豫的杀掉信臣,因此这里面还有一个漏洞,即如何防止别人篡改密文?
通过加解密公式引出另一个“认证公式”
哈希函数
例如,如果我们有一个存放金融数据的文件,一个哈希函数必须对字母的相对位置相当敏感。如果$167被换成了$761,一个校验和函数会得出相同的结果。但是,一个哈希函数将会得到一个大大不同的结果。
下面的表给出了哈希函数(MD5)的不同输入和相应的哈希结果。正如你看到的,输入中一个微小的变化导致哈希结果产生巨大的变化。
尽管哈希函数一般不需要密钥,但根据需要,我们可以给我们的输入文件添加一个密钥来保护哈希结果的完整性。
MD5不可逆,王小云使用的是弱碰撞,即给定一个MD5算法,使得它可以产生碰撞,而对于强碰撞即通过给定MD5要知道它是来自于哪个序列,目前无解。所以MD5并未被破解。
哈希函数和公钥加密的结合(数字签名)
- 用户用自己的私钥对原始数据的哈希摘要进行加密
- 然后信息接收者使用信息发送者的公钥对附在原始信息后的数字签名进行解密后获得哈希摘要,并通过与用自己收到的原始数据产生的哈希摘要对照,便可确信原始信息是否被篡改,这样就保证了数据传输的不可否认性。
数字签名体制
1999年美国参议院已通过了立法,规定数字签名与手写签名的文件、邮件在美国具有同等的法律效力。
消息认证是保护通信双方之间不受第三方的攻击,但却无法防止通信双方中一方对另一方的欺骗。如A伪造一个消息并使用与B共享的密钥产生该消息的认证码,然后声称该消息来自于B,同样,B也可以对自己给A发送的消息予以否认。因此,除了认证之外还需要其他机制来防止通信双方的抵赖行为,最常见的是数字签名技术。