【问题标题】:Is it possible to insert additional data for each packet inside the RTMP protocol?是否可以在 RTMP 协议中为每个数据包插入额外的数据?
【发布时间】:2019-10-22 08:12:57
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 您可以将任何您想要的内容放入脚本标签中。
  • @szatmary 抱歉,您能否详细说明一下,我在规范中找不到任何关于脚本标签的内容 adobe.com/devnet/rtmp.html
  • RTMP 携带 FLV。查看 FLV 规范。
  • @szatmary 这将解决媒体传输期间的问题,但不会保护初始握手和除数据传输之外的其他类型的 RTMP 传输。我将研究 flv 流本身,感谢您的输入。

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


【解决方案1】:

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

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

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

【讨论】:

  • 好吧,这是我们看过的,问题是握手只发生一次。我们要确保在整个流期间没有视频数据被篡改。将它放在标题中是最好的方式,但是除了握手之外,标题没有为 256 位签名留下空间。我希望我正确地理解了你。如果我的回答有道理,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2014-01-14
  • 2011-02-19
  • 2019-06-06
  • 2013-06-27
  • 2023-01-27
  • 1970-01-01
相关资源
最近更新 更多