加密解密略述
sshong 发表于2013年10月8日 14:26:26 更新于2015年5月21日 11:41:01
今天看https,简要记录下加密解密的几点自己的理解。

A、可逆的加密解密:既要加密,还要能还原

1、最原始的加密,只有算法和源数据,任何人知道了算法和源数据都能加密、解密。
譬如所有字母后移一位形成新的字串。

2、带密钥的加密,不仅有算法和源数据,还有附带的一个参数(密钥),只有知道了算法、源数据、密钥才可以加密。
譬如所有字母后移n位,而n就可以认为是密钥,加密时可以自由配置。
2.1 对称加密
所谓对称加密,是带密钥加密的一种,如果解密用的密钥就是加密用的密钥,那就是对称加密。
2.2 不对称加密
所谓不对称加密,就是解密用的密钥和加密用的密钥不一样,神奇吧!

B、不可逆的摘要验证(hash):只做验证,双方用同样的方式加密一个源数据,验证是否相同。
在加密解密、网络传输中,也经常要用到,用来防止被人篡改数据。

说完基本概念,就该理解了,加密解密历来就是高智商人群的工作结晶,需要超高的智商和数学功底,因为归根到底,都要归结到算法上,算法是怎样,也就决定了你的加密算法是否流弊。
一下列举几个算法:

加密解密:
A、BASE64编码:也就是上述1最原始的加密了,这种基本上不能称之为加密,只能称为编码,当然如果别人不知道算法,那也就是你的专属加密了。
B、DES(Data Encryption Standard) / AES (Advanced Encryption Standard):属于2.1对称加密,必须双方都知道密码,才可以加密解密
C、RSA:属于2.2不对称加密,有两把钥匙,一把加密,另一把解密。正是因为有了这个神奇的特性,才有https的诞生(加密钥匙可以公开出去,解密钥匙留好)

摘要验证:
MD5:这名字太熟悉了吧。
SHA:也很熟悉咯。
CRC32:也是用来做验证的。

只要大伙有恒心有能力破解上述的任意一种算法,哥们,往白道讲你就拿图灵奖了,往黑道讲你就可以随意进出任意网络,入侵任意银行了。


再讲几个加密解密中常见的术语:
hmac(Hash-based Message Authentication Code):将密钥与明文放在一起,再通过摘要算法hash输出,更加保证了摘要验证的安全性。
openssl:这是个库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,包括了上述常见的对称加密、不对称加密、摘要验证算法。
密码分组模式:分组密码将定长的明文块转换成等长的密文。如电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)。
ECB 使用同一个密钥简单地将每个明文块一个接一个地进行加密;在 CBC 方式中,每个明文块在加密前先与前一密文块进行“异或”运算,从而增加了复杂程度,可以使某些攻击更难以实施。 “输出反馈”方式(OFB)类似 CBC 方式,但是进行“异或”的量是独立生成的。
初始向量(IV):根据密码分组模式(除ECB),需要初始向量来保证安全。因为在对称加密算法中,如果只有一个密钥来加密数据的话,明文中的相同文字就会也会被加密成相同的密文,这样密文和明文就有完全相同的结构,容易破解,如果给一个初始化向量,第一个明文使用初始化向量混合并加密,第二个明文用第一个明文的加密后的密文与第二个明文混合加密,这样加密出来的密文的结构则完全与明文不同,更加安全可靠。
kdf(Key Derivation Function):从密值派生出密钥,增强密码强度,可用于存储密码,如PBKDF2(Password-Based Key Derivation Function 2)、bcrypt、scrypt。详情参考:如何安全的存储密码

说了这些之后,再来讲讲http、https。
网络是自由的,但是某些隐私性的东西总是不要让别有用心的人访问到。
如何做到隐私性保护?
最常用的做法是,用户名、密码。
不考虑具体业务层级的用户名密码,在http协议层,网络先驱们已经为我们考虑好了:
1、最开始的时候,出现了基本验证,401错误就是未验证嘛。
基本验证,服务器会返回基本验证头,浏览器弹出对话框输入用户名密码,并且用base64编码用户名加密码传递给服务器验证。
对,没看错,用base64明文传递用户名、密码,网管啥的抓个包就能解密你的用户名密码。

2、摘要验证
为了解决基本验证的明文密码传递问题,产生了摘要验证,上面介绍的摘要验证算法就起作用了。
服务器会返回验证头,以及一个随机数以及指定的摘要算法,浏览器弹出对话框输入用户名密码,并且用这个指定的只要算法加密 随机数以及密码返回给后台验证,由于摘要算法的不可逆,密码也就安全了。
基本上摘要验证已经很安全了,抓到的包也没啥意义了,但是还是可以通过一些攻击手段如词典攻击等方式破解密码。

3、HTTPS:安全的HTTP
归根到底,摘要验证还有安全隐患的原因,是因为它的报文是明文的!
再狠一点,就是把报文加密了,这样在网络上传输的信息永远是加密的。在HTTP应用层与TCP传输层之间插入一个加密层,也就是传说中的SSL(Security啥的layer吧?)。
既然要加密解密,首先肯定不用1原始的加密,那等于没加密。
那能不能用对称的加密?能啊,但是这样的话,浏览器在访问任意网站时都要问服务器,你密钥多少,问题来了,谁都可以问密钥,hacker也能问,拿到密钥了还谈加密毛用。
这就用到不对称加密了!!
我告诉你加密密钥,随便谁都可以知道,你拿去了只能加密,不能解密,解密钥匙在我服务器手里,只有我才可以解密!
好神奇,有时不得不赞叹数学真的太神奇了!

客户端访问服务器时,服务器告知加密密钥(公共密钥),客户端根据这个密钥加密数据传递给服务器,服务器根据解密密钥(是有密钥)解密。

这里面有一个小小的问题,服务器这哥们告诉你一个加密密钥,鬼知道他知不知道解密密钥,说不定是个钓鱼网站啊。答对了,于是有了数字证书,数字证书只有权威的证书颁发机构(CA)能够颁发。数字证书里包含了公共密钥以及其他的一些信息,如CA,浏览器拿到证书后检查CA,如果这个CA不被信任会提示危险!
玩过openssl的,都知道可以自己制作CA,但是无法伪装成知名CA。用自己制作的CA颁发的服务器证书,浏览器会提示安全性。
标签:无分类:JS&Html5阅读:3054
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