计算机与网络安全总结(第一部分:基本加解密算法)

来源:互联网 发布:linux系统安全软件 编辑:程序博客网 时间:2024/06/09 14:28

第一部分:基本加解密算法

1. 分类

可以想象两个人的对话过程,会产生什么安全问题

    BOB <-----DARTH--->TOM (BOB与DARTH通话,DARTH为HACKER)

   [1]. 如何知道你对话的对象是BOB/TOM?

         Authentication (SSL握手过程,证书)

   [2]. 如何保证你们的会话不被其它人看到?这是passive attack, DARTH只监听内容,不对内容做任何改动。

         Confidentiality.对内容进行加密(如何加密,有公共密钥和对称密钥等方式)

公共密钥:RSA

对称:DES, AES

    [3].虽然加密了,可能DARTH不知道里面是什么内容,但如何保证它不篡改内容呢,比如在内容中加入一些东西

         Integrity. HASH,即BOB的信息先进行HASH,TOM在收到时,对信息HASH后与BOB的HASH值进行比较。

实际上,HASH的值需要与原信息一起加密传给对方

    [4].现在BOB与TOM可以会话。但如何保证BOB说的一些东西以后不会反悔

        NON-Repudiation. Signature,对BOB的信息进行signature。具体是先对信息进行HASH(因为我们假设信息与HASH是一一对应的;另外如果对整个信息加密会较耗资源,没有必要;HASH后可以保证信息的integrity),然后对HASH值进行私钥加密。一旦TOM能用BOB的公钥对此信息进行解密,就说明此信息来自于TOM

    [5].Availability. A system and a system resource remain accessible and usable upon demand

在安全领域里,你需要对一个解决方案指明它解决了以上分类的哪些

2. Cryptography

这是安全领域的基础,个人觉得有三种, encrypt, decrypt, 及hash,其它的是这三种的组合应用.

         2.1 公共密钥:

              [1]RSA:

模型:

clip_image001

简单来讲,就是 {{M}k+}k- = M.

注: {M}k表示信息M用k密钥来加密. k+表示公钥,k-表示私钥.

              [2]DH

个人觉得DH更象是对称加密的前期准备,用于产生对称加密的密钥.

过程:  ALICE <----->BOB

§ 首先双方有相同的g,p值 (这个应该是公开的)

§   ALICE产生私钥a, BOB产生b, 它们计算 yA = g^a mod p, yB = g^b mod p,然后互传

§ 对于ALICE, 它计算出的它和BOB要用来对称加密的KEY为 Kab = (yB)^a = g^(ab) mod p, 同理BOB也会得到相同的值

§ 一个HACKER它只知道yA, yB, g, p,但它不知道a或者b,所以它没有办法计算出 Kab, 也很难推导出a,b值.           

         2.2 对称:DES, AES

         2.3 HASH: MD5,SHA,SHA-1,SHA-256,SHA384,SHA-512

         2.4 DSA

感觉应该是和HMAC性质一样的,不过它是在public key crypto里的实现

模型:

clip_image002 clip_image003

其实就是解决了第一部分所说的non-repudiation. 上面show了两个不同实现, 显然第二个会较好些,原因见第一部分. 而且sign完后要encrypt.

          2.5 certificates

为了认证我们在第一部分提到的authentication, 必需要能确认一个人提供的私钥,就是这个人的. 举个例子来看,

                               ALICE <-----HACKER------->BOB

我们只关注前期它们的认证。且假定是ALICE认证BOB(在现实中,我们需要认证我们登陆的银行是不是那个银行,当然,银行也可以认证个人)。

§ 那么什么情况可以认定BOB就是BOB呢?个人认为是两个条件,其一,BOB可以解用BOB公钥加密的信息(说明它有BOB的私钥)。其二,我们需要BOB的公钥

§ 首先我们想到的是到哪里找BOB的公钥。这就是 Certification Authority(CA)的用处,binds public key to particular entity. 下面先看下申请和使用的过程是如何的

§ 申请:

§ clip_image004

§ BOB提供相关信息及它的公钥给CA

§ CA认证后,产生BOB的certificate。包含BOB的公钥,及CA对这个公钥的签名(防止伪造)

§ 使用:

§ clip_image005

§ 当ALICE需要BOB公钥时,它得到一份CA的certificate。但它怎么能确定这份是真实的呢?那么就要用到CA的public key(有点鸡生蛋。。。所以最终应该是操作系统里有份根的CA的PUBLICE KEY)。OK,得到CA的PUBLIC KEY后,我们就可以认证这份certificate是不是真实的了(应该是先用公钥去解签名,并且还要查HASH,看是否被篡改),最后我们得到BOB的public key

§ 得到BOB的PUBLIC KEY后,可以用这个PUBLIC KEY去加密一些信息,然后传给BOB,看它能不能解出来。

注:现在广泛使用的SSL握手和我上述过程不是非常一样,但大致原理是相同的。

                   SSL握手是收到BOB传过来的certificate,说它是BOB,那么我们认证了是BOB的证书后(步骤就是上述讲到的),就开始协商密钥,没有我们上述提出的步骤二),不过应该也是OK的。因为如果BOB没有私钥的话,后续它是没有办法完成密钥的exchange的。

具体可参见http://blog.csdn.net/turui/archive/2008/01/25/2065349.aspx

3. 容易混淆的概念

       SSL:是安全协议,它是HTTPS的基础

       OPENSSL:它是函数库,实现了各种加解密算法