信息安全基础知识

原创 2016年08月30日 15:57:31

最近因为实验的项目很多都和安全相关,虽然我没有参与这些安全方案的编写,但是在项目中,安全方案是由我来实现的,所以,要理解安全方案的安全理念,就一定要有些信息安全的基础才行,所以我写下这篇blog,来补充一些信息安全的基础知识。

1.加密的方式:

这些概念也许都被耳濡目染了,什么对称加密,非对称加密,各种各种,很多人听了很多遍,但是就是只是知道其中泛泛的概念,真正实际用的时候,又开始不理解了,所以这里还是从总体阐述下:
1. 对称加密:由双方共同协商一个密钥(这个密钥就是一个符号,一个字符串,或者是其他,根据算法而定),然后由发送方(A)使用这个密钥K来加密,将明文变成密文,接收方B收到密文后,通过密钥K解密后,得到明文。
以上就是对称加密的基本内容,确实很简单,但是使用的时候,可能会产生一些问题,比如:对称加密方式算法有哪些?又该如何实现和使用呢?
所以这些都是问题所在:1.首先,对称加密的算法,常用的有DES算法,3DES算法,AES算法等等,2.我们又该实现和使用?每种语言基本都有对应的API或者是第三方API来实现的。
其实,要会用加密算法,最好是了解到其中原理以及对应过程有一定的了解,这样才不至于在加密的过程中,被搞的晕头转向的,哪里错了都不知道。这里介绍一种对称加密的算法:DES算法。
DES算法的算法原理可以在DES算法简介,这个链接里面搞懂,简单来说:DES数据加解密就是将数据按照8个字节一段进行DES加密或解密(DES的key为8个字节长度)得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节(通常补00或者FF,根据实际要求不同)进行计算,之后按照顺序将计算所得的数据连在一起即可。
DES算法又分为ECB模式和CBC模式。ECB模式其实很简单,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,按照需求补足8个字节进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。(说白了,ECB模式就是基本的DES算法)。和ECB模式相比,CBC模式使用了一个叫做IV(随机向量,由8个字节构成),IV会在每次加密算法运行的过程中,与计算结果进行异或(同理,解密的时候也会进行异或),初始化向量一般来说是8个零(当然也可以是其他的八个字符)
接下来说下des算法的填充方式,des算法的填充方式有两种 NoPadding (不够补零) 和 PKCS5Padding 。这两种方式在加密解密中起到了关键的作用,如果通信的双方指定的填充方式不同,那么,加密解密的结果将会出现很多问题。
2. 非对称加密:相比对称加密,非对称加密的就很好理解了:通信双方协商一对密钥(K1,K2),发送方A用K1对发送的报文进行加密,然后接收方B通过K2来进行解密,得到明文。
和对称加密的问题一样,我们有RSA、Elgamal,ECC算法,其中RSA算法是最常用的算法。
RSA算法的原理的,可以参见这篇博客,RSA算法原理讲解(数学原理)
RSA算法原理讲解(运用)
RSA算法的主要数学原理是素数分解问题:其中主要涉及欧拉公式和模反定理,大致概述下RSA算法生成密钥对的过程:
1.指定两个互质的数字p,q.
2.计算p,q的乘积n。
3.利用欧拉公式计算 φ(n) = (p-1)(q-1);
4.随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
5.利用模反定理计算d。ed ≡ 1 (mod φ(n))(即 ed-1=kφ(n))。
6.生成公钥(n,e),私钥(n,d).
以上就是RSA密钥生成的过程,可见,想要利用n和e,得到d,就必须将n因数分解 。然而一个大数的因数分解,是很难计算出来的。因此,也是RSA密钥的安全性所在。目前最高破解到RSA密钥只有768位。
RSA算法主要的填充方式有两种: pkcs1_oaep和pkcs1。

以上就是对称加密和非对称加密两种加密方式的理解,分别举了常用DES和RSA算法来理解。在项目过程中,遇到最多的问题如下:
1. 双方的加密库使用的padding不一样,导致加密解密出错
2. 双方要协定好key的编码格式,content的编码格式(算法最终是根据内存中的二进制数值来计算的,所以一定将编码格式理解清楚)
3. 别的问题就是算法自身的问题,比如DES算法的IV是否一致。

