首页 > 代码库 > Linux学习笔记:Linux服务以及服务的安全
Linux学习笔记:Linux服务以及服务的安全
一、数据加密和解密
进程间通信:
同一主机内的进程间通信:
发送信号(signal),
共享内存(shm),
semaphore
message queue, MQ, RabbitMQ
不同主机之间的进程间通信:
Socket-pair,套接字对儿;
三种类型的套接字:
流套接字(Socket_Stream):基于TCP协议通信的套接字;
数据报套接字(Socket_Dgram):基于UDP协议通信的套接字;
裸套接字,原始套接字(Socket_Raw):基于底层协议通信的套接字
套接字Socket:IP:PORT
进程的地址标识;
一个套接字就是指某个特定主机上的特定应用程序;
大多数情况下,网络通信都是从客户端到服务器的通信;对于服务器来说,必须要有套接字的监听机制,即进程的监听模式,而通常来讲,把具有这种监听模式的进程,称为守护进程,或者叫服务进程;
服务进程所监听的套接字资源,是在其启动之前向内核申请注册得到的;而且,套接字资源是所有的服务进程独占的资源,具有排他性;
端口号:
0:默认没有被使用;
1~1023:众所周知的端口,固定的端口;
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:
AES:Advanced Encryption Standard,高级加密标准;
AES128bit,AES192bit,AES256bit
当前NSA主流选择
Blowfish
Twofish
IDEA
RC4,RC6
公钥加密算法:
采用密钥对加密
密钥分为私钥和由私钥抽取生成的公钥组成;
私钥:512bit,1024bit,2048bit,4096bit,8192bit,16384bit;
特点:
1.使用密钥对进行加密和解密;使用私钥加密的数据,必须从中抽取出来的公钥解密;使用公钥加密,必须使用与之相对的私钥才能解密;
私钥:通过特定的工具创建生成,由使用者自己留存,务必保证其私钥性;secret key或private key
公钥:从私钥中提取生成,公钥可以公开给所有人使用,public key
2.密钥长度都比较长,加密之后的数据的安全等级较高;
缺陷:
加密数据的时候,消耗的系统资源和时间都较多,很少用来加密大批量数据;
主要工作目的 用途:
数字签名;主要用于让接收方确认发送方的身份;使用发送方的私钥加密数据,到了接收方之后,使用发送方的公钥解密数据;
密钥交换:发送数据方使用接收方的公钥加密对称密钥,然后将加密后的对称密钥发给对方;
数据加密:通常用于加密小数据;
常用的公钥加密算法:
RSA:数据加密,数字签名;
DSA:数字签名算法,只能实现数字签名,有时该算法也被称为DSS(数字签名标准)
ELgamal:收费的算法
单向加密算法:
只能进行加密不能解密;从已知数据中提取密码指纹;
特性:
1.定长输出:
2.雪崩效应:
功能:
保证数据的完整性;
常用的算法:
md5:信息摘要算法的第五版
128bit定长输出;
sha系列算法:
sha-1:安全的哈希算法,160bit定长输出
sha224
sha256
sha384
sha512
密钥交换算法:IKE
公钥加密算法来实现;
DH算法:Deffie-Hellman
加密算法的联合应用:
1.通信双方互相交换证书,并到信任的CA进行证书认证;
2.发送方使用某种对称加密算法对数据进行加密;加密后的数据使用单向加密计算其特征值,发送方再用自己的私钥加密此特征值,以证明数据来源的可靠;发送方使用接收方的证书加密对称密钥;
3.接收方在收到数据之后,先使用自己的私钥解密对称密钥,然后使用发送方的公钥解密特征值,再利用相同的单向加密算法,重新结算加密数据的特征值;比较两个特征值;如果特征值一致,则表明数据完整;再用解密出来的对称密钥解密出原始数据;
证书里面主要包括:
拥有者名称;
拥有者所提交的公钥;
有效期;
证书的版本号;
证书的序列号;
签发算法ID;
签发CA的名称;
主体名称;
发证者的唯一标识;
发证者的数字签名;
扩展信息
PKI:公钥基础设施;
证书的签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:CAB
CA如何发挥其作用的:
1.通信双方互相交换证书;
2.双方协商加密算法;
3.双方验证证书的真伪
4.用CA的公钥去解密证书中CA的签名,能解密说明证书来源可靠;
5.用同样的加密算法加密证书,取得特征值,与解密出来的特征值比较,如果想同,说明证书完整性可靠;
6.检查证书的有效期是否在合法时间范围,如果过期则证书不被认可;
7.检查证书的主体名称和此次通信的目标是否能够对应;
SSL:安全的套接字层
1994年,网景公司最先声明并实施;
TLS:传输层安全协议;
IETF:互联网工程项目小组 1999年提出
TLS V1.0
2006年,TLS V1.1
2008年,提出TLS V1.2草案,将椭圆曲线加密算法引入TLS;至今未应用
分层设计:
1.最底层:基础算法的原语的实现;AES,md5,sha...
2.向上一层:各种算法的基本实现;
3.再向上一层:各种算法组合实现的半成品;
4.最高层,用各种组件拼装而成的各种成品密码学协议软件;
SSL/TLS的握手的四个阶段:
1.客户端向服务器索要证书并验证证书;
Client Hello发送的信息内容
支持的协议的版本,如:TLS V1.2
客户端生成一个随机数,稍后用户生成会话密钥;
支持的加密算法,如:AES,DES,RSA等
支持的压缩算法
2.双方协商生成会话密钥;
Server Hello发送的信息内容:
确认使用的加密协议的版本号,如:TLS V1.2
服务器生成一个随机数,稍后用于生成会话密钥
确认加密算法及压缩算法;
3.双方采用已经生成的会话密钥进行安全加密的通信;
客户端验证服务器证书,在确认无误后,取出其公钥;
验证服务器证书需要验证下述内容:
验证发证机构(CA);
验证证书的完整性
验证证书的持有者信息;
验证证书有效期
验证证书的吊销列表
客户端发送信息给服务器端:
一个随机数,用于服务器上的公钥加密;
编码格式变更通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;
客户端握手结束:
4.双方互相通告握手结束的信息;
服务器收到客户端发送来的此次握手阶段的第三个随机数;Pre_Master_key;计算生成本次会话所用到的会话密钥,向客户端发送相关信息;
编码变更通知,表示随后的信息都将用双方已经协商好的加密算法和密钥进行加密发送;
服务器端握手结束;
Linux学习笔记:Linux服务以及服务的安全