加解密和签名验签简述


一. 数字加密算法

  • 数字加密算法中,通常可划分为对称加密非对称加密

1. 对称加密

  1. 概念:加密和解密使用同一个密钥,所以叫做对称加密。
  2. 常见的对称加密算法:DES,AES。
    在这里插入图片描述

2. 非对称加密

  1. 概念:加密和解密使用两个的密钥,一把作为公开的公钥(Public Key),另一把作为私钥(Private Key)。因为加密和解密使用的不是同一把密钥,所以这种算法称为非对称加密算法。
    • 公钥和私钥成对存在,通常【公钥加密,私钥解密】;
    • 公钥是基于私钥而存在的。通过私钥经过一系列算法是可以推导出公钥,但无法通过公钥反向推倒出私钥。
  2. 常见的非对称加密算法:RSA,ECC。

在这里插入图片描述

3. 对称加密和非对称加密的区别

  1. 对称加密:加解密效率高。但在非安全信道中通讯时,密钥交换的安全性不能保障。
  2. 非对称加密:加解密效率低,但可以保证密钥安全性。
  3. 通常在实际的网络环境中,会将两者混合使用。两者混合使用的示例如下:

在这里插入图片描述


二. 使用keytool生成证书

1. 创建证书

  1. 新建文件夹:/xxx/keytool_study
  2. 创建证书,并存放到密钥库中:使用keytool命令

zijikanwa-mac:keytool_study zijikanwa$ keytool -genkeypair -alias “test1” -keyalg “RSA” -keystore “test.keystore”

  • 说明
    • 两次输入密码时,第一次输入的是密钥库(keystore)的密码,第二次输入的是证书条目的密码
    • 命令含义:创建一个别名为test1的证书条目,该条目存放在名为test.keystore的密钥库中,若test.keystore密钥库不存在则创建。
    • 命令的参数说明:
      • -genkeypair:生成一对非对称密钥;
      • -alias:指定密钥对的别名,该别名是公开的;
      • -keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
      • -keystore:密钥库的路径及名称。如果不指定,默认在操作系统的用户目录下生成一个".keystore"的文件
  • 执行结果
zijikanwa-mac:keytool_study zijikanwa$ keytool -genkeypair -alias "test1" -keyalg "RSA" -keystore "test.keystore"
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  zijikanwa
您的组织单位名称是什么?
  [Unknown]:  alihealth.com    
您的组织名称是什么?
  [Unknown]:  alihealth
您所在的城市或区域名称是什么?
  [Unknown]:  beijing
您所在的省/市/自治区名称是什么?
  [Unknown]:  beijing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  cn
CN=zijikanwa, OU=alihealth.com, O=alihealth, L=beijing, ST=beijing, C=cn是否正确?
  [否]:  y

输入 <test1> 的密钥口令
	(如果和密钥库口令相同, 按回车):  
再次输入新口令: 

2. 查看密钥库

  • 命令说明:查看名为test.keystore的密钥库中的证书条目

zijikanwa-mac:keytool_study zijikanwa$ keytool -list -keystore test.keystore

2.1 keytool -list 命令
zijikanwa-mac:keytool_study zijikanwa$ keytool -list -keystore test.keystore
输入密钥库口令:  
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

test1, 2020-5-18, PrivateKeyEntry, 
证书指纹 (SHA1): 6D:B8:E6:E5:E5:2D:D0:5B:AF:5B:16:4D:5E:05:6B:C7:21:DD:D1:6A
2.2 keytool -list -v 命令

zijikanwa-mac:keytool_study zijikanwa$ keytool -list -v -keystore test.keystore

zijikanwa-mac:keytool_study zijikanwa$ keytool -list -v -keystore test.keystore
输入密钥库口令:  
密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: test1
创建日期: 2020-5-18
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=zijikanwa, OU=alihealth.com, O=alihealth, L=beijing, ST=beijing, C=cn
发布者: CN=zijikanwa, OU=alihealth.com, O=alihealth, L=beijing, ST=beijing, C=cn
序列号: 5a0e9666
有效期为 Mon May 18 14:53:09 CST 2020 至 Sun Aug 16 14:53:09 CST 2020
证书指纹:
	 MD5:  6B:2D:30:CA:D0:C9:22:6C:2E:88:6A:4D:02:E2:58:FB
	 SHA1: 6D:B8:E6:E5:E5:2D:D0:5B:AF:5B:16:4D:5E:05:6B:C7:21:DD:D1:6A
	 SHA256: B9:20:43:76:D3:2A:17:BC:82:79:C5:CF:9F:56:49:E5:68:3E:75:9A:CF:0A:D5:A8:8C:AC:FD:54:3C:E0:AD:A5
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

