Не секрет, что у каждой клавиши на клавиатуре — уникальное звучание, которое зависит от её расположения и других факторов. Теоретически, анализ спектрограммы позволяет отличить клавиши друг от друга, а по частотности нажатий определить, какому символу соответствует каждый звук. Задача распознавания звуков упрощается тем, что при наборе связного текста символы хорошо прогнозируются по словарю (а именно, по частотности n-грамм для текстов).
Двухмерная спектрограмма «клика» отдельной клавиши на механической клавиатуре выглядит примерно так:
У каждой клавиши спектрограмма слегка отличается.
Звуковой кейлоггер — очень интересная задача с точки зрения безопасности. Она близка к фингерпринтингу пользователя по клавиатурному почерку (включая скорость набора, опечатки, тайминги между сочетания клавиш и др.).
Теоретически, это даёт возможность:
- регистрировать нажатия клавиш по звуку;
- идентифицировать пользователя, который работает за клавиатурой.
Всё это в отсутствие визуального канала, то есть просто по голосовой связи. Например, во время телефонного разговора.
В последние годы разработано несколько концептуальных разработок в этой области. Одним из первых появился инструмент под названием keytap от Георги Герганова (2018 год). Он обучается для конкретного пользователя (звук конкретной механической клавиатуры). Работает в том числе через браузер. Нужно включить в браузере поддержку WebAssembly pthreads и SharedArrayBuffer, а также дать разрешение на прослушивание микрофона, есть демо.
Для проверки этого кейлоггера рекомендуется начинать с двух клавиш, звучание которых максимально отличается, то есть максимально разнесённых друг от друга по расстоянию. Например,
q
и p
в случае раскладки QWERTY. Если результат распознавания меньше 100%, то кейлоггер не работает.Через полтора года тот же автор выпустил ещё один инструмент keytap2, который работает иначе. Вместо обучения он использует статистику частотности букв и n-грамм (последовательностей символов) в английском языке.
Для успешного анализа достаточно набрать несколько предложений связного текста на английском языке — и программа начнёт определять, какому звуку соответствует какая клавиша. Небольшую демонстрацию на видео см. здесь
В онлайн-демо есть определённые ограничения. Она работает только для текстов на английском языке. Требуется набрать минимум 100 символов осмысленного текста. Случайные нажатия клавиш не дадут результата. Лучше всего программа работает на громких механических клавиатурах. Микрофон желательно включить на максимальную чувствительность.
Недавно вышла самая продвинутая версия keytap3 с более точной статистикой n-грамм. Она по-прежнему надёжно работает только с механическими клавиатурами и определяет текст на английском языке, но уже работает гораздо стабильнее. Например, страничку с демо-версией кейлоггера можно открыть на телефоне — и положить рядом с клавиатурой.
Все упомянутые кейлоггеры — это любительские проекты одного энтузиаста. Конечно, при грамотном подходе с привлечением квалифицированных специалистов и профессиональной аппаратуры можно добиться гораздо лучшей точности распознавания.
Для русского языка таких инструментов пока нет в открытом доступе. Хотя лингвистическая база для него существует, в том числе Национальный корпус русского языка (4,5 млн текстов), из которого можно получить частотность n-грамм в русскоязычных текстах. Очевидно, что частотность нажатия клавиш в русскоязычной раскладке сильно отличается от частотности букв английского языка. По тепловой карте довольно легко определить, на каком языке печатает пользователь (по крайней мере, несложно сделать бинарный выбор для пары русский/английский).
Повторим, что существующие инструменты распознают текст только на громкой (механической) клавиатуре и с близкого расстояния.
Чтобы предотвратить утечку информации по звуковому каналу, можно использовать утилиты вроде Unclack (для macOS) и Hushboard, которые автоматически отключают микрофон во время печати на клавиатуре. Кроме целей безопасности, они выполняют и более прозаичную функцию — автоматическое устранение посторонних шумов («клацания») во время видео/аудиоконференций.