码迷,mamicode.com
首页 > 其他好文 > 详细

加密解密与OpenSSL建立私有CA

时间:2015-04-25 00:23:23      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:justify   安全性   style   加密   

  1. 安全规范:

    1)NIST规定的数据安全性标准:

    ①保密性:数据保密性;隐私性;

    ②完整性:数据完整性;系统完整性

    ③可用性:数据与服务随时可用

    2)OSI,X.800:定义了安全攻击,安全机制,安全服务

    ①安全攻击

    被动攻击:监听

    主动攻击:报文伪装、重放、消息篡改、拒绝服务(将有限资源耗尽,使得正常资源无法访问DDOS)

    ②安全机制

    加密/解密,数字签名,访问控制,数据完整性保证,认证交换,数据填充,路由控制,人为公证

    ③安全服务

    认证

    访问控制

    数据保密性:

    连接保密性

    无连接保密性

    选择域保密性:保密指定的部分

    流量保密性

    数据完整性

    不可否认性

二、密码算法和协议:

1.对称加密:【AES】DES,AES,BlowFish,TwoFish,IDEA,RC6,CAST5

(1)常见算法:

DES :Data Encryption Standard ,56bits,IBM研究出来的,

3DES :

AES :Advanced Encrpytion Standard,(128bits,192,256,384,512bits),超越现有计算能力

BlowFish :

TwoFish :

IDEA :

RC6 :

CAST5 :

(2)特性:

① 加密、解密使用同一密钥

② 加密原理:将明文分割成固定大小的块,并逐个进行加密。

③ 安全性依赖于密钥而非算法;因为算法可以公开

(3)缺陷:

① 密钥过多,尤其是通信对象过多时,

② 密钥分发,过程中的潜在风险

(4)加密工具:openssl enc,gpg

Enc实现:

# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMEFILE

# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMEIPHERFILE -out /PATH/TO/SOMEFILE

2.公钥加密(非对称加密):【RSA】,DSA,Algorithm,ELGamal

(1)常见算法:

①RSA :即可做身份认证,也可做密钥交换

②DSA :身份认证数字签名,Digital Signature Algorithm,Digital Signature Standard

③ELGamal :

(2)特点:

① 密钥成对出现;

私钥:Secret Key,仅允许个人使用

公钥:Public Key,公开给所有人获得,公钥从私钥中提取而来

③ 使用公钥加密的数据,只能使用与此公钥配对的私钥解密;反之亦然

④ 密钥长度较大,例如512bits,1024,2048,4096bits

⑤ 常用于数据签名和密钥交换

(3)用途:

① 身份认证: 私钥拥有者用自己的私钥加密的数据,其他人只需要用其公钥解密,即可认证其身份;

② 密钥交换:任何个人与被通信方通信之前,首先获取到对方的公钥,然后自己生成一个加密(对称加密)的密码,然后用对方的公钥加密,饭后发送给对方。

③ 数据加密:很少使用,因为密码太长,速度很慢,不实用,性能很差。

(4)加密工具:gpg,openssl genrsa,elgamal,openssl rsautl

1)数字签名:RSA,DSA(DSS),ELGamal

2)生成密钥对儿:

①手动生成私钥:gendsa,gendh,genrsa(最常用)

# openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS

-out :生成密钥文件输出到那个文件

NUM_BITS :指定密钥长度,512,1024,2048,4096

△Tips:生成的文件的权限一定要修改,否则,其他人都可以r。

Tips:在bash命令行上放在小括号中执行的命令,其实是通过打开一个子shell进程进行的

# (umask 077;openssl genrsa -out /path/to/private_key_file NUM_BITS)

②从私钥中手动提取公钥:

# openssl rsa -in /path/from/private_key_file -pubout -out /path/to/pubkey_file

-in :输入私钥文件路径

-putout :输出为公钥(默认私钥)

-out :输出公钥文件路径

3.单向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32

(1)常见算法:

MD5 :128bits,2^128

SHA1 :160bits,2^160

SHA256 :256,2^256

SHA384 :384,2^384

SHA512 :512 /etc/passwd,2^512

CRC32 :用于奇偶校验,循环冗余校验码

(2)特性:

① 提取数据的特征码,结果定长输出:无论原来的数据有多大级别,其加密结果长度一样;

② 整个加密过程不可逆;

③ 雪崩效应:原始数据微小的变化,将会导致结果的巨大变化

④ 常用于数据的完整性校验

⑤ 数据特征码的提取,该加密严重依赖算法,

(3)加密工具:openssl dgs,md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum

# openssl dgst -CIPHER /PATH/TO/SOMEFILE

(4)MAC:消息认证码,单项加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性:高可用集群中会用到。

机制:

CBC-MAC:

HMAC:使用 md5 或 SHA1 算法。更常见

4.数字签名:

保证数据完整性,不保证其私密性;

他人可以随意看,但不能随意改