2. 公钥和私钥

很多安全协议里面都会说到公私钥对,经常会说,公钥用于什么,私钥用于什么,这也是是经常会让人头大的一件事情,很多时候对安全协议的理解的偏差也是从这里开始的。 所以这里详细阐述下公私钥的用处:
所谓公私钥对,其实就是上面提到的非对称加密算法中的密钥对(K1,K2)。公钥对应了其中的K2,私钥对应了其中的K1.
在安全通信协议中,发送方A,使用一个非对称加密算法的时候,之前会协商出来一对密钥,然后将密钥中的K2公开出来,提供给他想要通信的接收方(比如B,C,D等等),只要B,C,D,拿到了公钥,那么,A就可以使用私钥K2给B,C,D通信,B,C,D拿到A加密过后的密文,使用事先得到的公钥就可以解密A的报文了。同时B,C,D给A的报文,用A的公钥加密后,只有A能通过私钥来解密。
从上述协议可以看出:

  1.  通信双方利用公钥私钥来进行安全通信。
  2. B,C,D加密出来的内容,只有A能打开,因为只有A有私钥,这也就是私钥的特点:私密保存,只有保存者能够解密。
  3. A加密出来的内容,只要有公钥的接受者都可以看到,这也是就是公钥的特点:任何人都可以得到,并且解密。 

我们可以看到,私钥的安全性极高,可以说,一个私钥代表了通信中一方的身份。而公钥的安全性极低,任何人都可以得到,都能解密私钥加密的内容,因为公钥本来就是公开的。可见,安全通信的协议中,公钥是一般用来加密的,私钥一般是用来解密的。

3.数字证书

证书的概念也是被弄得沸沸扬扬的,很多安全方案都会使用证书,甚至经常会把证书和公私钥扯在一起说,那么,证书到底是什么呢?有来做什么用处的呢?和公钥私钥的联系又是什么呢?
我们一个一个把问题搞清楚,首先,我们来看下面一个通信过程常见的安全问题:
通信的双方A和B,A发布公钥key1出来由B得到,但是,如果B在获取公钥的过程中,中间人C把公钥替换成C的公钥key2,然后把C的公钥给B,此后的过程中,B本来想向A发送消息,本应该用A的公钥Key1加密,却用了C的公钥Key2加密,那么,消息只有C可以解密看到。所以,公钥发布过程中,出现替换公钥的情况,怎么办?
其实上述问题就是著名的”中间人攻击“。那么,我们应该怎么解决上面的问题呢?其实我们可以看到,公钥发布是一个认证问题。我们可以通过为A的公钥进行签名,而使C想修改A公钥的企图变得困难。这就是现今很多证书发布机构的作用。他们首先认证了B的身份,为B的公钥用机构的私钥进行签名,这时候,B首先得用证书机构提供的公钥验证他得到A的公钥的正确性。而如果C想篡改B的公钥,他首先得得到机构的私钥。
可以看到,为了解决这个问题,大家提出了一个三方可信的机构,用三方机构来做认证,解决中间人攻击的问题。
证书就是公钥的发布者,将公钥和发布者的信息上传到第三方可信机构(这里三方机构就有可能是大家说的CA证书机构),第三方可信机构将上传的公钥和信息,用第三方的机构的私钥来进行摘要计算,签名,制作生成的内容,即为证书。
以上就是我对证书的一个理解。可以看到,如果中间人想要替换公钥,那么,就必须得到第三方可信机构的私钥,不然的话,肯定通不过签名验证。

3.2 题外话:OpenSSL 制作证书

