当前位置: 首页 > news >正文

加解密、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加密算法是Ron Rivest、Adi Shamir和Leonard Adleman提出的一种公开密钥加密算法,使用一对公钥和私钥(依靠大质数生成)对信息加密,常被用于数字签名。 RSA算法的破解与密钥的长度有关,最常见的破解方法是因式分解,如果密钥的长度小于等于256位,一台较快的电脑可以在几个小时内成功分解其因子。位数越高因式分解所需时间也越长。1999年,一台Cray超级电脑用了5个月时间分解了512位长的密钥。而目前典型密钥长度是1028位。在512位RSA算法破解10年之后,一群研究人员报告(PDF)他们因式分解了768位RSA算法。他们是在2009年12月9日分解了768位、232数位数字的RSA-768密钥。分解一个768位RSA密钥所需时间是512位的数千倍,而1024位所需时间则是768位的一千多倍,因此在短时间内1024位仍然是安全的。研究人员表示1024位密钥预计也将会在10年内攻破,因此在未来三到四年内应逐步淘汰1024位RSA密钥。


作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分解出公约数,从而打破了RSA算法的基础(即假设我们不能很有效的分解一个已知的整数)。同时,秀尔算法展示了因数分解这问题在量子计算机上可以很有效率的解决,所以一个足够大的量子计算机可以破解RSA。


量子计算机D-Wave 2,如果你有一千五百万美元闲钱,那你可以买一部回家玩玩。

常用加密-对称加密




Caesar的方法是一个粗糙的对称加密的例子。一个对称算法用相同的钥匙来加密和解密信息。尽管密钥的长度根据实际应用的算法可以变化,但它们一般在40到128比特中变化。被加密的数据一般是文本或消息,但也可以是任何形式的数据。

对称加密的主要好处是速度。由于它的高速,它非常适合于海量数据的加密。随着加密/数字签名工业的发展,要求的密钥长度持续增长。例如,40bit的密钥在几年前还能为大家接受,但现在已经证明这样长度的密钥能在非常短的时间内破解。现在的密钥一般必须在80到128bit之间。


对称加密在哈姆雷特的例子中



克劳狄斯把“见到哈姆雷特后杀杀他并把人头割下寄回!”加密成密文,并把钥匙和密文一起交由信臣,由信臣带着哈姆雷特、密文、钥匙一起去英国见英国国王。
哈姆雷特在信臣晚上睡觉时,拿到钥匙和密文后重新写下一段明文,然后再用同样的钥匙把“在见到克劳狄斯的信臣后把这两个信臣杀死”这段明文加密后让信臣带着去见英国国王!


对称加密中的密钥传输




克劳狄斯也可以事先先把密钥单独让一个信臣先送给英国国王

然后仅把密文让信臣伴随着哈姆雷特去见国王,这样以防止哈姆雷特在中间篡改密文

但是:

哈姆雷特也可以事先通过“威逼利诱”,或者是派自己的亲信半途截杀送密钥的特使等方法得到密钥



常用加密-非对称加密(RSA)




发明者 :    Ron Rivest、Adi Shamir、Leonard Adleman
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加密在哈姆雷特的例子中




克劳狄斯生成一对密钥,并使用公钥加密,并事先先把密钥单独让一个信臣先送给英国国王


然后仅把密文让信臣伴随着哈姆雷特去见国王


哈姆雷特通过半夜偷看,发觉是密文,就算他事先劫到了私钥,也只能解密得知信件事説的是一件什么事。


但这不等于哈姆雷特不能“篡改”,哈姆雷特完全可以把这纸原稿烧了,自己手写一封明文塞回克劳狄斯的信臣的信袋里。


而当英国国王通过克劳狄斯的信臣收到了明文后,明文上写的是“杀死送信的人”,那么英国国王也会毫不犹豫的杀掉信臣,因此这里面还有一个漏洞,即如何防止别人篡改密文?

通过加解密公式引出另一个“认证公式”




在讲解“认证”前,有必要提一下哈希函数 

哈希函数


一个哈希是一段数据的数学上的概要。它有一定的长度。它是数据的唯一的“数字指纹”。即使数据的一个bit变了,它的哈希码会发生巨大的变化。哈希函数的强度在于它是一个单向函数。换句话说,如果我们有一个输入文件,可以很容易地得到它的哈希码,但反过来,如果我们有一个哈希码,要得到它的原来的输入文件非常困难。尽管我们可以认为哈希函数类似于一个求校验和函数,哈希函数有它更多的考虑。

例如,如果我们有一个存放金融数据的文件,一个哈希函数必须对字母的相对位置相当敏感。如果$167被换成了$761,一个校验和函数会得出相同的结果。但是,一个哈希函数将会得到一个大大不同的结果。

