在本篇有关音频隐写术的上一部分中,我描述了音频隐写术的基础知识以及一些应用程序和相关概念。 如果您尚未阅读较早的文章,建议您在继续阅读此文章之前先阅读它。
音频隐秘术:在耳中隐藏秘密的艺术(2之1)
解密音频隐秘术的魔力!
medium.com
在本文中,我们将介绍一些将“秘密”文本,图像和音频嵌入“公共”声音文件中的流行方法。 我们的目的是使发送者能够秘密发送隐藏在歌曲中的数据。
LSB(最低有效位)算法
LSB算法是一种经典的隐写术方法,用于隐藏“公开”封面中秘密数据的存在。 在计算方面,LSB或“最低有效位”表示数字二进制表示形式中单位位置的位。
例如,我们可以将二进制数的十进制数字170表示为10101010(我们假设使用地址从右向左递增的little-endian机器)。 如图所示,最低有效位在这种情况下为0。

以简单的形式,LSB算法用“秘密”消息中的一位替换“载波”数据中每个字节的LSB。 下图显示了这一概念。

发送方逐字节将秘密消息的位“嵌入”到载波数据上。 接收器通过读取接收到的数据的每个字节的LSB位来执行“提取”过程,而接收器则以这种方式重建秘密消息。

这不是在破坏载波信号吗?
是的,但是这里的主要思想是我们正在尝试利用人类对载波信号完整性的感知。 LSB隐写术在图像隐写术中非常流行,即在图像中隐藏秘密。 LSB的变化对颜色的影响很小,以至于人眼通常无法感知颜色的变化。 但是,人耳对声音的细微变化更为敏感,因此我们添加的“噪音”会被发现的机会更大。 为了克服这种琐碎的LSB算法形式的问题,许多研究人员提出了可以提高音频域鲁棒性的变体。
Python中的LSB算法实现
让我们用一些声音数据作为载体信号来实现此方法,该信号将携带我们的秘密文本。 作为我们的声音数据,我从印度电子音乐制作人Udyan Sagar(更名为Nucleya)的一首歌曲中取样。 这首歌将成为我们秘密短信“彼得·帕克是蜘蛛侠!”的载体。

然后,我们将在修改后的载波字节与秘密消息的下一个比特(0或1)之间执行简单的逻辑或运算。

我们将使用.wav音频文件格式作为我们的运营商歌曲。 Wave是最流行的无损压缩格式之一。 Python有一个名为“ wave”的本地库,它为我们提供了处理音频数据的基本工具。
发件人使用以下代码嵌入秘密文本消息。 对该代码进行了充分注释,以逐步解释该过程。

音频隐写术的其他流行技术包括相位编码,回声隐藏和扩频。 这些经典技术不会在载波信号中引起噪声,因此是实现隐写术的更可靠的方法。 我鼓励您阅读相关文献,如果您想更详细地研究它们,或者如果您希望我写这些方法,请在评论中让我知道。
关于SSTV的说明
正如您所能成像的那样,我们可以通过在载体音频的每个字节中简单编码秘密数据的位,将任何文本,文档,音频,视频嵌入到载体音频中。 然而,载体消息必须具有足够的数据字节,以便携带秘密消息的所有位。 在下一部分中,我们将研究一种基于频率调制的方法,该方法将秘密数据隐藏在听不见的频率范围内。 但是在此之前,我想先谈谈一种方法,您可以使用该方法将图像数据编码为音频,然后使用下一节中介绍的隐写术方法来嵌入并从载波音频中提取图像。
SSTV是Slow-Scan Television的首字母缩写词,它是无线电传输中非常流行的一种方法,可以通过电声传播在远距离上发送图像数据。 SSTV可以在带宽很少的地方(例如,普通旧电话服务(POTS)线路)上传输图像。 实际上,阿波罗11号登月任务曾使用SSTV将图像传输回地球。


SSTV基于模拟频率调制,它可以查看每个像素的亮度,并相应地为其分配不同的音频频率。 通常,SSTV用于传输灰度图像,我们也可以使用它来传输彩色图像,但会降低图像分辨率。
Amateur-Radio Wiki列出了不同平台上一些可用的SSTV软件。 AndrásSzentkirályi已制作了一个名为PySSTV的Python程序包,该程序包会生成用于图像文件的SSTV调制波文件。 您可以使用pip安装此软件包。
点安装pysstv
安装软件包后,您可以运行以下命令将图像文件(image.jpg)转换为SSTV调制的音频(audio.wav)文件。
python -m pysstv /path/to/image.jpg /path/to/audio.wav
该软件包还具有针对不同SSTV模式的实现,包括流行的Martin,Robot和Scottie。 您可以在转换图像时指定模式和其他参数。
现在,您可以使用任何媒体播放器在计算机上播放此音频,而这是在发送方进行的所有操作。 要接收此音频,我建议您在手机上安装一些应用程序,该应用程序可以通过手机的麦克风收听“ audio.wav”来提取图像。 这样的Android应用程序之一就是Play商店中的Robot36。
Robot36 – SSTV图像解码器– Google Play上的应用
自从我有了Android设备以来,一直想创建一个Android版本的Robot36解码器。所以这里就是它…
play.google.com
例如,我使用PySSTV对下面的图像进行编码,并得到给定的编码音频。


我们会将这些音频隐藏在The Indian Jam Project的以下音乐中。 这种音乐是他们对星际主题音乐的诠释。 这将是我们秘密音频的“公开”封面。

接下来,我们使用上面的奈奎斯特代码将我们的秘密转换为潜意识音频。 在这里,我使用的是17500 Hz的载波频率。 您可以根据您的声卡要求和功能使用不同的级别。 输出的音频确认该秘密是听不到的(听力范围健康的年轻人仍可以听见该秘密)。

接下来,我们将公共音频和调制的秘密音频混合在一起,以创建一个混合输出,该混合输出将我们的秘密包含在可听范围内。 该嵌入式音频文件应发送到预期的接收器。

在接收器端,只需运行以下代码即可提取原始机密。
下面是提取的秘密音频数据。
声音质量有点差,因为对于44100 Hz的采样率和17500 Hz的载波频率,音频带宽小于4500 Hz,这不足以提供高质量的音频。 因此,您应该期望语音信号失真,因为在只有44100 Hertz采样频率的声卡上,在17500到22050 Hertz之间的音质没有太大的“余地”。 如果您可以使用更好的声卡,我鼓励您以更高的载波频率范围重复此实验。
这就是我本人有关音频隐写术的全部内容。 我希望您喜欢这个很酷的概念,并且希望在下面的评论部分中听到您的反馈。