RSA-AES加密


交互流程

RSA-AES交互流程

  1. 请求服务器公钥 0x0B01 无加密
  2. 服务器应答公钥 0x8B01无加密
  3. 客户端进行证书验证
  4. 请求客户端公钥 0x8B02 无加密
  5. 客户端应答公钥 0x0B02 无加密
  6. 服务端进行证书验证
  7. 客户端表明支持的加密方式 0x0B03 无加密
  8. 服务器应答收到 0x8001
  9. 服务端选择加密方式
  10. 服务端下发密钥 0x8B04 设备公钥
  11. 设备端上报密钥 0x0B04 服务器公钥

报文编解顺序

  • encode

    原始报文 - 压缩 - 加密 - 异或 - 转义

  • decode

    转义 - 异或验证 - 解密 - 解压 - 原始报文

Diffie-Hellman

迪菲-赫尔曼密钥交换(英语:Diffie–Hellman key exchange,缩写为D-H)双方约定一个大质数P 和一个原根G, 发送方自己本地生成一个整数a作为G的a次方,接受方本地生成一个整数b作为G的b次方。 \(Key = (g^a \:mod\: p)^b \:mod\: p == (g^b \:mod\: p) ^ a \:mod\: p\) img

上图A为Alice的公钥,a为Alice的私钥; B为Bob的公钥,b为Bob的私钥;K为双方的本地密钥

  1. 爱丽丝与鲍伯协定使用 p=23以及base g=5.
  2. 爱丽丝选择一个秘密整数a=6, 计算A = ga mod p并发送给鲍伯。 A = 56 mod 23 = 8.
  3. 鲍伯选择一个秘密整数b=15, 计算B = gb mod p并发送给爱丽丝。 B = 515 mod 23 = 19.
  4. 爱丽丝计算s = B a mod p 196 mod 23 = 2.
  5. 鲍伯计算s = A b mod p 815 mod 23 = 2.

RSA

RSA非对称加密算法,选择两个大的质数,生成公钥和私钥。将公钥传输给接受方,私钥自己保存。

可用于传递对称加密算法的密钥

一般情况是公钥加密,私钥解密。其中进行数字签名的时候,需要使用私钥加密,公钥来解密。

AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES)是一种对称加密算法

ECB-AES

Electronic Codebook

优点:

  • 简单
  • 有利于并行计算
  • 误差不会被传送

缺点:

  • 不能隐藏明文的模式
  • 可能对明文进行主动攻击

CBC-AES

Cipher Block Chaining

优点:

  • 安全性优于ECB,适合传输长报文,是SSL、IPSec的标准

缺点:

  • 不利于并行计算
  • 误差传递
  • 需要初始化向量IV

CFB-AES

Cipher Feedback

优点:

  • 隐藏明文模式
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点:

  • 不利于并行计算
  • 误差传送
  • 唯一的IV

OFB-AES

Output Feedback

优点:

  • 隐藏明文模式
  • 分组密码转化为流模式
  • 可以及时加密传送小于分组的数据

缺点:

  • 不利于并行计算
  • 对明文的主动攻击是可能的
  • 误差传送,一个明文单元损坏影响多个单元

CTR-AES

Counter

数字证书

自签名证书:用自己的私钥签发自己的公钥即主体信息生成的证书。
证书签名:对证书固定值进行hash后用密钥对中的私钥对hash值加密
keystore:  keytool生成证书的存储库,用来存储若干条目,每一条目包含公私钥,主体信息等。默认为用户目录下.keystore,相当于一个有密码保护的文件。
truststore: 与keystore格式相同,但是为区分只用来存放信任的证书,不存密钥等信息。

der:证书编码格式,证书结构体转换为二进制格式。
pem:证书编码格式,对der二进制编码的base64字符,包含---begin---,----end----。// 命令中加-rfc可打印和生成此类文件
.csr:证书请求文件格式,包含公钥和主体信息,发给ca,ca用私钥对内容签名并制作成证书返回。keytool在生成csr文件时需要指定证书(即公钥与主体信息)。
.crt:一般用于linux系统的证书格式,包含公钥和主体信息。
.cer:一般用于windows的证书文件格式,包含公钥和主体信息。
.p12:证书交换格式,包含公钥私钥(私用密码加密),用于交换传输。

生成自签名证书

$ keytool -storepass g7.com -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 3650 -alias g7 -keystore g7.keystore -storetype PKCS -dname "CN=www.g7.com.cn, OU=g7, O=g7, L=BJ, ST=BJ, C=CN"
  • genkeypair:生成公私钥对条目,私钥不可见,公钥会以证书格式保存在keystore中。

  • alias: 指定别名,区分不同条目,默认mykey

  • keysize: 密钥长度

  • keyalg: 公私钥算法 RSA

  • validity: 证书过期时间 天

  • keystore: 指定存储密钥库,若不存在会创建,若指定则在当前文件夹下生成。默认密钥库为用户目录下.keystore文件

  • storetype: 密钥库类型 JKS PKCS等

导出签名

$ keytool -export -alias g7 -keystore g7.keystore -storepass g7.com -file g7.crt