当前位置: 首页 > news >正文

加密算法与安全认证

简述:

重要的数据在互联网中进行传输的时候必须保证数据的安全性,需从四个方面来做:

1.保证数据是从真正的源发送的,而不是其他人(源认证)

2.保证数据在传输的过程中没有被篡改过(数据的完整性)

3.保证数据在传输的过程中别人看不懂(数据的私密性)

4.保证数据的不可否认性(不可否认性)

加密算法

1、对称加密

概念:加密和解密使用同一个秘钥

算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等

优点:效率高;将数据分割成固定大小的块,逐个进行加密

缺点:每一个通信就需要一个秘钥;秘钥传递不安全;无法确定数据来源

2、非对称加密

公钥与私钥:公钥是公开给所有人的;私钥是只有自己知道;通过私钥可以推算出公钥,但是通过私钥无法退出公钥;使用公钥加密必须使用私钥解密,或者使用私钥加密必须使用公钥解密;公私钥必须成对出现

算法:RSA、DSA、ELGamal

优缺点:可以实现数字签名来验证数据来源;可以安全的交换对称秘钥;可以实现时间加密,但是对应大的数据解密时效率太低,适合加密少量数据

3、单向散列(hash)

特性:

1)雪崩效应:数据不同,摘要一定大不同

2)单向:不可反推数据

3)摘要长度固定大小

算法:md5:128、sha1:160、sha224、sha256、sha384、sha512

功能:用来验证数据的完整性

4、秘钥交换算法(DH)

1)A和B协商生成公开的整数a,大素数p

2)A:生成隐私数据 :x(x<p),计算得出 a^x%p,发送给B;B:生成隐私数据 :y(y<p),计算得出 a^y%p,发送给A

3)A:计算得出 [(a^y%p)^x] %p = a^xy%p,生成为密钥;B:计算得出 [(a^x%p)^y] %p = a^xy%p,生成为密钥

5、在安全通信过程中:

Alice:

1)原数据通过hash算法得出一个摘要;

2)用Alice的私钥加密摘要;

3)将加密的摘要和原数据一块使用对称秘钥加密;

4)再用BOB的公钥将对称秘钥加密;

5)密文数据发送————>

Bob:

1)<————接受密文数据;

2)使用Bob的私钥解密对称秘钥;

3)使用对称秘钥解密原数据和加密后的摘要;

4)使用Alice的公钥解密摘要;

5)计算原数据的hash摘要并和解密后的摘要进行比较,从而确定原始数据的完整性。

CA和证书

