数据加解密传输

2020/11/6 posted in  音视频

在音视频数据加密传输过程中,遇到的问题依次记录。

背景:

  • 数据大小基本在2M以内
  • 加密方式使用对称加密 AES-CBC-128
  • 数据使用分段加密
  • iv 以及一些业务信息放在数据头部

Question:

  1. 分段加密的分段大小制定,对性能影响?

    1. 分段大小需要是key长度整数倍的数据长度

    2. 加密的延迟远远小于网络I/O的延迟和读取硬盘的I/O延迟. 比如, 在主流PC上, 使用AES在10s内加密几个G的数据是没问题的

  2. 分段加密是否每段都需要数据头,iv 和key 是否都重新生成?

    1. 可以使用每端数据都有数据头
  3. 对非128位的整数倍的数据进行加密需要补位多少?

    1. PKCS#7 & PKCS#5
      缺几个字节就填几个缺的字节数

      如果当前数据已经是128bits的倍数了也得要填充,否则无法解密。

      对于AES来说PKCS5Padding和PKCS7Padding是完全一样的,不同在于PKCS5限定了块大小为8bytes而PKCS7没有限定。因此对于AES来说两者完全相同,但是对于Rijndael就不一样了。AES是Rijndael在块大小为8bytes时的特例,对于使用其他信息块大小的Rijndael算法只能使用PKCS7

      在AES加密当中严格来说是不能使用pkcs5的,因为AES的块大小是16bytes而pkcs5只能用于8bytes,通常我们在AES加密中所说的pkcs5指的就是pkcs7!

  4. 加密之后的分段数据大小?

    使用AES加密后数据的长度是相同的,主要是因为 AES 加密进行的是一系列的异或操作与循环移位,并没有进行扩展变换。

    对于 AES 中的 ecb 和 cbc 可能对加密块需要填充,加密后的长度可能会不一样, cfb 和 ofb 不需要填充。

  5. 是否需要考虑 Http 的分包 和 网络乱序情况?

    分段加密不涉及到Http的分包,网络包的排序由TCP直接保证


Reference

https://zhuanlan.zhihu.com/p/131324301