是否可以在RTMP协议中为每个数据包插入其他数据?

时间:2019-06-06 19:20:16

标签: node.js encryption tcp video-streaming rtmp

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

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

  • 设置一个客户端(android),该客户端通过RTMP流式传输其相机并发送数字签名,以提供身份验证,不可抵赖和检查完整性的方式。
  • 设置一个接收数据的服务器,通过读取签名并验证哈希来确认流的身份。然后,服务器将该流中继到Web客户端。
  • 具有一个Web客户端,观众可以在其中观看流,同时还具有与发布流相同的安全性。

现在,我想到了几种实现此方法的方法,但是在不影响延迟的情况下,最美观的方法是修改RTMP数据包,使其能够沿每个步骤发送其他数据。我在RTMP的官方文档中看到,标头仅留下2个字节的空间,不足以支持sha256签名。现在,我不是流协议专家,因此,除向我介绍文档外,还有其他帮助。

我通过调用OnMetaData获得了成功,但是每个流仅发送一次,因此在初次握手后它使流容易受到攻击。我主要使用Node-Media-Server软件包。

TLDR:出于科学目的,需要一种为我的RTMP协议添加数字签名的方法。 我在想这个错误的方式吗?是否可以在数据包中插入哈希?还是这都是错误的方法?

1 个答案:

答案 0 :(得分:1)

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

  

此字段可以包含任意值。由于每个端点   必须区分对握手的响应   发起并由其对等方发起的握手,此数据   应该发送足够随机的内容。但是没有必要   加密安全的随机性,甚至是动态值。

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