相关文章:数字证书原理
SSL/TLS协议运行机制的概述
一、常用的加密算法
1、对称加密
对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥是一样的。<qq style="color:red">对称加密的优点在于加密、解密效率通常比较高</qq>。
常用加密算法有DES
,3DES
,AES
等.
DES 数据加密标准(用的比较少,因为强度不够).
3DES 使用3个密钥,对相同的数据执行三次加密,强度增强.
AES 高级加密标准,目前美国国家安全局使用AES加密,苹果的钥匙串访问就是使用AES加密。
而对称加密的模式最为常见的是两种:ECB
,CBC
ECB:<qq style="color:gray">加密文件会被分为若干个加密块,每个块都是独立进行加密,互不影响。所以,如果变动数据中的某一个地方,加密之后其对应得块也会发生变化,缺点是一旦被破解某个模块,就可以进行推理,进而有机会获取到重要数据。</qq><p>
CBC:<qq style="color:gray">使用一个密钥和一个初始化向量 (IV)对数据执行加密转换。加密文件同样会被分为若干个加密块,每个块都依赖于上一个加密块进行加密,互相牵制。所以,如果变动数据中的某一个地方,加密之后整体数据都会发生变化。可以有效地保证密文的完整性</qq>
2、非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey);并且加密密钥和解密密钥是成对出现的。<qq style="color:red">通过公钥加密的数据,只能通过私钥解开。通过私钥加密的数据,只能通过公钥解开</qq>。常见的非对称加密算法有RSA(加密,证书生成),DSA(数字签名)
第三方代码
非对称加密算法对加密内容的长度有限制,不能超过公钥长度。比如现在常用的公钥长度是 2048 位,意味着待加密内容不能超过 256 个字节。
3、HASH加密
Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度(32个字符)的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。对用相同数据,加密之后的密文相同。
常见的Hash算法有MD5和SHA。
//md5 处理
class func md5(_ string:String) -> String {
let str = string.cString(using: String.Encoding.utf8)
let digestLen = Int(CC_MD5_DIGEST_LENGTH)
let strLen = CUnsignedLongLong(string.lengthOfBytes(using: String.Encoding.utf8))
let result = UnsafeMutablePointer<CUnsignedChar>.allocate(capacity: digestLen)
CC_MD5(str!, CC_LONG(strLen), result)
let hash = NSMutableString()
for i in 0 ..< digestLen {
hash.appendFormat("%02X", result[i])
}
result.deinitialize()
return String(format: hash as String)
}
二、HTTPS原理
HTTPS是HTTP的安全版,HTTPS的安全基础是SSL/TLS。<qq style="color:red">Https的作用:内容加密,身份认证 ,数据完整性 </qq>
https通信过程
对称秘钥用公钥进行加密,服务端用私钥解密。
1、摘要算法
数字摘要是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文,这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。“数字摘要“是https能确保数据完整性和防篡改的根本原因。
2、数字签名
将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过.
数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围
3、数字证书
由一个权威的值得信赖的第三方机构(一般是由政府审核并授权的机构)来统一对外发放主机机构的公钥。<p>
证书包含了颁发证书的机构的名字 -- CA
证书的有效期
证书内容本身的数字签名(用CA私钥加密,证书颁发机构的)
证书持有者的公钥
证书签名用到的hash算法
证书验证:
1、Company在证书颁发机构"SecureTrust CA"申请到这个证书后,我们把证书投入使用,我们在通信过程开始时会把证书发给对方。
2、在操作系统中受信任的发布机构的证书中去找"SecureTrust CA"的证书,找不到证明证书可能有问题,找到的话,就用证书发布机构的根证书(一般是在操作系统中的)中的公钥,去验证证书的数字签名,确定证书的合法完整性。
3、然后就可以放心的使用证书的这个公钥进行通信了。
4、SSL/TLS
SSL协议在握手阶段使用的是非对称加密,在传输阶段使用的是对称加密。