Lazy loaded image
🍇0014 一种加减密通信方案
字数 2755阅读时长 7 分钟
2023-7-1
2026-4-7
date
Jul 1, 2023
summary
本文介绍了业界常用的RSA非对称加减密、3 DES对称加减密、加签验签方法。
status
Published
type
Post
slug
encryption
icon
tags
密码学
信息安全

概述

 
本文介绍了业界常用的RSA非对称加减密、3 DES对称加减密、加签验签方法。

业界典型的加密通信方式

在业界比较常见的做法是:对报文进行对称加密,对称加密的密钥,用对方的RSA公钥加密。为了报文的完整性,还需要对报文进行加签。
 
其中,RSA公私钥对的生成,是在企业内部自主完成。企业自主生成的RSA公钥,需要发送给报文接收方。公钥用来加密报文,私钥用来解密报文。比如企业A将公钥发给企业B,企业A保管自己的私钥,企业B用公钥对报文加密,发送给企业A,企业A用私钥进行解密。如果企业B向企业A发送消息,那么企业A向企业B提供公钥,因此我们总结为:
△ 非对称加密如RSA,生成时会有一把公钥,一把私钥,私钥自己保存,公钥发给对方 △ 公钥用于加密,私钥用于解密 △ A要发消息给B,需要B的公钥;B要发消息给A,需要A的公钥
notion image
 

实践案例

本案例中,我们使用到的算法:
  • 对称加密密钥算法:3 DES用于对报文加密,其优点是安全性高,速度快
  • 非对称加密算法:RSA/ECB/PKCS1Padding,用于对密钥加密
  • 签名算法:SHA256withRSA加签用自己的私钥,验签用对方公钥
 
具体流程如图:
notion image
 
在两个企业已经互发了RSA公钥的前提下,消息发送方(企业A)加密流程为:
  • 企业A实时生成对称加密密钥K,加密算法为3 DES
  • 用企业B的公钥对K进行加密,得到加密后的解密密钥encrypted_key
  • 用K对明文C进行加密,得到encrypted_data
  • 用企业A的私钥对报文进行签名(加签),签名算法为SHA256withRSA,得到签名串sign
  • 打包报文[encrypted_key, encrypted_data,sign],发送给接收方企业B
 
消息接受方(企业B)解密流程为:
  • 用企业B的RSA私钥对encrypted_key进行解密,得到解密密钥K
  • 用解密密钥K对encrypted_data解密,得到明文的C
  • 用企业A的公钥对报文进行签名串sign验签,验签算法为SHA256withRSA
 

算法选型解惑

  • RSA为什么不用来加密报文体,而是用来加密解密密钥?
  1. 密钥长度:RSA的安全性取决于密钥的长度。较长的密钥长度提供更高的安全性,但也导致更慢的性能。常用的RSA密钥长度为2048位或4096位。
  1. 加密速度:RSA的加密速度比对称加密算法(如AES)慢得多。这是因为RSA算法涉及大数的运算,包括模幂运算和大素数计算,这些运算需要较长的时间。因此,对大量数据进行RSA加密可能会显著降低性能。
  1. 加密限制:RSA加密的数据长度有限制。加密的数据块不能超过密钥长度,且通常要小于密钥长度减去一些填充的字节数。对于较长的数据,通常使用对称加密算法加密数据本身,然后使用RSA加密对称密钥。
基于以上原因,我们不用RSA算法来直接加密报文体本身。
 
  • 为什么用3 DES来加密报文体?
  1. 兼容性:3DES是DES算法的增强版本,它使用相同的加密算法结构,只是增加了迭代次数。这意味着3DES可以与使用DES加密的旧系统兼容,同时提供更高的安全性。
  1. 安全性:DES算法的密钥长度较短(56位),已被认为不够安全。3DES通过使用三个不同的密钥对数据进行三次加密,有效地扩展了密钥长度,提供更高的安全性。它提供的密钥空间更大(168位),使得暴力破解变得非常困难。
  1. 抗击穷举攻击:3DES的安全性基于DES算法的困难性。对于穷举攻击(exhaustive search attack),即尝试所有可能的密钥进行解密的攻击,3DES提供了更大的密钥空间,使得攻击者需要更多的时间和计算资源来尝试所有可能的密钥。
  1. 广泛应用:由于3DES的兼容性和安全性,它被广泛应用于各种领域,如金融机构、电子支付、通信和网络安全等。许多安全标准和协议(如TLS、IPsec)也使用3DES作为加密算法之一。
 

最佳实践(Java)

生成企业A和企业B自己的RSA公私钥对(Base 64编码)

生成方法:
通过以上方法,我们得到企业A和企业B的公私钥信息。
  • 企业A公钥:
  • 企业A私钥:
 
  • 企业B公钥:
  • 企业B的私钥:

企业A加密过程

在上面RSA公私钥对的基础上,我们来模拟企业A加密的流程,假设我们要发给企业B的原报文内容为:
Hello, World!
注:本文所有加减密信息输出均为Base64编码。
企业A生成 3 DES的加密串:
3 DES密钥串:
 
对报文加密:
 
加密后的字符串 encrypted_data
 
对3 DES密钥串使用企业B的公钥加密:
得到 encrypted_key
 
SHA246withRSA对明文报文加签:
得到签名串 sign
因此我们得到企业A最终要发送的报文:

企业B解密过程

企业B接收到报文后,首先用企业B的私钥对encrypted_key进行解密:
解密后的DES Key:
 
用DES key对encrypted_data解密:
解密后的报文:
OK,现在我们还有最后一步:验签,即我要确认解密后的”Hello, World!”是否是企业A发的,且是否被劫持并修改过,验证过程:
 
输出:
由此,整个过程结束。
 

总结

1、3 DES对称加密速度快,用来加密报文体
2、RSA适用于对密钥加密
3、企业B向企业A发消息,复用上述流程
4、加签验签过程,更安全的做法应该是加入一些双方约定的规则,比如对加签前的报文做一些变换,如字段排序、编码格式变换、加入特殊字符等方式。
上一篇
0015 布隆过滤器原理与应用
下一篇
0013 G1收集器原理与验证