Linux Service and Security


数据的加密和解密

OpenSSL(SSL/TLS)

OpenSSH(ssh)   dropbear

BIND(dns)

Web Server:

httpd(Apache Software Foundation,ASF:apache软件基金会)

nginx(Engine X)——Tengine

——openresty


Web Archive:

LAMP:Linux + Apache + MariaDB(MySQL) + php

LNMP:Linux + nginx + MariaDB(MySQL) + php


LAMT:Linux + Apache + MariaDB(MySQL) + Tomcat(Weblogic,Websphare)

LNMT:Linux + nginx + MariaDB(MySQL) + Tomcat


FileServer:

FTP

Samba

NFS


Mail Server:

Postfix

dovecot


DHCP,PXE,Cobbler


防火墙:

Linux 2.6 -:iptables/netfilter

Linux 3.0 +:nftables


SELinux:


sudo,awk,pam,nsswitch


一、数据加密和解密


进程间通信:

同一主机内的进程间通信:

signal

shm

semaphore

message queue,MQ,RabbitMQ


不同主机之间的进程间通信:

Socket-pair,套接字对儿;


三种类型的Socket:

流套接字(Socket_Stream):基于TCP协议通信的套接字;

数据报套接字(Socket_Dgram):基于UDP协议通信的套接字;

裸套接字,原始套接字(Socket_Raw):基于底层协议通信的套接字


套接字Socket:IP:PORT

进程的地址标识;

一个套接字就是指某个特定主机上的特定应用程序;


大多数情况下,网络通信都是从客户端到服务器的通信;对于服务器来说,必须要有套接字的监听机制,即进程的监听模式;而通常来讲,把具有这种监听模式的进程,称为守护进程,或者叫服务进程;


服务进程所监听的套接字资源,是在其启动之前向内核申请注册得到的;而且,套接字资源是所有的服务进程独占的资源,具有排他性;


端口号:

0:默认没有被使用;

1~1023:Well-Known,众所周知的端口,固定的端口;

22, 23, 20, 21, 25, 67, 68, 69, 80, 110, 139, 143, 443, 445,...

1024~49151:注册端口

MySQL:3306

Memcached:11211

Tomcat:8091

49152~65535:动态端口,为客户端进程提供的随机选择端口;


安全实现的目标:

机密性:confidentiality,保证信息不泄漏;

完整性:integrity,保证信息不被篡改;

可用性:availability,保证信息内在价值;


威胁安全的行为:

威胁机密性的攻击行为:

窃听

嗅探

扫描

通信量分析


威胁完整性的攻击行为:

更改

伪装

重放

否认


威胁可用性的攻击行为:

拒绝服务(DoS)


安全解决方案:

技术:加密和解密;

传统的加密方法:

替代加密算法;

置换加密算法;

现代的加密方法:

块加密算法;


服务:安全服务;

身份认证;

访问控制机制;


加密方案:

加密算法和密钥:


加密算法:

对称加密算法

公钥加密算法

单向加密算法

密钥交换算法


对称加密算法:

加密和解密使用同一密钥;

特性:

1.每对通信主机都需要保有一个相同密钥,用于加密和解密;

2.将原始数据分割成固定大的块,逐个加密;

3.加密和解密的速度比较快;


缺陷:

1.加密解密所需要保有的密钥数量过多;

2.密钥分发过于困难;


主流加密算法:

DES:Data Encryption Standard,数据加密标准;

56bit密钥,64bit块,

NSA:

3DES:triple DES,

AES:Advanced Encryption Standard,高级加密标准;

AES128bit,AES192bit,AES256bit

Blowfish

Twofish

IDEA

RC4,RC6


公钥加密算法:

密钥分为私钥和由私钥抽取生成的公钥组成;

私钥:512bit,1024bit,2048bit,4096bit,8192bit,16384bit;


特点:

1.使用密钥对进行加密和解密:使用私钥加密的数据,必须从中抽取出的公钥解密;使用公钥加密,必须使用与之相对的私钥才能解密;

私钥:通过特定的攻击创建生成,由使用者自己留存,务必保证其私密性;secret key或private key;

公钥:从私钥中提取生成,公钥可以公开给所有人使用;public key;

2.密钥长度都比较长,加密之后的数据的安全等级较高;


缺陷:

加密数据的时候,消耗的系统资源和时间都较多;很少用来加密大批量数据;


用途:

数字签名:主要用于让接收方确认发送方的身份;使用发送方的私钥加密数据,到了接收方之后,使用发送方的公钥解密数据;


密钥交换:发送数据的一方使用接收方的公钥加密对称密钥,将加密后的对称密钥发给对方;


数据加密:通常用于加密小数据;


常用的公钥加密算法:

