Всем привет!
Сегодня я хотел бы поговорить о криптографии. Я сделал пример использования специальной криптографии - стеганографии. Этот метод скрывает сам факт шифрования данных. Существует множество видов стеганографии. Я бы хотел поговорить о LBS-методе, в котором данные скрываются в младших битах аудио данных. Это выглядит так, как-будто пользователи обмениваются аудио файлами, но на самом деле они обмениваются секретными данными. Тот кто не знает об этом методе не будет даже подозревать о обмене секретными данными. В некоторых случаях это может быть очень полезно.
Как это работает?
WAVE-PCM файл (без компрессии) содержит аудио данные. На самом деле звук является аналоговым событием, т.е. непрерывным. Для того чтобы перевести его в цифровую форму нужно проквантовать его с некоторыми потерями. Этот процесс характеризуется двумя параметрами: разрядностью и частотой дискретизации. Разрядность влияет на то как много уровней сигнала может содержаться в каждом семпле. Частота дискретизации влияет на то какая максимальная частота может содержатся в аудиоданных:
В нашем случае нас интересует только разрядность аудиоданных. Она может быть 32, 24, 16, ... бит на семпл. Главная идея стеганографии (в нашем случае) - переписать младшие биты аудиоданных. Чем больше бит мы будем использовать, тем сильнее будут искажения.
Наглядно:
Как видно из рисунка метод сохраняет все шифруемые данные в определенных битах аудиоданных (в данном случае 4 бита на каждый семпл). Также заметьте что для сохранения данных нужно использовать аудио файл бо́льший по размеру чем шифруемый файл. Для примера, если мы будем использовать 3 бита для кодирования, аудиофайл должен будет иметь размер как минимум в 16/3 раза больше чем кодируемый. Я говорю 16 потому что я использую 16 бит на семпл в моем примере.
В прикрепленном примере я также сохраняю оригинальное имя файла. Формат данных наглядно:
Когда происходит упаковка берется каждый байт из шифруемого файла. Затем извлекается необходимые биты из очередного байта, а также очищаются соответственные биты в аудиоданных. Далее эти биты устанавливаются посредством операции побитовое-ИЛИ. Для извлечения необходимых бит используются маски и сдвиги. Маски оставляют необходимые биты, а сдвиги размещают их в начале байта.
Распаковка происходит с точностью наоборот. Извлекаются биты из аудио файла и собирается исходный файл.
Кстати вот спектр в зависимости от битности:

Надеюсь что этот небольшой обзор будет полезным.
Спасибо за внимание!