感谢传智播客的方立勋老师,在一个教学视频上,他巧妙地以蒋介石给宋美龄写密信作为例子,生动地讲述了软件密码学知识。

加密分为对称加密和非对称加密,我们传统理解的,发送数据之前使用一个加密器加密,接到数据以后使用解密器解密,这样的过程叫对称加密。而今天要讲的公钥私钥机制是非对称加密。

背景:在互联网上传输极机密的信息(比如网银用户在登录银行系统时使用的账号和密码)时,发送信息的一方和接收信息的一方彼此验证数据真实性及对方身份真实性的一套机制。

以下以用户登录银行系统为例,用户也叫数据发送方,银行也叫数据接收方,用户名密码叫做数据或消息或信息。

公钥私钥--一把钥匙开一把锁:消息发送的发送方和接收方都可以产生自己的公钥和私钥。对同一个人或机构来说,他产生的公钥加密的消息只有他产生的私钥可以解密,他产生的私钥加密的消息只有他产生的公钥可以解密。所谓公钥就是消息接收方发送给消息发送方的一个加密解密一体机, 消息发送方拿到公钥以后,就可以使用它加密一个消息并在发送给消息接收方以后由接收方通过自己手里的私钥来解密。可见,私钥之所谓私是因为他绝对不可以被其他方获得。公钥之所以公是因为它是发送给别人的,这个公钥可能后来被转发给无数个人,也可能被黑客拦截获取,这很好理解。

CA认证--消息发送方确认消息接收方的身份:作为消息发送方,必须确认消息接收方身份的真实性。比如,当你第一次打开银行网站时,虽然你拿到了对方网站发送给你的公钥,但你必须确认对方真的是银行网站而不是钓鱼网站或黑客,因为公钥人人都可以生成,如何判断你收到的公钥是真的银行发给你的呢?此时,CA认证闪亮登场,CA是一个可信的认证公钥的第三方组织,经过它认证过的公钥都是真实的。用户在登录银行系统时,银行通过网络将该行的CA认证书(内含银行公钥)发送给用户的浏览器,每个浏览器都会自动地验证和提示用户安装接收到的CA证书,如果验证不通过就会提示报错信息给用户,避免用户上当。

数字签名--消息接收方确认消息发送方的身份:同样,作为消息接收方,必须确认它收到的消息是真正的消息发送方发来的而不是黑客做的假消息(因为黑客有可能在银行给用户发送CA证书的时候从中拦截获得了CA证书和银行的公钥,然后用公钥加密消息再发给银行),这时就产生了所谓数字签名机制,数字签名是数据发送方将待发送的数据的摘要(一般是MD5摘要)使用发送方的私钥加密以后的结果,用户在发送加密信息给银行时,随同加密信息一起被发出的还有用户的数字签名及用户自己的公钥,银行拿到信息以后,首先使用用户的公钥解开数字签名,拿到MD5摘要码,然后使用自己的私钥解开加密信息,并将得到的信息再进行一次计算摘要,如果计算得到的摘要和解开数字签名得到的摘要相等,则可确认确实是用户发来的消息。为什么叫数字签名这个名字呢,我个人的理解是,你去银行柜台办理业务总是要不停地签名,你的签名是证明你是你的方式,而数字签名的作用也同样是为了向银行证明你就是你,所以叫做签名还是很贴切的。

U盾--直接发到用户手里的CA认证书:由于对CA认证的验证过程是在用户的浏览器里进行的,为了防止黑客劫持了用户的浏览器,在认证过程中做手脚,银行为网银用户发放U盾,直接将CA证书发到用户手里,防止了浏览器劫持带来的问题。

最新文章

  1. Uiautomator--Uiselector元素定位
  2. AJAX的核心XMLHttpRequest对象
  3. HTML5 -入门 (---css样式-------------(css基础与css选择器)---------------------—)
  4. Javascript并发模型和事件循环
  5. java 22 - 20 多线程之线程池
  6. PAT 1015. 德才论 (25) JAVA
  7. canvas实现类似弹窗广告效果
  8. Linux 静态IP动态IP设置
  9. javascript中window.event事件用法详解
  10. Linux_service cloudera-scm-server start failed
  11. memcached 实验论文
  12. for循环增强
  13. Docker安装配置MongoDB并使用Robo 3T在局域网连接
  14. python调用PHP方法
  15. Spark学习之常用算子介绍
  16. Release file is expired, Updates for this repository will not be applied.(资源索引文件过期问题)
  17. 推荐几个Windows工具软件: ASuite - 便携的程序启动器
  18. Git:创建远程仓库并推送内容到远程库
  19. 使用JSP实现输出(web基础学习笔记二)
  20. IOS URL scheme

热门文章

  1. Apache axis2 + Eclipse 开发 WebService
  2. [ACM_模拟] ACM - Draw Something Cheat [n个长12的大写字母串,找出交集,按字母序输出]
  3. bootstrap日期选择器-datetimepicker
  4. C#与数据库访问技术总结(十三)之DataReader对象
  5. 1.__tostring()这个方法在类里可以直接输出对象。2.克隆对象的运用
  6. [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
  7. Liferay7 BPM门户开发之36: 使用Portlet filters过滤器做切面AOP
  8. android: 服务的生命周期
  9. android网络框架Retrofit 同步异步
  10. RTL8710 ROM 符号表 函数,常量,变量