下面的表给出了哈希函数(MD5)的不同输入和相应的哈希结果。正如你看到的,输入中一个微小的变化导致哈希结果产生巨大的变化。

尽管哈希函数一般不需要密钥,但根据需要,我们可以给我们的输入文件添加一个密钥来保护哈希结果的完整性。





MD5不可逆,王小云使用的是弱碰撞,即给定一个MD5算法,使得它可以产生碰撞,而对于强碰撞即通过给定MD5要知道它是来自于哪个序列,目前无解。所以MD5并未被破解。


哈希函数和公钥加密的结合(数字签名)



数字签名:在公钥体制下的签名


  1. 用户用自己的私钥对原始数据的哈希摘要进行加密
  2. 然后信息接收者使用信息发送者的公钥对附在原始信息后的数字签名进行解密后获得哈希摘要,并通过与用自己收到的原始数据产生的哈希摘要对照,便可确信原始信息是否被篡改,这样就保证了数据传输的不可否认性。

数字签名体制


数字签名是电子商务安全的一个非常重要的分支,在大型网络安全通信中的密钥分配、安全认证、防否认等方面具有重要作用。


1999年美国参议院已通过了立法,规定数字签名与手写签名的文件、邮件在美国具有同等的法律效力。


消息认证是保护通信双方之间不受第三方的攻击,但却无法防止通信双方中一方对另一方的欺骗。如A伪造一个消息并使用与B共享的密钥产生该消息的认证码,然后声称该消息来自于B,同样,B也可以对自己给A发送的消息予以否认。因此,除了认证之外还需要其他机制来防止通信双方的抵赖行为,最常见的是数字签名技术。

数字签名在哈姆雷特的例子中-签名



数字签名在哈姆雷特的例子中-验(认)证



数字签名在哈姆雷特的例子中-哈姆雷特的逆袭





伪造的数字签名在哈姆雷特的例子中-验(认)证失败





密钥管理




密钥存储




密钥口令与盐




密码的分组




令牌环-Token认证机制





RSA Token原理




RSA Token双因素口令的组成




回过头来看PKI(公钥体系)





PKI就在我们身边







PKI能提供什么




从非对称算法到PKI




PKI的重要基础概念




PKI核心组成元素




PKI中的CA





CA信任关系





CA信任关系的实际应用场景




CA信任关系是怎么建立的




CA的交叉认证






CA证书的产生流程






CA证书的撤销




一个CA证书的完整生命周期




中国金融认证中尽心(CFCA)





PKI与X509证书





X509证书格式









CA在哈姆雷特的例子中




CA在URL加解密中的使用




CA在SSL中的使用





最后-FIN





相关文章:

  • OWASP Top 10十大风险 – 10个最重大的Web应用风险与攻防
  • MySQL系列教程(一)
  • MySQL系列教程(二)
  • MySQL系列教程(三)
  • MySQL系列教程(四)
  • 规则引擎-BRMS在企业开发中的应用
  • MySQL系列教程(五)
  • mysql5.7在centos上安装的完整教程以及相关的“坑”
  • jboss规则引擎KIE Drools 6.3.0-集群篇
  • 面试官培训-基础篇
  • 面试官培训-实战篇
  • 双12使用腾讯云WAF反羊毛党、黄牛党战纪全记录
  • 全渠道零售中台与数字化转型(1)-中台的前世今身
  • 阿里的nacos+springboot+dubbo2.7.3集成以及统一处理异常的两种方式
  • SpringBoot+Redis布隆过滤器防恶意流量击穿缓存的正确姿势
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 2017届校招提前批面试回顾
  • 77. Combinations
  • Hexo+码云+git快速搭建免费的静态Blog
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Javascript 原型链
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • java中具有继承关系的类及其对象初始化顺序
  • linux安装openssl、swoole等扩展的具体步骤
  • SAP云平台里Global Account和Sub Account的关系
  • v-if和v-for连用出现的问题
  • Vue.js-Day01
  • vue2.0项目引入element-ui
  • Webpack 4x 之路 ( 四 )
  • XML已死 ?
  • 初识 beanstalkd
  • 前端相关框架总和
  • 前端学习笔记之观察者模式
  • 什么是Javascript函数节流?
  • 思考 CSS 架构
  • 推荐一个React的管理后台框架
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 【干货分享】dos命令大全
  • MyCAT水平分库
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #13 yum、编译安装与sed命令的使用
  • (04)odoo视图操作
  • (MATLAB)第五章-矩阵运算
  • (二)WCF的Binding模型
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (力扣)循环队列的实现与详解(C语言)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)nsfocus-绿盟科技笔试题目
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)为C# Windows服务添加安装程序
  • *p++,*(p++),*++p,(*p)++区别?
  • ..回顾17,展望18