转载两篇非对称加密的好文
一直以来,"对称加密"、"非对称加密"、"公钥"、"私钥"等这些词汇对我来说都是最熟悉的陌生词, 听着熟悉但是从未理解其中要义. 最近又搞了搞证书相关的东西, 出于学习需要,索性就把这些东西理解了一下.本文不说算法也没有具体的加密方法,只是帮和我一样有困惑的小伙伴通俗易懂地理解几个概念.
非对称加密
是相对于对称加密
而言的.
首先, 不论哪种方式的加密,目的都是保护被加密内容.
对称加密
先看百度的解释:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
怎么理解呢?举个栗子.
小红新建了一个文档只想自己和小明看,于是小红为这个文档设置了密码(加密), 然后再发送给小明. 小明只要知道文档的密码就可以查看其中内容(解密).别人即使拿到文档想看,但没有密码(密钥)也无从查看里面的内容.
所谓对称
就是加密和解密的过程使用的是相同的密钥.
非对称加密
与对称加密不同,非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的"公开密钥
"(公钥)和"私有密钥
"(私钥).
公钥和私钥的关系是:
公钥和私钥一般成对出现,
如果你的消息使用公钥加密,那么需要该公钥对应的私钥才能解密;
如果你的消息使用私钥加密,那么需要该私钥对应的公钥才能解密.
非对称加密的作用是:保护消息内容, 并且让消息接收方确定发送方的身份.
再举个栗子
小红和小明互发邮件,并且邮件内容需要保密.
如果是对称加密,小明需要把唯一的密钥告知小红,小红使用该密钥进行解密即可查看邮件内容.但这样做, 一旦在传输密钥的过程中消息泄露, 保密性也就荡然无存.
很显然对称加密的安全性会低一些, 于是他们采用决定非对称加密的方式, 这样, 小明和小红就需要各自持有一对属于自己的公钥和私钥.
小明写的邮件只想让小红看, 那么小红有什么和别人不一样的特质呢? 没错, 她拥有一个只有她自己知道的密钥! 如果小明使用小红的公钥加密(公钥是公开给别人的), 那么就只有小红的私钥才能解密,这就达到了只让小红看的目的.(保护消息内容)
但是还有一个问题.既然小红的公钥是公开的,那么就可能产生有不明身份的人冒充小明, 使用小红的公钥加密然后给小红发邮件.
小明为了避免这种情况的发生,把邮件内容用自己的密钥进行加密,小红接收到邮件后,使用小明的公钥解密(只有小明公钥才能解开使用小明私钥加密的消息),如果可以解开,那么她就知道这个邮件的的确确是小明发的.(确定消息发送方的身份)
我简单画了一个图来表示这个过程:
小明发邮件小红接收的过程
.
小刚对邮件进行截获
当我们想将写好的iOS程序运行到真机上(你的真机/测试人员的测试机/从App Store上下载应用的用户的手机等)时,很多地方会使用这种非对称加密的方式进行数字签名或者身份认证,从而保证程序的来源可信并且安全.
这篇文章只是简单对非对称加密做一些理解
原文链接:https://www.jianshu.com/p/2cdaf8e99f8d
北京的Bob发了一个快递到广州的Alice,途中经过了上海,上海快递中心出现了一个黑客H,他偷偷打开了Bob给Alice的快递,然后偷偷把里边的衣服剪烂,再按照原样包装好发往广州,可以看到对于这样简单包装的传输在中途是可以偷偷修改里边的东西。
HTTP的数据包是明文传输,也即是如果中途某个黑客嗅探到这个HTTP包,他可以偷偷修改里边包的内容,至于Bob跟Alice是互相不知道这个动作的,因此我们必须要有一个方案来防止这种不安全的篡改行为,有个方法就是加密!
非对称加密
Bob将衣服放到一个保险箱里边锁起来,他打了个电话告诉Alice保险箱开柜密码是1234,而黑客H不知道密码,所以他看不到保险箱里边的东西,Alice收到快递后用预先沟通好的密码就可以打开保险箱了。
这里保护的手段就是Bob对物品进行加密,同时给了告诉Alice解密的方法!
那如果现在要求Bob的密码只能通过快递传给Alice呢?如果Bob直接传密码给Alice,H如果嗅探到这个快递,那H也知道密码了,这就无法保护快递的安全性了。因此还需要有个方案,让Bob能够告诉Alice密码的同时,H又无法查看到Bob跟Alice通信的数据。
非对称加密在这个时候就发挥作用了,来看看怎么回事:Bob拥有两把钥匙,一把叫做公钥,一把叫做私钥。公钥是公开让全社会都知道,没关系,Bob告诉所有人,你们要传递数据给我的时候请先用这个密钥(公钥)去加密一下你们的数据,加密后的数据只能通过Bob私自藏着的私钥才能解密。
回到刚刚例子,Bob先发给保险柜(Bob公钥)给Alice,接着Alice把自己的保险柜(Alice公钥)放到Bob的保险柜(即使用Bob的公钥加密Alice的公钥)里边发还给Bob,接着Bob拿到Alice的数据包后,用自己的私钥解开了外层保险柜(Bob的公钥),拿到了里边Alice保险柜(Alice的公钥)。此时Alice跟Bob都有了各自的公钥(并且都有他们自己的私钥),接着只要保证每次互相传递数据的时候,把数据放在对方的保险柜里边即可(即每次都用对方的公钥加密数据),这样无论如何,H都无法解开保险柜(因为只有各自的私钥才能解开各自的保险柜)。