Не секрет, что у каждой клавиши на клавиатуре — уникальное звучание, которое зависит от её расположения и других факторов. Теоретически, анализ спектрограммы позволяет отличить клавиши друг от друга, а по частотности нажатий определить, какому символу соответствует каждый звук. Задача распознавания звуков упрощается тем, что при наборе связного текста символы хорошо прогнозируются по словарю (а именно, по частотности n-грамм для текстов).
Двухмерная спектрограмма «клика» отдельной клавиши на механической клавиатуре выглядит примерно так:
У каждой клавиши спектрограмма слегка отличается.
Звуковой кейлоггер — очень интересная задача с точки зрения безопасности. Она близка к фингерпринтингу пользователя по клавиатурному почерку (включая скорость набора, опечатки, тайминги между сочетания клавиш и др.).
Теоретически, это даёт возможность:
- регистрировать нажатия клавиш по звуку;
- идентифицировать пользователя, который работает за клавиатурой.
Всё это в отсутствие визуального канала, то есть просто по голосовой связи. Например, во время телефонного разговора.
В последние годы разработано несколько концептуальных разработок в этой области. Одним из первых появился инструмент под названием keytap от Георги Герганова (2018 год). Он обучается для конкретного пользователя (звук конкретной механической клавиатуры). Работает в том числе через браузер. Нужно включить в браузере поддержку WebAssembly pthreads и SharedArrayBuffer, а также дать разрешение на прослушивание микрофона, есть демо.
Для проверки этого кейлоггера рекомендуется начинать с двух клавиш, звучание которых максимально отличается, то есть максимально разнесённых друг от друга по расстоянию. Например,
q
и p
в случае раскладки QWERTY. Если результат распознавания меньше 100%, то кейлоггер не работает.Через полтора года тот же автор выпустил ещё один инструмент keytap2, который работает иначе. Вместо обучения он использует статистику частотности букв и n-грамм (последовательностей символов) в английском языке.
Для успешного анализа достаточно набрать несколько предложений связного текста на английском языке — и программа начнёт определять, какому звуку соответствует какая клавиша. Небольшую демонстрацию на видео см. здесь
В онлайн-демо есть определённые ограничения. Она работает только для текстов на английском языке. Требуется набрать минимум 100 символов осмысленного текста. Случайные нажатия клавиш не дадут результата. Лучше всего программа работает на громких механических клавиатурах. Микрофон желательно включить на максимальную чувствительность.
Недавно вышла самая продвинутая версия keytap3 с более точной статистикой n-грамм. Она по-прежнему надёжно работает только с механическими клавиатурами и определяет текст на английском языке, но уже работает гораздо стабильнее. Например, страничку с демо-версией кейлоггера можно открыть на телефоне — и положить рядом с клавиатурой.
Все упомянутые кейлоггеры — это любительские проекты одного энтузиаста. Конечно, при грамотном подходе с привлечением квалифицированных специалистов и профессиональной аппаратуры можно добиться гораздо лучшей точности распознавания.
Для русского языка таких инструментов пока нет в открытом доступе. Хотя лингвистическая база для него существует, в том числе Национальный корпус русского языка (4,5 млн текстов), из которого можно получить частотность n-грамм в русскоязычных текстах. Очевидно, что частотность нажатия клавиш в русскоязычной раскладке сильно отличается от частотности букв английского языка. По тепловой карте довольно легко определить, на каком языке печатает пользователь (по крайней мере, несложно сделать бинарный выбор для пары русский/английский).
Повторим, что существующие инструменты распознают текст только на громкой (механической) клавиатуре и с близкого расстояния.
Чтобы предотвратить утечку информации по звуковому каналу, можно использовать утилиты вроде Unclack (для macOS) и Hushboard, которые автоматически отключают микрофон во время печати на клавиатуре. Кроме целей безопасности, они выполняют и более прозаичную функцию — автоматическое устранение посторонних шумов («клацания») во время видео/аудиоконференций.
Комментарии (19)
ABy
17.07.2022 18:39+12Ого, так можно сделать механическую клавиатуру без проводов и вообще электроники! Прямо сказка.
MUTbKA98
17.07.2022 19:02Так там явно указано, что пароль (нормальный, то есть рандомный) не удастся ввести. ;)
Refridgerator
18.07.2022 06:49+2Это лишь следствие несовершенства системы распознавания и использования одного микрофона. С 3-мя микрофонами можно опираться не на особенности звука клавиши, а на время его достижения до каждого из микрофонов.
p07a1330
18.07.2022 21:09Мне кажется, там разница (с учетом расстояний в десятки сантиметров), с учетом неидеальности условий, будет слишком малой для захвата неспециализированными микрофонами
Refridgerator
19.07.2022 05:48Если вы не занимались такими задачами на практике — то вам действительно кажется. Специализированные микрофоны тут не нужны — достаточно, чтобы они были одной модели. Алгоритмы такого типа опираются на сдвиг фазы между одинаковыми частотами от разных микрофонов, точность там определяется длиной записанного сигнала.
p07a1330
19.07.2022 11:27Могу ошибаться, но - может ли у микрофона колебаться время задержки сигнала?
Даже в рамках одной модели, в пределах допусков?
Refridgerator
19.07.2022 12:20Понятие «время задержки сигнала» к микрофону, как устройству, вообще неприменимо. Микрофон преобразует акустические колебания в электрические, там нет ничего что могло бы «задерживать» сигнал, а именно обеспечивать линейный сдвиг фаз на всех частотах. АЧХ/ФЧХ на разных экземплярах одной модели конечно же могут слегка отличаться, но эта разница не принципиальна, особенно если о калибровке позаботиться. Точность на атомном уровне здесь не нужна.
По вашему откуда уникальный звук у клавиши берётся? Не потому что на ней разные буквы нарисованы, а потому что резонансы в корпусе клавиатуры отличаются в зависимости от её физических координат. И если эту разницу можно уловить одним микрофоном (как автор), то двумя и тем более.p07a1330
19.07.2022 18:51там нет ничего что могло бы «задерживать» сигнал,
Как минимум АЦП явно не идеальный)
Более того, насколько я помню - задержка АЦП зависит от напряжения питания, которое тоже в определенных интервалах плавает, и зависит, например, от температуры (если рядом ЦП - она выше), которая в свою очередь зависит от того, что делает комп. Если с учетом этих погрешностей точности все равно хватает - это хорошо, но тем не менее - момент стоит учитывать
По второму абзаца согласен, безусловно
aamonster
17.07.2022 19:19+2Вроде первые пульты ДУ к телевизору были именно такими.
Upd: zenith space command. Крутая штука, без батарейки.
WondeRu
18.07.2022 09:28Быстро нагуглил работы 2005 года https://www.newscientist.com/article/dn7996-keyboard-sounds-reveal-their-words/. Об похожем слышал еще в 2000) опенсорса тогда не было, но метод древний)
InChaos
18.07.2022 11:23+3Звуковой кейлоггер — очень интересная задача с точки зрения безопасности.
О, как Вы не ошиблись!!! Новое - хорошо забытое (или незнаемое) старое.
"Жучки были обнаружены после разбора и анализа более, чем 10 тонн оборудования, изъятого из посольств и консульств США, и переданного обратно в США. Имплантанты были обнаружены всего в 16 пишущих машинках 1976-1984 годов, которые работали в посольстве США в Москве и в консульстве США в Ленинграде. Жучки стали искать только после того, что в США поступила информации о подобных устройствах от партнеров, которые подверглись тому же типу «атаки» со стороны СССР. Восемь лет жучки оставались необнаруженными, и передавали, передавали, передавали информацию советским разведчикам.
По мнению экспертов, девайс передавал звуки печати, а уже советские специалисты идентифицировали их, расшифровывая документ, печатаемый американцами. "
pulsework
18.07.2022 12:36-1Восемь лет жучки оставались необнаруженными, - а кто менял батарейки?
stalker_by
18.07.2022 15:11+2Не везде они были нужны, поищите историю про деревянного орла от пионеров.
Diamos
В контексте темы для macOs еще полезна утилита, которая показывает уведомление о включении/выключении микрофона/камеры, к примеру, OverSight (бесплатная). Помимо уведомления она позволяет блокировать использующий камеру/микрофон процесс, а так же запускать кастомный скрипт.