3. 将密钥库中的证书条目导出到证书文件

zijikanwa-mac:keytool_study zijikanwa$ keytool -export -alias test1 -file test.crt -keystore test.keystore
命令含义:将名为test.keystore的证书库中别名为test1的证书条目导出到证书文件test.crt中

zijikanwa-mac:keytool_study zijikanwa$ keytool -export -alias test1 -file test.crt -keystore test.keystore
输入密钥库口令:  
存储在文件 <test.crt> 中的证书

4. 查看证书文件test.crt的信息

zijikanwa-mac:keytool_study zijikanwa$ keytool -printcert -file “test.crt”
命令含义:查看证书文件test.crt的信息

zijikanwa-mac:keytool_study zijikanwa$ keytool -printcert -file "test.crt"
所有者: CN=zijikanwa, OU=alihealth.com, O=alihealth, L=beijing, ST=beijing, C=cn
发布者: CN=zijikanwa, OU=alihealth.com, O=alihealth, L=beijing, ST=beijing, C=cn
序列号: 5a0e9666
有效期为 Mon May 18 14:53:09 CST 2020 至 Sun Aug 16 14:53:09 CST 2020
证书指纹:
	 MD5:  6B:2D:30:CA:D0:C9:22:6C:2E:88:6A:4D:02:E2:58:FB
	 SHA1: 6D:B8:E6:E5:E5:2D:D0:5B:AF:5B:16:4D:5E:05:6B:C7:21:DD:D1:6A
	 SHA256: B9:20:43:76:D3:2A:17:BC:82:79:C5:CF:9F:56:49:E5:68:3E:75:9A:CF:0A:D5:A8:8C:AC:FD:54:3C:E0:AD:A5
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

三. 加解密和签名验签的实现逻辑

  • 概述流程图
    在这里插入图片描述

1. CA机构和被发证书者的沟通

  1. CA公钥:验证证书时使用
  2. CA根证书(或中级证书)为ca.cer
    在这里插入图片描述
  3. 验证证书是否合法的步骤
    1. 证书是否是合法CA机构颁发。
    2. 证书有效期(一般是一年)。
    3. 证书是否在黑名单吊销列表里。
  • 服务端B生成密钥对,并CA注册公钥,生成server.cer证书;
  • 服务端B发送server.cer证书到安卓端A,A会验证B证书的有效性,才会取出B的公钥,做后续其他处理。
    在这里插入图片描述

2. 加密

  • 加密:防止数据泄露。
  • 加密解密流程:公钥加密,私钥解密
    在这里插入图片描述

3. 签名验签

  1. 签名验签的作用:比如A给B发送数据(B<–A),则签名验签是用来让B验证给他发消息的是A。
  2. 签名的常见方案
  1. 对加密后的密文(用私钥)进行签名。
  2. 对密文选取部分内容进行签名。
  3. 对keys(即对key做非对称加密后的结果)和部分密文进行签名。
  1. 签名验签流程:私钥签名,公钥验签。
    在这里插入图片描述

  2. 常见场景:网银验证用户身份(银行B<–用户A)

  3. 单向认证 & 双向认证

  1. 单向认证:服务端有证书,客户端没有证书。
    1. 保证我的客户端只能访问自己信任的服务器;
    2. 不能保证我们的服务器只能被我们自己的客户端访问。
      在这里插入图片描述
  2. 双向认证:银行(银行需要验证用户身份,用户也需要验证银行身份)。
    在这里插入图片描述

四. HTTPS的流程

HTTPS采用非对称加密+对称加密算法
在这里插入图片描述

  1. 客户端(如浏览器)请求一个url,比如https://baidu.com。
  2. server端收到请求后,把自己的公钥通过数字证书的方式传给客户端。
    • 公钥不能直接传:直接传不安全
  3. 客户端收到证书后,首先验证证书的合法性(使用CA公钥验证)。
  4. 如果证书合法,client会产生一个密钥key,利用刚刚拿到的server公钥对该密钥key进行加密,然后将加密后的密钥keys传给server。
  5. server端拿到该密钥keys之后,使用自己的私钥进行解密,即可得到client的密钥key。
  6. server端将client要的内容使用key进行加密,然后传给client。
  7. client拿到内容后使用key进行解密,同时展示内容。

小知识:公钥不能直接传的原因
在这里插入图片描述

参考资料

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值