开放网络中数据传输的安全性一直是一个热门的话题,特别是电子商务兴起的今天,各种攻击欺骗手段更是层出不穷,安全的网络传输需求愈显重要。互联网发展至今天,已经有比较成熟的解决方案了,最典型的就是HTTPS(安全套接层超文本传输协议), 它通过在应用层和传输层之间的安全套接层进行加密和解密,以保证信息不被第三方知晓和篡改,如下图
说到信息加密,就不得不说到几种加密方式,对称加密、非对称加密和哈希算法:
1, 对称加密(Symmetric-key algorithm):采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。常见的对称加密算法有DES、3DES等。
2, 非对称加密(asymmetric cryptographic algorithm):采用互成一对的公开密钥和私有密钥,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。常见的非对称加密算法有RSA,ECC等。
3, 哈希算法(Secure Hash Algorithm):又称安全散列算法,将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。这个算法具有不可逆,碰撞低等特性。常见的哈希算法有MD5,sha1等。
无论有多少种算法,最终要解决的问题只有两个,防止信息在不可信网络上传输时被窃听和篡改。那么这几种算法是如何法治信息被窃听或者被篡改的呢,各自又有什么优缺点?对称加密中,加密和解密的双方使用相同的密钥,只要相关实现的算法足够完美,那么基本上信息被破解的可能性就会非常小,但是,由于双方密钥是相同的,密钥的分发就成了一个非常大的问题,一但加密的密钥被获取,整个信息就毫无安全性可言了。非对称加密就是为了解决对称加密中遇到的问题而生的,它采用公钥和私钥的机制,由于公钥是公开的,所有就不存在保密的问题,但是这会产生第二个问题,第三方可能冒充公钥分发机构让用户更新公钥,以达到窃听的目的,如下图:
当A和B通过非对称加密传递信息时,可能会出现中间人C, 他自己产生一对公钥和私钥,然后冒充A把自己公钥传递给B,B会认为A的公钥更新了,接下来传递消息就会变成B用C的公钥加密,C用自己的私钥解密,查看信息,然后用A的公钥进行加密传递给A,由于C加密信息的公钥用的是A的,所有最终A能用自己的私钥解密。整个过程中,看起来A和B组建了一条安全的通道,其实上加密的信息已经被窃听了。
为了解决信息被篡改,数字签名出现了。和现实中的签名一样,数字签名也是在原文的基础上附上签名, 普遍的做法是先用哈希算法生成信息指纹,然后用私钥对指纹进行加密,最后附到信息最后,当另一方接受到信息时,先用哈希算法计算出信息指纹,然后用公钥解密加过密的信息指纹,如果两个指纹一样,则证明信息没有被篡改。如下:
虽然有数字签名,但是还是不能避免上面所说的“中间人攻击”,因为整个密钥管理体系是不完整的,无法确认收到的公钥是否是第三方伪造的。最后就变成了对公钥是否合法的认证,这时候,数字证书就出现了。数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名),这一行为表示身份认证机构已认定这个持证人。CA是证书的签发机构,它负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。说了这么多,其实原理很简单,增加一个管理机构(CA)专门来管理公钥。数字证书最常见的是x509标准,包括版本,序列号,算法标识,颁发者,使用者,有效期,使用者的公钥,第三方的签名等信息。它究竟是如何做到不能被伪造的呢?答案就在于数字签名。当需要时,第三方机构可以向CA提供申请, CA作出审核之后,CA用自己的私钥给第三方的公钥生成数字签名,这就形成一个数字证书。当用户获取到这个数字证书的时候,就会利用事先安装的CA机构的公钥解密证书上的数字签名,计算证书里第三方公钥的哈希值,如果两个值相同,则这个证书就是真实的。下图描述了这一过程:
通过CA和数字证书,解决了信息可能被篡改和监听的问题。具体的HTTPS的实现和数据传输会更加的细化,将在以后做深入的研究。
评论列表: