数据连接作为隐写术技术

Data concatenation as steganography technique

例如,我用相机录制了一段视频并保存为my_vacation.mp4,大小为50MB。我使用 Visual Studio 打开视频文件和一个名为 secret_message.dat 的加密文件,通过在 C# 中使用 File.ReadAllBytes(),连接两个字节数组,然后将其保存为 my_vacation_2.mp4

我为测试目的创建的程序能够保存隐藏文件开始的字节索引,我想用它作为稍后提取隐藏文件的密钥。

现在我可以正常播放那个视频文件了,没有任何错误。总文件大小为 65MB。假设没有人可以访问原始文件,当然没有人会知道那个视频文件的最后 15MB 部分实际上是另一个文件,对吧?

这种技术可能存在什么缺陷?这也是一种有效的隐写技术吗?

Suppose no one could access the original file, of course no one would know that the last 15MB part of that video file is actually another file, right?

没有。您的秘密文件已加密,因此可能排除任何 headers 出现在十六进制编辑器中,但存在一个问题 - MP4 容器格式及其结构是众所周知的。 您可以提取所有 video/audio 轨道,剩下的是一些元数据和您的秘密消息,因此很明显它不应该存在。

这是一种有效的技术,只是不是很有效。

Is this a valid steganography technique?

是的,是的。隐写术的定义是将信息隐藏在另一种媒介中,而不会有人怀疑它的存在或存在。仅仅因为它可能是一种糟糕的方法,根本不会改变它的意图。如果有的话,许多关于隐写术的论文在其介绍部分都提到了这种技术,作为如何应用隐写术的示例。

What might be the flaw of this technique?

主要有2个缺陷:检测起来很简单,对修改攻击绝对脆弱。

许多格式通过 header 来编码它们的数据,它预先说明在文件结束之前要读取多少字节,或者通过放置 end-of-file 标记,这意味着继续阅读数据,直到遇到标记。之后通过附加您的数据,您可以确保它们不会被适当的格式解码器读取。这可能会骗过你 11 岁的表弟,他对这类东西一无所知,但任何有经验的人都可以加载文件并计算读取了多少字节。如果物理文件中有未计算的字节,那将立即引发危险信号。

更糟糕的是,完全提取您的秘密是微不足道的。你可能会争辩说它是加密的,但请记住,隐写术的目的是不引起任何怀疑。大多数隐写分析方法都会给它一个统计数字,例如,60% 的消息隐藏在 X 媒体中。其他一些人可以走得更远,猜测嵌入秘密的大概长度。相比之下,你已经被抓住了 red-handed.

说到长度,X bitrate/compression 和 Y 持续时间的文件大约会导致大小为 Z 的文件。即使是一个不熟练的人也会在大小比预期大 30% 时知道发生了什么。

现在,想象一下您的文件是通过一个不安全的渠道传送的,监狱长会在该渠道检查其内容,如果他怀疑有不当行为,他可以修改文件,这样收件人就不会收到消息。在这种情况下,它就像加载文件并重新保存一样简单。事实上,您的方法非常脆弱,即使是最无意的攻击也会破坏它。只需将您的曲目上传到网站进行播放,它就可以在不知不觉中对其进行重新编码以获得更高的压缩率,只是因为它很有意义。