数字证书认证机构(Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

PKI:公开密钥基础建设,包括签证机构(CA)、注册机构(RA)、证书吊销列表(CRL)以及证书存取库。

X.509:定义了证书的结构以及认证协议标准,包括版本号、序列号、签名算法、颁发者、有效期限、主体名称、主体公钥、CRL分发点、扩展信息、发行者签名等信息

CA证书颁发机构分根CA和子CA,根ca的证书为自签证书,然后再为子CA颁发证书;用户只要信任了根CA的证书则就是信任了子CA颁发的证书。

相关配置文件:/etc/pki/tls/openssl.cnf

####################################################################
[ ca ]
default_ca      = CA_default            #默认CA,在一台服务器可以搭建多个CA
[ CA_default ]                #默认CA的配置
dir             = /etc/pki/CA           #工作目录
certs           = $dir/certs            #存放证书
crl_dir         = $dir/crl              #存放证书吊销列表
database        = $dir/index.txt        #数据库索引文件,需要手动创建
new_certs_dir   = $dir/newcerts         #新证书的路径
certificate     = $dir/cacert.pem       #CA的证书文件
serial          = $dir/serial           #下一个要颁发的证书序列号,16进制
crlnumber       = $dir/crlnumber        #下一个要吊销的证书序列号
crl             = $dir/crl.pem          #证书吊销列表
private_key     = $dir/private/cakey.pem#CA的私钥文件
RANDFILE        = $dir/private/.rand    #生成私钥需要用到的随机数文件
default_days = 365 #默认颁发证书的有效期 default_crl_days= 30 #30天发布一次证书吊销列表 default_md = sha256 # preserve = no # policy = policy_match      #策略匹配,定义客户端和服务端申请证书时的信息匹配策略 [ policy_match ] countryName = match      #必须匹配 stateOrProvinceName = match organizationName = match organizationalUnitName = optional   #不要求必须匹配 commonName = supplied    #必须提供 emailAddress = optional

示例:搭建一个私有CA

服务端搭建:

1、生成CA的私钥

# (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

2、生成自签证书

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:ca.test.com 
Email Address []:
  • -new: 生成新证书签署请求
  • -x509: 专用于CA生成自签证书
  • -key: 生成请求时用到的私钥文件
  • -days n:证书的有效期限,单位是day,默认是365天
  • -out /PATH/TO/SOMECERTFILE: 证书的保存路径

3、创建必要的文件

# touch /etc/pki/CA/index.txt
# echo 01 >/etc/pki/CA/serial
# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates]  查看证书信息

客户端生成注册申请请求:

1、生成私钥

# (umask 077; openssl genrsa -out app.key 1024)

2、生成签署请求

# openssl req -new -key app.key -out app.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:it
Common Name (eg, your name or your server's hostname) []:app.test.com
Email Address []:
A challenge password []:
An optional company name []:

3、将签署请求发送给CA

# scp app.csr 192.168.0.7:/etc/pki/CA/

服务器端签署:

1、签署颁发

# openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100

2、将签署后的证书发回客户端

# scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root

CA吊销证书的管理

复制代码
生成吊销列表
[root@centos7 CA]# echo 01 >/etc/pki/CA/crlnumber
[root@centos7 CA]# openssl ca -gencrl -out crl.pem

查看吊销列表
[root@centos7 CA]# openssl crl -in crl.pem -noout -text

查看证书状态
[root@centos7 CA]# cat index.txt
V(正常证书)       180826054533Z           01      unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
[root@centos7 CA]# openssl ca -status 01
Using configuration from /etc/pki/tls/openssl.cnf
01=Valid (V)(正常证书)

吊销证书
[root@centos7 CA]# openssl ca -revoke newcerts/01.pem 
[root@centos7 CA]# cat index.txt
R  (已被吊销)     180826054533Z   180518060712Z   01      unknown
/C=CN/ST=BJ/O=test/OU=it/CN=www.test.com

管理工具

gpg:GunPG

  • -c file:加密文件
  • -o file -d file.gpg:解密文件
  • --gen-key:生成非对称秘钥
  • --list-keys:查看已有公钥
  • -e -r keyname file:使用指定公钥加密文件
  • --import filename.pubkey:导入公钥
  • -a --export -o filename.pubkey:导出公钥
  • --delete-secret-keys keyname:删除私钥
  • --delete-keys keyname:删除公钥
# rngd -r /dev/urandom  #提供随机数来生成秘钥

openssl:

多用途的工具集

OpenSSL 是一个开源项目,其组成主要包括一下三个组件:
openssl:多用途的命令行工具
libcrypto:加密算法库
libssl:加密模块应用库,实现了ssl及tls

openssl可以实现:秘钥证书管理、对称加密和非对称加密 

对称加密需要使用的标准命令为 enc ,用法如下:
常用选项有:
-in filename:指定要加密的文件存放路径
-out filename:指定加密后的文件存放路径
-salt:自动插入一个随机数作为文件内容加密,默认选项
-e:可以指明一种加密算法,若不指的话将使用默认加密算法
-d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致
-a/-base64:使用-base64位编码格式

生成随机数需要用到的标准命令为 rand 

常用选项有:
-out file:将生成的随机数保存至指定文件中
-base64:使用base64 编码格式
-hex:使用16进制编码格式

 

转载于:https://www.cnblogs.com/yaun1498078591/p/9069160.html

相关文章:

  • Oracle体系结构及备份(十七)——bg-others
  • 记第四次和第五次面试——两次奇葩的面试
  • ASP.NET MVC Area 的使用
  • linux为什么要安装字体
  • 剥光投入,还要防止阻塞
  • js基本数据类型不妨回头再看看
  • php安全编程: register_globals的安全性
  • 关于http和一次完整的前后端响应
  • 献给在这个世界上摇摆不定的朋友们
  • 浏览器的event loop,一起来了解下吧
  • linux date
  • Storm:最火的流式处理框架
  • Objective-C语法之NSArray和NSMutableArray
  • 腾讯首发汽车解决方案 助力广汽打造新智能网联云平台
  • 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection Dictionary的支持
  • 【347天】每日项目总结系列085(2018.01.18)
  • Hibernate【inverse和cascade属性】知识要点
  • HTTP那些事
  • IP路由与转发
  • Javascript基础之Array数组API
  • Vue--数据传输
  • 翻译--Thinking in React
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 思考 CSS 架构
  • 小程序 setData 学问多
  • 一份游戏开发学习路线
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 因为阿里,他们成了“杭漂”
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • #{}和${}的区别?
  • #100天计划# 2013年9月29日
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (java)关于Thread的挂起和恢复
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (力扣)1314.矩阵区域和
  • (已解决)什么是vue导航守卫
  • (转载)OpenStack Hacker养成指南
  • (转载)从 Java 代码到 Java 堆
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net Signalr 使用笔记
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .net打印*三角形
  • /bin、/sbin、/usr/bin、/usr/sbin
  • [17]JAVAEE-HTTP协议
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [AIGC] 如何建立和优化你的工作流?
  • [BJDCTF2020]The mystery of ip1
  • [bzoj2957]楼房重建
  • [C++]C++基础知识概述