5.密钥交换协议:IKE ,Internet Key Exchange协议,

有两种常见算法

(1)公钥加密算法:

用对方的公钥加密密码并发送给对方,然后用该加密的密码实现加密通信

(2)Deffie-Hellman :密码在互联网上没有传送。

找一个大的素数,对其求N次方后,做开根运算,在现有计算能力下无能为力。

A:

P,G,(公开)

X (私有)

P^X%G

从B 拿到:(P^Y%G)^X=P^XY%G(密码)

B:

公开:P,G (公开)

私有:Y (私有)

P^Y%G

从A拿到:(P^X%G)^Y=P^XY%G(密码)

6.随机数生成:random urandom

1)熵池(entropy pool):保存硬件中断产生的随机数;实质上是内存中的一段存储空间。被映射成为设备文件"/dev/random,/dev/udandom",特殊字符设备

2)获取当前主机上的硬件中断信号,中断间隔时长(一般为硬盘)来生成随机数。

【软件生成的随机数叫伪随机数。】

3)随机数设备:

  1. /dev/random:仅从熵池总返回随机数,当熵池中的随机数耗尽时,取随机数的进程将被阻塞;设备号(1.8)
  2. /dev/urandom:先从熵池中取随机数,当熵池中的随机数耗尽时,就通过伪随机数生成器(软件方式)生成随机数;设备号(1.9)
  3. 生成随机数:openssl rand:

# openssl rand -hex | -base64 NUM

-hex :十六进制

-base64 :文本编码方式

NUM :生成密码位数。

PKI:public Key Infrastructure,公钥基础设施

签证机构;CA

注册机构:RA

证书吊销列表;CRL

证书存取库

SSL:secure socket layer,安全的套接字层,协议

版本:

v1,不安全

v2,

v3,

实现:OpenSSL

TLS:transport layer security

v1=SSLv3

三、一次安全的加密通信过程:

1)发送方:

① 使用单向加密算法提取生成数据的 特征码 ;

单向加密>特征码+特征码===>数据完整性

② 使用自己的 私钥 加密 特征码 附加在数据后面

公钥加密>[特征码密文]+数据====>数据完整性

③ 生成用于对称加密的 临时密钥 ;用此 临时密钥 加密数据和已经使用私钥加密后的特征码;

对称加密>[密文[特征码密文]+数据]]===>数据安全性

⑤ 使用接收方的 公钥 加密此 临时密钥 ,附加在对称加密后的数据后方。

公钥加密(对方)>[临时密钥][密文[特征码密文]+数据]]===>密钥安全性

2)接受方:

① 使用自己的私钥解密加密的临时密钥,从而获得对称密钥;

② 使用对称密钥解密对称加密的数据和私钥加密的特征码密文,从而获得数据和特征码的密文;

③ 使用发送方的公钥解密特征码密文,从而获得数据的特征码

④ 使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较,验证数据的完整性和隐私性。

Tips:以上过程的唯一漏洞之处只有 使用对方的公钥加密临时密钥!如何安全的得到对方的公钥??故而需要对接受方做数字签名认证。

四、数字证书:

1. CA:由拥有公信力的第三方机构(CA机构),创建并被CA或用户放到目录服务器中供其他用户检索的数字格式的用户私有信息。

2. CA机构功能:保证公钥信息安全分发。给每个人的公钥做签名,以认可其身份。让用户安全的得到对方的公钥信息。

CA之间的交叉信任:

双方CA的互信,均从根证书机构拿到证书。

CA给每个证书的信息提取特征码,并用自己的私钥加密,附加到证书后面。用户验证时,用CA的公钥来提取特征码,并验证数据的完整性。

3.数字证书功能:

让通信的双方,都能够安全可靠的获得自己的身份认证标识,并且能够被通信的对方所认可。

4.数字证书的格式:

1)v1

版本号(Version):必须标识清楚,否则无法识别格式

序列号(serial number):CA用于唯一表示此证书;

签名算法标识(signature algorithm identifier):用于验证证书可靠性

发行者的名称:即CA自己的名称;

有效期:两个日期,起始日期和终止日期;

证书主体名称:证书拥有者名字

证书主体公钥信息:证书拥有者公钥

签名:CA对此证书的数字签名

2)v2

版本号(Version):必须标识清楚,否则无法识别格式

序列号(serial number):CA用于唯一表示此证书;

签名算法标识(signature algorithm identifier):

发行者的名称:即CA自己的名称;

有效期:两个日期,起始日期和终止日期;

证书主体名称:

证书主体公钥信息:

发行商的唯一标识:CA ID

证书主体的唯一标识:证书属主ID

签名:CA对此证书的数字签名

3)v3

版本号(Version):必须标识清楚,否则无法

加密解密与OpenSSL建立私有CA

标签:justify   安全性   style   加密   

原文地址:http://wbcla.blog.51cto.com/9367213/1638169

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!