node.js - 是否可以在 RTMP 协议(protocol)中为每个数据包插入额外的数据?

标签 node.js encryption tcp video-streaming rtmp

我目前正在研究电影和书籍圈子中使用的流媒体平台的简单实现。

在这个故事中, secret 是谎言,每个人都应该可以访问每个数据。用户可以将他们的数据流式传输到允许用户观看的服务器。现在,流应该进行完整性检查,但不应出于隐藏信息的目的加密其数据。为了解决这个问题,我想:

  • 设置客户端 (android),通过 RTMP 流式传输他们的相机并发送数字签名作为提供身份验证、不可否认性和检查完整性的方式。
  • 设置接收数据的服务器,通过读取签名和验证哈希来确认流的身份。然后服务器将这个流中继到网络客户端..
  • 拥有一个网络客户端,观众可以在其中观看流媒体,同时还拥有与发布流媒体所使用的相同类型的安全性。

现在我考虑了几种实现方法,但在不显着影响延迟的情况下最漂亮的方法是修改 RTMP 数据包,以便能够在每个步骤中发送额外的数据。我在 RTMP 的官方文档中读到, header 仅留出 2 个字节的空间,这不足以支持 sha256 签名。现在我不是流媒体协议(protocol)专家,所以除了向我指出文档之外的任何额外帮助将不胜感激。

我已经通过调用 OnMetaData 获得了成功,但是每个流只发送一次,所以它在初始握手后使流容易受到攻击。我主要使用 Node-Media-Server包。

TLDR:为了科学,需要一种方法来为我的 RTMP 协议(protocol)添加数字签名。 我在想这个错误的方式吗?是否可以在数据包中插入哈希?或者这是错误的方法?

最佳答案

据我了解您的问题,您可能不需要在每个 RTMP 数据包中添加签名。 RTMP 连接为客户端设置一次并以握手开始。 C1 数据包长 1536 字节,有一个随机数据(1528 字节),即:

This field can contain any arbitrary values. Since each endpoint has to distinguish between the response to the handshake it has initiated and the handshake initiated by its peer,this data SHOULD send something sufficiently random. But there is no need for cryptographically-secure randomness, or even dynamic values.

如果一切正常,您可以使用它来传递您的哈希值并在服务器端对客户端进行身份验证——继续连接,如果出现问题则关闭它。

关于node.js - 是否可以在 RTMP 协议(protocol)中为每个数据包插入额外的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483837/

相关文章:

javascript - 我的nodeJS代码不是异步的

java - 使用 block 的 RSA 加密

java - 查找加密 key 中丢失的字节 : Java

java - Netty写入时如何找出是哪条消息导致异常?

python - 检查套接字端口是否可用

linux - 我可以使用静态 IP 检测已配置连接设备的网络和网络掩码吗

node.js - 子进程未在 Node 的 PM2 下生成/工作

node.js - 无法在不阻塞 DigitalOcean 的情况下运行多个 Node 子进程

namespaces - 在 Node.js 中修改 'global' 对象

javascript - bcrypt 如何比较密码与不同生成的盐?