RSA:加密,数字签名;

DSA:Digital Signature Algorithm,数字签名算法;只能实现数字签名的功能;有时候该算法被称为DSS,Digital Signature Standard;

ELgamal:


单向加密算法:

只能进行加密不能解密;从已知数据中提取密码指纹;


特性:

1.定长输出;

2.雪崩效应;


功能:

保证数据的完整性;


常用的算法:

md5:Message Digest Version 5,信息摘要算法的第5版;

128bit定长输出;

sha系列:

sha-1:Secure Hash Algorithm,安全哈希算法;160bit定长输出;

sha224:

sha256:

sha384:

sha512:


密钥交换算法:IKE(Internet Key Exchange)

公钥加密;

DH算法:Deffie-Hellman

A:p, g

B:p, g


A:x

B:y


A:p^x%g   ---->  B:(p^x%g)^y == p^xy%g

B:p^y%g   ---->  A:(p^y%g)^x == p^yx%g


加密算法的联合应用:

1.通信双方互相交换证书,并到信任的CA进行证书验证;

2.发送方使用某种对称加密算法对数据进行加密;对加密后的数据使用单向加密计算其特征值;发送方再用自己的私钥加密此特征值,以证明数据来源的可靠;发送方使用接收方的证书加密对称密钥;

3.接收方在收到数据之后,先使用自己的私钥解密对称密钥;然后使用发送方的公钥解密特征值,再利用相同的单向加密算法,重新结算加密数据的特征值;比较两个特征值;如果特征值一致,则表明数据完整;再用解密出来的对称密钥解密出原始数据;


国际标准化组织(ISO)定义了证书的结构和认证标准:X.509协议标准:

证书里面主要包括:

拥有者的名称;

拥有者所提交的公钥;

有效期;

证书的版本号;

证书的序列号;

签发算法ID;

签发CA的名称;

主体名称;

发证者的唯一标识;

发证者的数字签名;

扩展信息;


PKI:Public Key Infrastructure,公钥基础设施;

证书的签证机构:CA

注册机构:RA

证书吊销列表:CRL,Certification Revoke List;

证书存取库:CAB,Certification Access Base;


CA如何发挥其作用的:

1.通信双方交换证书;

2.双方协商加密算法;

3.双方验证证书的真伪;

4.用CA的公钥解密证书中CA的签名,能解密说明证书来源可靠;

5.用通用的加密算法加密证书,取得特征值;与解密出来的特征值比较,如果相同,说明证书完整性可靠;

6.检查证书的有效期是否在合法时间范围,如果过期则证书不被认可;

7.检查证书的主体名称和此次通信的目标是否能够对应;


SSL:Secure Socket Layer,安全的套接字层;

1994年,Netscape(网景)公司最先声明并实施;

SSL V1.0

SSL V2.0

SSL V3.0


TLS:Transport Layer Security,传输层安全;

IETF:Internet Engineering Task Force,互联网工程项目小组;

1999年提出;


TLS V1.0

2006年,TLS V1.1

2008年,TLS V1.2草案,将椭圆曲线加密算法引入TLS;


分层设计:

1.最底层:基础算法的原语的实现;AES,md5,sha……

2.向上一层:各种算法的基本实现;

3.再向上一层:各种算法组合实现的半成品;

4.最高层,用各种组件拼装而成的各种成品密码学协议软件;


SSL/TLS的handshake(握手)的四个阶段:

1.客户端向服务器索要证书并验证证书;

Client Hello发送的信息内容:

支持的协议的版本,如:TLS V1.2;

客户端生成一个随机数,稍后用于生成会话密钥;

支持的加密算法,如:AES,DES,RSA等;

支持的压缩算法;


2.双方协商生成会话密钥;

Server Hello发送的信息内容:

确认使用的加密协议的版本号,如:TLS V1.2;

服务器生成一个随机数,稍后用于生成会话密钥;

确认加密算法及压缩算法;


3.双方采用已经生成的会话密钥进行安全加密的通信;

客户端验证服务器证书,在确认无误后,取出其公钥;


验证服务器证书需要验证下述内容:

验证发证机构(CA);

验证证书的完整性;

验证证书的持有者信息;

验证证书的有效期;

验证证书的吊销列表;


客户端发送信息给服务器端:

一个随机数,用于服务器上的公钥加密;

编码格式变更通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;


客户端握手结束;


4.双方互相通告握手结束的信息;

服务器收到客户端发送来的此次握手阶段的第三个随机数Pre-Master_key;计算生成本次会话所用到的会话密钥,向客户端发送相关信息:

编码变更通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;


服务器端握手结束;


要想实现加密的功能,依赖于应用程序;

OpenSSL,gpg