为了方便咱们学习iOS的签名机制,本文设置了4个虚拟人物,分别是算法
那么如何防止信息被监听呢?就须要对通讯信息进行加密操做。数据库
首先将明文加密成密文发送给接收方安全
根据密钥的使用方式,咱们能够将密码分为两种:对称密码和公钥密码。bash
对称密码就是加密和解密使用相同密钥网络
经常使用的对称密码算法有三种session
AES是用来取代DES称为新标准的一种对称密码算法,AES的密钥长度有12八、19二、256bit三种。函数
什么是密钥配送问题?学习
使用对称密码时,必定会遇到密钥配送问题,具体以下图加密
假设Alice将使用对称密码加密后的消息发送给Bob,Bob想要查看明文信息,就须要拿到Alice加密的密钥,因此Alice同时要将密钥发送给Bob,在发送密钥的过程当中,可能会被Eve窃听,Eve拿到窃取的密钥和密文,一样能够解析获得明文消息。spa
公钥密码中,密钥分为加密密钥和解密密钥两种,它们不是同一个密钥,因此公钥密码又被称为非对称密码(Asymmetric Cryptography)
上面说到,密钥配送问题能够经过公钥密码来解决,具体解决流程以下:
RSA是目前使用最普遍的公钥密码算法。它的名字是由3位开发者Ron Rivest、Adi Shamir、Leonard Adleman的姓氏首字母组成。
发送的内容包括
收到==消息发送者==发过来的消息以后,须要进行解密操做,具体步骤以下:
使用Alice做为==消息发送者==,Bob做为消息接收者
1,Bob首先生成一对公钥、私钥 2,Bob将公钥共享给Alice 3,Alice随机生成一个会话密钥(临时密钥) 4,Alice用会话密钥加密须要发送的消息(对称密码加密) 5,Alice用Bob的公钥加密会话密钥(公钥密码加密、也称为非对称密码加密) 6,Alice将四、5步加密获得的结果一块儿发送给Bob
1,Bob利用本身的私钥解密会话密钥(公钥密码解密、也称为非对称密码解密) 2,Bob使用会话密钥解密发送过来的消息(对称密码解密)
单向散列函数能够根据消息内容计算出散列值。而且散列值的长度和消息的长度无关,不管是1bit、10M、100G的消息,单向散列函数都会计算出固定长度的散列值。
单向散列函数又称为消息摘要函数、哈希函数。输出的散列值也被称为消息摘要、指纹。常见的几种单向散列函数以下
产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
产生160bit的散列值,目前也不安全
SHA-25六、SHA-38四、SHA-512,散列值的长度分别为256bit、384bit、512bit。散列值长度越大,安全性就越高
SHA3(Secure Hash Algorithm-3)是一种做为新标准发布的单向散列函数算法,用来替代在理论上已被找出攻击方法的SHA-1算法。全世界企业和密码学家提交了不少SHA-3的候选方案,通过长达5年的选拔,最终于2012年正式肯定将Keccak算法做为SHA-3标准。
在App登陆时,通常都须要进行帐号和密码的校验,可是在数据库中,保存的密码通常都是进行SHA-2散列函数以后的散列值而不是明文密码,因此在登陆时须要对用户输入的密码进行散列算法,获得散列值,再同数据库保存的散列值进行比较,从而判断密码是否正确。 而且,因为散列函数的不可逆,就算他人经过不正当手段获取到数据库中存放的密码的散列值,也没法获取到用户的真实密码。这样就大大增长了用户数据的安全性
其实,不论是使用以前的对称加密、非对称加密仍是混合密码系统,都没法验证消息的真实性。也就是说消息的接收者没法判断这条消息是不是消息发送者所发出的。也有多是他人假装成消息发送者发出的消息。那么怎么来验证消息的真实性呢?经过数字签名的方式来验证。
而在数字签名中,任何人均可以使用公钥来验证签名。
数字签名其实就是将公钥密码反过来使用
可是这样的签名过程速度很慢,由于签名信息是经过加密原有的消息得到,若是消息大小是1M,加密后的签名大小也是1M,最后发送给消息接收者的消息就是2M
复制代码
在以前数字签名的过程上使用单向散列函数进行改进。
综合以上几点,能够总结出数字签名的做用:
要想正确的使用数字签名,就必须验证签名的公钥必须属于真正的发送者。由于在消息发送者和消息接收者之间可能会遭遇中间人攻击,具体攻击步骤以下:
以上的消息传递过程当中,消息发送者和消息接收者没法察觉到中间人的存在,可是消息已经被泄漏了。
复制代码
上面的通讯过程遭遇到了中间人的攻击,会致使
所以,在验证签名以前,首先得验证公钥的合法性。如何验证公钥的合法性呢?就须要经过证书。
看到证书,咱们会联想到驾驶证、毕业证等等,这些证书都是由权威机构认证的。在密码学中的证书,全称叫作公钥证书(Public-key Certificate,PKC)。和驾驶证、学生证相似。
证书的使用有如下几个步骤:
1,消息接收者生成本身的密钥对,消息接收者在认证机构注册本身的公钥 2,认证机构用本身的私钥对消息接收者的公钥施加数字签名,而且生成证书 3,消息发送者从认证机构那获得带有认证机构数字签名的消息接收者的公钥(证书) 4,消息发送者使用认证机构的公钥验证数字签名,确认消息接收者公钥的合法性。 5,消息发送者使用消息接收者公钥加密消息,而且发送给消息接收者。 6,消息接收者使用本身的私钥解密密文获得最终的消息
增长认证机构认证流程以后,消息发送者和消息接收者之间,就不存在公钥的传递过程,消息发送者从认证机构获取消息接收者的公钥,这样就杜绝了中间人攻击致使公钥伪造的问题
复制代码
对称加密,相同的密码加解密(DES,3DES) 公钥加密,公钥加密私钥解密(RSA)
使用对称密码加密信息,使用公钥密码加密会话密钥。 如今网络上密码通讯所用到的SSL/TLS都是运用了混合密码系统
1,根据任意长度的消息,计算出固定长度的散列值。消息不一样,哪怕就相差1bit数据,散列值也不一样。
2,经常使用的单向散列函数。MD4,MD5产生128bit的散列值,MD就是Message Digest(消息摘要)的缩写,目前已经不安全。
3,SHA3(Secure Hash Algorithm-3)是一种做为新标准发布的单向散列函数算法
数字签名为了验证此消息是从消息发送者发出的。(由于要本身发送密钥,会被中间人攻击)
增长认证机构认证流程以后,消息发送者和消息接收者之间,就不存在公钥的传递过程,消息发送者从认证机构获取消息接收者的公钥,这样就杜绝了中间人攻击致使公钥伪造的问题。