加密与解密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加密与解密相关的知识,希望对你有一定的参考价值。

安全与服务:

数据的加密和解密:

OpenSSL(TLS):ssl基本被淘汰,TLS取而代之

openssh:dropbear软件

DNS:BIND软件,功能强大,伯克利的

web server:网站服务,最重要的,工作重点 

  应用程序:httpd(ASF:apach软件基金会维护)

            engine x(nginx):引擎,web服务平台,第二,仅次于apach

--tengine  (淘宝二次开发产品)

--openresty(二次开发产品)

web archive(平台架构方式)

  LAMP:linux+apach+mariaDB开源(mysql闭源)+php(纪要会用包安装,也要回编译安装)

  LNMP:linux+Nginx+mariaDB(MySQL)+php(纪要会用包安装,也要回编译安装)


  LAMT:linux+apach+mariaDB(MySQL)+Tomcat(开源)(weblogic,websphare闭源)

  LNMT:linux+Nginx+mariaDB(MySQL)+Tomcat(开源)


文件服务器:                            邮件服务器:postfix,dovecot

  FTP:

  Samba:共享文件夹

  NFS:Windows不行,内核函数不公开


DHCP,PXE,Cobbler:


防火墙:

  在Linux2.6版本之前:iptables、netfilter

    Linux3.0之后:nftables


SELinux:


sudo,awk,pam,nsswitch










数据的加密和解密:

进程间的通信:

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

    signal

    shm

    semaphore

    message queue,MQ,RabbitMQ

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

    Socket-pair,套接字对儿;


三种进程的socket:

流套接字:基于TCP

数据报套接字:基于UDP

裸套接字、原始套接字:基于底层协议


套接字:IP:PORT

进程的地址标识

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

 大多数情况下都是从客户端到服务器的通信:对于服务器来说必须有套接字监听机制,而通常我们可以吧这个监听进程称为守护进程,或者叫服务进程

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

 端口号:

  0:默认没有被使用

  1-1023:众所周知的端口,固定端口

  1024-49151:注册端口:

    MySQL:3306

    nemcached:11211

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


安全视线的目标:

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

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

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


威胁安全的行为:

  威胁机密性的攻击行为:窃听、嗅探、扫描、通信量分析

  威胁完整性的攻击行为:更改、伪装、重放、否认

威胁可用性的攻击行为:拒绝服务(DoS)


安全解决方案:

 技术:加密和解密

  传统的加密算法:

    替代加密算法

    置换加密算法

  现代的加密算法:

    块加密算法

 服务:安全服务:

  身份认证:

  访问控制机制:

 加密方案:

  加密算法和秘钥:

 加密算法:

  对称加密算法:

  公钥加密算法:

  

对称加密算法:

  加密和解密使用统一秘钥

  特性:相同秘钥、分块加密、速度较快

  缺陷:保留的秘钥数量过多、密钥分发过于困难

主流加密算法:

  DES:数据加密标准

  NSA:3DES:

  AES:高级加密标准:

  biowfish

  twofish

  IDEA

  RCA、RC6

公钥加密算法:

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

  私钥:512bit、1024、2048、4096、8192、16384bit特定工具生成

  用途:数字签名、密钥交换、数据加密

  特点:密钥对加密、密钥长、安全高

  缺点:消耗资源时间较多,很少用来加密大数据

  数字签名:用于接收方确认身份

  密钥交换:

常用的公钥加密算法:

  RSA:加密、数字签名

  DSA:数字签名,有时被称为DSS(数字签名标准) 

  ELgamal:

单向加密算法:只能进行加密,不能解密;从已知数据中提取密码指纹

  特性:定长输出、雪崩效应

  功能:完整性

  常用算法:md5(128位定长输出)、sha系列安全哈希算法(sha-1\sha224\sha256\sha384\sha512,160位定长输出)用$#表示长度1,2,3,···

密钥交换算法:IKE

  公钥加密:

  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:公钥基础设施

 证书的签证机构:CA

 注册机构:RA

 证书吊销列表:CRL

 证书存取库:CAB


CA如何发挥其作用:

 1、通信双方互相交换证书

 2、双方协商加密算法

 3、双方验证证书的加密算法

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

 5、用同样的算法加密证书,取得特征值,与解密出来的特征值比较,证明证书完整性可靠

 6、检查证书有效期是否合法,国企则证书不被认可

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


SSL:安全套接字层协议

 94年网景公司最先发明

 微软发现漏洞,不用了

TLS:传输层安全协议

 IETF(互联网工程项目小组):于1999年提出

 分层设计:

  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;计算生成本次会话所用到的会话密钥,向客户端发送相关信息:

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


服务器端握手结束;


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

OpenSSL,gpg


以上是关于加密与解密的主要内容,如果未能解决你的问题,请参考以下文章

js中常见的数据加密与解密的方法

DES加密解密与AES加密解密

python中的RSA加密与解密

python 加密与解密

Java对称与非对称加密解密,AES与RSA

Java密码加密与解密