网络安全相关的一点东西

先从网络安全的要求说起:

  1. 保密性(Confidentiality)
  2. 完整性(Integrity)
  3. 可用性(Availability)
  4. 认证 (Authenticity)

几种典型的攻击类型:

  1. DoS, Denial of Service(僵尸网络)
  2. 嗅探 (到底什么程度的爬虫才算攻击?)
  3. 中间人

针对僵尸网络,买足够多的服务器或者流量托管都是可以做到一定程度的防护。不在本文讨论范围内。

针对一般的个人级网络安全。本文主要讨论加密算法。

OK,首先介绍对称加密(symmetrical encryption)和非对称加密(asymmetrical encryption)

对称加密即,加密与解密时使用的密码是同一个密码。

相对的,非对称加密即,加密与解密时使用的密码不是同一个。

T ------->  Message  -------->  R
   Key1               Key1

对称加密

T ------->  Message  -------->  R
   PriKey1            PubKey1

R <-------  Message  <--------  T
   PubKey2            PriKey2  

非对称加密

非对称加密解密所使用的一对秘钥(公钥,私钥),由公钥加密的信息,只能由私钥解密。

RSA算法:

密文=      明文^e mod N        {e,N}为私钥
明文=      密文^d mod N        {d,N}为公钥

OK,比较一下二者。

使用对称加密算法做加密通信,A与B通信,需要提前知道B的秘钥。与C通信,需要知道C的秘钥。同理B和C也都要保存A的秘钥....... 在秘钥不被泄露的情况下,及时密文被截获,也没用。B在没有C的秘钥的情况下伪装成C与A通信,A使用C的秘钥解密发现没用,就会知道有假。但是有一种情况,如果B是个坏人,且A是个傻子。A在与B和C通信时使用了同一个秘钥,而且A与C的通信被B监听,且A与C之间的加密算法被B得知,那么是可以被B解密出明文的。相比较而言,非对称加密就没有这样的问题。

使用非对称加密算法稍复杂一些。A会向外公布自己的公钥,保留私钥不被公开。同理,B,C都向外发布自己的公钥。A在发消息给B的时候,用B的公钥加密,B在收到之后,用自己的私钥解密。A如果希望广播消息,用自己的私钥加密,收到的人用A的公钥来解密。这时候我们再来考虑一下之前对称加密的那个问题。就算B手里有A和C的公钥,也没办法解密AC之间的密文。

说完这个,再来说说共同点,在端到端通信所使用的秘钥不被第三方得知时,都可以保证通信的保密。

但如果B是个绝顶聪明的坏人:

1)设法阻断A与C之间信道

2)使用对称加密时,假装C发给A秘钥,用于之后与A的通信。使用非对称加密时,假装C发布公钥。

这样一来B完全可以从头到尾伪装成C。

还有,如果B是个没那么聪明但是足够坏的坏人:

1)设法阻断A与C之间信道

2)截获密文并随意修改其中内容,及时他不知道是什么内容(而且A,C不知道内容被修改了)

以上两种问题,数字签名可以解决

数字签名

首先我们规定一下密文格式:

明文
{密文}
[秘钥|加密算法]
1.browser    ->    server         Hello
2.server    ->    browser        Hello Im server
3.browser    ->    server        prove it
4.server    ->    browser        Hello Im server{Hello Im server}[private key|RSA]
5.browser    ->    server        {请使用以下的对称加密算法,算法,秘钥}[public key| RSA]
6.server    ->    browser        {OK}[算法,秘钥]
7.browser    ->    server        {账号密码,请给出余额}[秘钥,算法]
8.server    ->    browser        {余额:xxx}[秘钥算法]

用这种非对称加对称的方式,可以保证对称加密秘钥算法的安全。而且可以检查通信内容是否有被修改。

在browser上只要有确定是server的公钥,就可以保证安全。那么问题就是,你说你是server,我怎么相信你。也就是server的公钥是否真的是server的公钥。

server在证明自己是server的时候,使用数字证书,即:

server    ->    browser    Hello, this is my cert    //以保证证书可靠性
browser    ->    server    prove it
server    ->    browser    Hello,Im server{Hello Im server}[私钥 | RSA]

数字证书包含:
xxxxxxxxxxx证书内容xxxxxxxxxxxxxxxx
证书发布者(Issuer),
证书有效期,
公钥,
公钥所有者,
签名及算法,
指纹及算法,
。。。。
{证书指纹及计算指纹的算法}[issuer 的私钥 | RSA]
xxxxxxxxxxxxxxxxxxxx证书内容结束xxxxxxxxxxxxxxxxx

issuer,是为server颁发数字证书的公信力。server在后续非对称加密时所用的私钥加密出的密文,如果可以被数字证书解密后的server的公钥解密,说明是真的server。解密数字证书所用的issuer的公钥,预装在操作系统内。(如果你相信你所用的操作系统即相信issuer,那么请相信当前声称自己是server的人,猜疑链终止。)

补充一点,所有的秘钥理论上都可以被暴力破解。现代加密算法对秘钥的要求基本可以保障,暴力破解一个秘钥,需要几千年。


第一次写文章,各位看官轻喷。主要是给自己一个总结的地方。

你可能感兴趣的:(网络安全,加密算法)