NIST:美国国家标准与技术研究院提出的数据安全大致包含如下内容:
安全攻击分为主动攻击和被动攻击:
主动攻击:窃听
被动攻击:伪装、重放、消息篡改、拒绝服务
安全机制主要有:
加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证
安全服务:
加密算法和协议:
对称加密:
加密和解密使用同一个密钥;
使用到的算法主要有:DES,3DES,AES, BlowFish,Twofish,IDEA,RC6,CAST5。
主要特点有:
1、加密解密使用同一个密钥,加密解密的速度很快;
2、将明文数据分隔成固定大小的块,逐个进行加密,一般来说,这些数据块是同样大小的;
缺点:
1、需要记录的密钥数量过于庞大;
2、在进行密钥分发的时候,无法对方的身份;
公钥加密:
密钥是成对出现的,其中一个是公钥,一个是私钥;
公钥:公开给所有人的;
私钥:自己留存,必须保证其私密性;
特点:
被公钥加密的数据,必须使用与之配对的私钥进行解密;
数字签名:主要在于让接收方确认发送方身份;
密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
主要使用到的算法有:RSA, DSA, ELGamal这三种算法。
在算法的实现上,公钥加密的速度比对称加密的速度慢上至少三个数量级,所以,一般不赞成使用公钥加密。
单向加密:
单向加密,顾名思义,就是只能加密,不能解密。主要是通过提取数据指纹实现,数据指纹就是数据的特征码,能够唯一的标识数据自身。
特点:
定长输出:无论原始数据是多大的级别,最后加密完毕的结果长度都是一样的。
雪崩效应:就是如果数据本身发生了微小的变化,那么,加密之后的数据会产生巨大的变化。
功能:保证了数据的完整性。
常用的算法有:md5、sha1、sha224、sha256、sha384、sha512等算法。
密钥交换:
公钥加密实现:发送方使用接收方的公钥加密自己的密钥,接收方使用自己的私钥解密得到发送方的密钥,反之,采用同样的方式,从而实现密钥之间的交换,保证了密钥的安全性。
使用DH算法实现:前提发送方和接受方协商使用同一个大素数P和生成数g,各自产生的随机数X和Y。发送方将g的X次方mod P产生的数值发送给接收方,接受方将g的Y次方mod P产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成。
PKI:Public Key Infrastructure
翻译过来就是公钥基础设施,PKI是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
基本构成:签证机构(CA)、注册机构(RA)、证书吊销列表(CRL)、证书存取库等构成。
CA:作为整个电子认证系统的核心,主要负责证书的颁发、注销以及证书注销列表的管理等核心内容。
RA:是CA证书发放、管理的延伸部分。它负责所有证书申请者的相关信息的录入以及信息审核等方面的工作,同时对已经发放的证书进行管理。
CRL:就是已经不被CA认可的证书的一个数据库,在查看证书的时候,会自动与证书吊销列中的信息比较,查看是否该证书已经失效。
X.509:定义了证书的结构以及认证协议标准,包含以下内容;
版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者惟一标识、主体的惟一标识、扩展、发行者签名等主要信息。
SSL: Secure Socket Layer
TLS: Transport Layer Security
OpenSSL:
是一个开源项目。它主要有三个组件openssl、libcrypto、libssl。
openssl: 多用途的命令行工具;
libcrypto: 公共加密库;
libssl: 库,实现了ssl及tls;
OpenSSL相关的命令:
openssl version:查看openssl的版本号信息;
enc命令:
# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext #进行加密 # openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab #进行解密
dgst命令:主要用于数字摘要。
openssl dgst -md5 /PATH/TO/SOMEFILE
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
passwd命令:
openssl passwd -1 -salt SALT #主要是用来生成用户密码,SALT是指加入的杂质(字符串)
rand命令:主要是为了生成随机数。
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
生成密钥对儿:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
# (umask 077; openssl genrsa -out key.pri 2048)
提取出公钥:
# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
随机数生成器:
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;
scp命令:
scp [options] SRC... DEST/
存在两种情形:
PULL:scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE
PUSH: scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE
常用选项:
-r: 递归复制;
-p: 保持原文件的属性信息;
-q: 静默模式
-P PORT: 指明remote host的监听的端口
证书申请及签署步骤:
1、生成申请请求;
2、RA核验;
3、CA签署;
4、获取证书;
创建私有CA:
openssl的配置文件:/etc/pki/tls/openssl.cnf
(1) 创建所需要的文件
# touch index.txt # echo 01 > serial #证书序列号从1开始
(2) CA自签证书
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) # openssl req -new -x509 -key /etc/pki/CA/private/cakey.epm -days 7300 -out /etc/pki/CA/cacert.pem
-new: 生成新证书签署请求;
-x509: 专用于CA生成自签证书;
-key: 生成请求时用到的私钥文件;
-days n:证书的有效期限;
-out /PATH/TO/SOMECERTFILE: 证书的保存路径;
(3) 发证
(a) 用到证书的主机生成证书请求;
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) # openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr
(b) 把请求文件传输给CA;
(c) CA签署证书,并将证书发还给请求者;
# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365 #CA签署证书
查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
(4) 吊销证书
(a) 客户端获取要吊销的证书的serial
# openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
(b) CA
先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;
吊销证书:
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
(c) 生成吊销证书的编号(第一次吊销一个证书)
# echo 01 > /etc/pki/CA/crlnumber
(d) 更新证书吊销列表
# openssl ca -gencrl -out thisca.crl
查看crl文件:
# openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
创建私有CA以及颁发证书的详细步骤见博客http://angrybird.blog.51cto.com/10503706/1699788