PS:最近老是看到MD5和SHA-1,不知道这是什么,所以就看了一下crash course解密的那一集,突然发现,自己对计算机网络的认识真的是太肤浅了
以前觉得hash不就是某种数据结构,没想过有其它用途
以前觉得网络就是从某个地方取数据,没考虑过安全问题
crash course 学习心得
替换加密:凯撒密码
将字母替换为其它字母,缺点是字母出现频率一样,字母E加密为字母X,字母E出现频率很高,则密文中字母X的出现频率也会很高
移位加密
将明文放入网格,从某个方向读
Enigma机
这个转子的机械结构真的是神奇
密钥交换:Diffie-Hellman
Diffie-Hellman 通过模幂运算这种单向函数,可以双方共享密钥基数^指数 mod 模
其中基数和模是公开的
甲:选择了指数x 甲=B^x mod M
乙:选择了指数y 乙=B^y mod M
甲乙互相交换模幂运算结果
甲乙建立的共享密钥=(B^x mod M)^y=(B^y mod M)^x
数学真神奇
一、对称加密、非对称加密
对称加密
加、解密使用的同是一串密钥, 常用的对称加密算法:DES,AES等
非对称加密
加、解密使用不同的密钥,公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。 常用的非对称加密算法:RSA
二、数字摘要、数字签名
下面面这个例子很不错啊
http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html
1.数字摘要(Digital Digest)
数字摘要也称作为安全HASH编码法(SHA:Secure Hash Algorithm),常用的摘要算法有MD5、SHA1、SHA256
一段信息,经过摘要算法得到一串哈希值,就是摘要(digest),信息是任意长度,而摘要是定长
摘要不同于加密算法,不存在解密,从摘要反推原信息很难(可以认为能加密但无法解密还原,但可以通过比对摘要是否相同,判断原信息是否相同)
算法的基本要求
- 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值
- 逆向困难:给定(若干) hash 值,在有限时间内很难(基本不可能)逆推出明文
- 输入敏感:原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同
- 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致(发生冲突)
摘要相同,信息一定相同,利用这个特点,摘要还可以用于应用在网站后台数据库中,用于比对用户的输入密码和预设密码是否相同。这里都无需关心密码本身是什么,关注的是密码是否相同,而密码是否相同取决于摘要是否相同,所以问题转化成了摘要是否相同。将用户密码的摘要而不是密码本身保存在数据库中,因为反推很难,所以真实密码是保密的。
2.数字签名(Digital Signature)
数字签名一般是结合了数字摘要技术和公开密钥算法共同使用
(1)生成签名信息
- 对信息M进行HASH函数处理,生成摘要H
- 发送者私钥加密H来获取数字签名S
发送 {M, S}
(2)验证签名信息
接受{M, S} 并区分开它们
- 对接收到的信息M进行HASH函数处理,生成摘要H*
- 取得发送者的公钥
- 用公钥解密S,来获取H
- 比较H和H,如果H和H是一样的,即说明信息在发送过程中没有被篡改
由于明文信息也通过网络进行传递,因此在做完数字签名后,还要对整个信息(包括明文信息M和数字签名的密文信息S)进行加密
3.数字证书(CA)
数字证书是由权威机构给某网站颁发的一种认可凭证
数字证书可以保证数字证书里的公钥确实是这个证书的所有者