OpenSSL是一个开放源代码的软件库包,这个软件包主要实现了密码算法库、SSL协议库以及应用程序。这里我们制作证书只用到密码算法库,下面列出制作证书的这几条命令:
1.利用openssl的rsa算法,生成私钥(密钥长度2048)
* openssl genrsa -out private.key 2048
2. 利用刚刚生成的私钥来生成证书制作请求(CSR)
* openssl req -new -key private.key -out selfsign.csr
3. 将生成的CSR用私钥来进行签名,就可以得到我们的证书了(这里设置证书为一年过期)
openssl x509 -req -days 365 -in selfsign.csr -signkey private.key -out selfsign.crt
注意,上述三条步骤生成的证书是自签名的,但凡使用自签名的证书,CSR的公钥都会被signkey中的私钥来替换掉。所以,如果不想影响到CSR原有的公钥,我们就必须用CA证书来进行签名:
1. 生成CA的私钥
openssl genrsa -out ca.key 2048
2. 生成CA的证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
3. 利用CA证书来进行签名:
openssl x509 -req -days 365 -in selfsign.crt -CA ca.crt -CAkey ca.key -set_serial 01 -out myserver.crt
利用CA签名, 这样提取到的证书中的公钥就是CSR中的公钥了。
其他openssl制作证书的相关命令:
1.打印证书中的公钥:
openssl x509 -in helloWorld.crt -pubkey -noout
2.打出CSR文件的公钥:
openssl req -in helloWorld.csr -pubkey -noout
3.利用私钥生成一个公钥:
openssl rsa -in helloWorld.pem -pubout -out helloWorldPublicKey.pem

4.其他知识概念普及:

1.白盒加密算法:将密钥变成一段代码,嵌入程序中,再加上代码混淆,防止内存攻击,逆向工程等方法,将密钥读取出来。

2.Hmac:hmac加密算法是一种基于密钥的报文完整性的验证方法,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。HMAC加密算法可以用来作加密、数字签名、报文验证等。

相关文章推荐

信息安全基础知识

  • 2013年11月25日 23:14
  • 16.39MB
  • 下载

信息安全基础知识(一)保密性,完整性,端点认证

大家在谈到安全时,都会觉得安全是协议的一项孤立的特性,在面试时候也会问到你知道哪些协议,可见安全和协议被认为是一体的。事实如何呢,我也在探索,来吧开始安全知识扫盲吧! 通信安全的特性或者说是分类有以下...

信息安全基础知识(四)KDC、公用密钥加密和证书:

KDC(密钥分发中心)          针对密钥管理问题最流行的解决方案就是公用密钥加密(public key cryptography,PKC)。不过也存在一种只使用到目前为止所讨论的工具来解决密...

信息安全基础知识(五)主动攻击与被动攻击

一 .被动攻击    被动攻击即窃听,是对系统的保密性进行攻击,如搭线窃听、对文件或程序的非法复制等,以获取他人的信息。被动攻击又分为两类:一类是获取消息的内容,很容易理解;另一类是进行业务流分...

一起来学信息安全知识(3)——签名

前边讲到非对称密码中的公钥和私钥,我们另公钥为Kg,私钥为Ks,Kg是公开的,别人可以直接获得的,私钥Kg是只有自己才知道的。      假设你是公司老总,你给公司员工写了一封信,内容为C,现在你需...
  • donhao
  • donhao
  • 2011年08月24日 22:31
  • 441

信息安全:CISSP 密码学知识总结

本文内容是《CISSP Official Study Guide(第7版)》第6章和第7章的学习总结,这两章全面介绍了密码学的知识,本文是概要总结,可作为地图参考。...
  • ddk3001
  • ddk3001
  • 2017年01月03日 22:38
  • 1134

软件信息安全知识

保密性(confidentiality)与Integrity(完整性)和 Availability(可用性)并称为信息安全的CIA三要素 安全技术目标包括保密性(confidentiality)、 完...

信息安全概论知识点

信息安全概论知识点

一起来学信息安全知识(2)——对称密码和非对称密码

目前密码分为对称密码和非对称密码。其中,对称密码主要有DES、3DES、AES,非对称密码主要有RSA、ECC。         先举个简单的对称密码的例子。假设有一串数字123789,我们需要对其...
  • donhao
  • donhao
  • 2011年08月22日 10:50
  • 773

一起来学信息安全知识(1)——一个小故事的大道理

大概是在04年,某天晚上我们上《密码学技术与原理》课程。      老师刚站上讲台,乐呵呵的对我们说,         “我刚参加了一个国际密码学学术会议,有个人竟然声称自己破解了MD5算法,真是...
  • donhao
  • donhao
  • 2011年08月21日 20:32
  • 966
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:信息安全基础知识
举报原因:
原因补充:

(最多只允许输入30个字)