Administrator
发布于 2025-12-03 / 16 阅读
0
0

数据加密接口安全设计

一、接口加密

前后端数据接口,或者对端server接口等等应用场景

目前节点和管理端双向都有通信,均使用HTTP协议、POST请求,这里分别对请求体和回复体都进行AES-CBC加密

双方约定使用一个固定的iv:xxxx

key的生成算法如下:

其中 nodeBytes 是节点ID的使用大端的字节数组,randKey是使用 crypto/rand 生成的16位随机字节数组

请求步骤:

  1. 发送方根据节点ID生成key,对请求体进行AES加密,发送给接收端

  2. 接收端收到请求后,根据节点ID生成key,进行数据解密

  3. 处理业务逻辑

  4. 接收端回复加密后的数据

  5. 发送方解密数据,获取响应

注意:

  1. 同一个请求回复,使用的NodeID应该是同一个

  2. 如果请求体为空,则body只有节点ID的字节数组

 二、防重放

利用 redis 记录一个请求 key 来防止重放问题。步骤如下:

  1. 管理端向 redis 写入本次请求的 key,redis value 则是目标节点的 id,并设置超时时间

  2. 管理端向 agent 发起请求,并在 http/header 中携带该配置 key

  3. agent 接收到请求后,通过 header 携带的 key,从 redis 中获取值,判断值是否是节点自己的 id

  4. 请求处理完成后删除该 key

为什么不用签名?

使用签名之后,可以对请求的身份进行验证。但不能阻止重放攻击,即攻击者截获请求后,不对请求进行任何调整。直接使用截获的内容重新高频率发送请求。


评论