微信号:androidwalker

介绍:关注Android新技术、进阶开发

趣谈RSA工作原理

2016-05-05 07:14 xjj_app


RSA

RSA是目前最具影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已经被ISO推荐为公钥数据加密标准。


1
概述

       今天,我们要来好好说说RSA加密,这里不谈枯燥的底层算法,只谈谈它的工作原理!

        为啥要说RSA,众所周知它是一个目前非常重要的加密算法,尤其是在互联网金融飞速发达的今天,各种支付应用、P2P贷款、炒股软件等烂大街的时候,加密就显得格外重要,可以避免个人信息、密码泄露,以免造成人身、财产损失。比如,就以滴滴来说,现在打车的时候,司机是可以看到乘客的电话的,如果乘客给一个差评,司机想报复你,太简单了,直接搞一个自动呼叫软件,直接把你的电话打爆了!

        通过上述滴滴的例子,那么你就清楚,泄露个人信息是多么危险的事情了吧!其实滴滴完全可以不用把乘客的电话(明文)泄露给司机,只需给司机一个中转码(密文),司机拨打这个中转码,滴滴再把来电转发给乘客即可。

        好吧,我已经在技术的道路上越走越偏了~ 现在隆重请出加密算法里两位明星人物Bob(鲍勃)和Alice(爱丽丝),来给我们示范一下! Bob和Alice进行加密通信。


2
生成密钥

         Bob 借助密钥工具(例子openssl,该工具开源免费)生成私钥和公钥。



3
处理密钥

        在第1步,Bob使用工具生成了Public key(公钥)和Private key(私钥),然后将Public key 发送给了Alice,然后保留了Private key(注意Private key是谁也不能给的)。




4
加密通信

        Alice获得Public key后,就可以开始和Bob开始通信了!


        Alice写下了明文“hello Bob”, 并使用Public key 对这段话进行加密(Encrypt)成密文“x0Ak3bi2RTj”,再将这段密文通过网络发送给Bob。Bob收到这段密文,再使用Private key对这块密文解密(Decrypt),获得了最终Alice发过来的明文。

        从上图可以看出,在网络传输的是密文“x0Ak3bi2RTj”,即使其它人拦截到,也无法获知具体的明文是什么内容。只有拥有该Public key对的Private key才能解出原始明文。因此,Bob需要保护好自己的Private key,避免落到他人手中。

        同理,Bob也可以使用Private key加密内容,发送给Alice,Alice再用Public key去解密。


5
数字签名

5.1 生成签名

        数字签名是用来保护文件,不被篡改,本身不会对文件进行加密,而是附带一个签名文件。Bob作为密钥生成者,可以对文件进行数字签名,确保该文件不会被恶意修改。


        Bob 有一个文件,现在要将这个文件发给Alice,首先他对这个文件进行哈希(hash),生成摘要信息(Message Digest),然后再使用Private key进行加密,便生成了数字签名(Signature)。


5.2 发送文件和签名

        
        Bob将原文件(明文)和数字签名两个文件发送给Alice。


5.3 签名验证


        Alice 收到文件和签名文件后,分别生成两个摘要信息(Message Digest),通过对比对比两个签名信息,如果相等,则原始文件是ok的,未被修改的。如果两者不相等,那么则文件已经被修改过了,不可使用。

        不管上述两个文件(原始文件和签名文件),哪一个被修改了,在Alice这边都通不过。


6
数字认证

        在上面Bob和Alice通信中,使用这套加密看起来天衣无缝。但这时冒出一个第三者Doug(道格)。一听是第三者,肯定都是没有好意的。Doug 在Alice的电脑里,偷偷替换了Bob给过来的Public key,换成自己新生成的Public key。 这样Alice 在不清楚的情况下,Doug就可以伪装成Bob,与Alice通信,而Alice却全然不知。这是一件很危险的事情,如果Doug 向Alice借钱,后面都是Bob还啊。

        Alice为了避免被骗,她想到一个办法,就是要求Bob去找一个“证书中心”(Certificate Authority Center, 简称CA),为自己的Public key认证。证书中心则使用自己的私钥,对Bob的公钥和一些相关信息一起加密(比如Bob名字等等,这样就把公钥和人绑定起来),生成“数字证书”(Digital Certificate)


        因为,最终Bob发送给Alice 的文件是这样的!


6
思考

        其实,上面的Bob和Alice,有点像后台与客户端的关系。Bob是后台,存储Priavte key, Alice是客户端,存储Public key。 后台与客户端的通讯,是可以省掉数字认证中心的,因为,Public key是打包在客户端的,一旦被篡改,Android 客户端的签名是变化的。因为,大可不必担心!但使用签名认证时,数据是公开的,所以,数据不敏感的,可以使用数字签名,来保证文件的唯一性和完整性。



 
Android高级开发 更多文章 Android Studio 入门技巧之<基础篇> Android Studio 之<进阶篇:实用快捷键> Android Studio 之<进阶篇:IDE设置> 2015年度腾讯MIG内部技术峰会 多团队协同开发经验
猜您喜欢 PHP语言基础简单整理 【OSC x 阿里云】云栖大会开源物语 图文+干货PPT 小型开源Web服务器Puma 夜修行分享老师招募—步履不停,寻找发光的你 百度、美团、58、阿里面经