Не секрет, что у каждой клавиши на клавиатуре — уникальное звучание, которое зависит от её расположения и других факторов. Теоретически, анализ спектрограммы позволяет отличить клавиши друг от друга, а по частотности нажатий определить, какому символу соответствует каждый звук. Задача распознавания звуков упрощается тем, что при наборе связного текста символы хорошо прогнозируются по словарю (а именно, по частотности n-грамм для текстов).

Двухмерная спектрограмма «клика» отдельной клавиши на механической клавиатуре выглядит примерно так:



У каждой клавиши спектрограмма слегка отличается.

Звуковой кейлоггер — очень интересная задача с точки зрения безопасности. Она близка к фингерпринтингу пользователя по клавиатурному почерку (включая скорость набора, опечатки, тайминги между сочетания клавиш и др.).

Теоретически, это даёт возможность:

  • регистрировать нажатия клавиш по звуку;
  • идентифицировать пользователя, который работает за клавиатурой.

Всё это в отсутствие визуального канала, то есть просто по голосовой связи. Например, во время телефонного разговора.

В последние годы разработано несколько концептуальных разработок в этой области. Одним из первых появился инструмент под названием keytap от Георги Герганова (2018 год). Он обучается для конкретного пользователя (звук конкретной механической клавиатуры). Работает в том числе через браузер. Нужно включить в браузере поддержку WebAssembly pthreads и SharedArrayBuffer, а также дать разрешение на прослушивание микрофона, есть демо.

Для проверки этого кейлоггера рекомендуется начинать с двух клавиш, звучание которых максимально отличается, то есть максимально разнесённых друг от друга по расстоянию. Например, q и p в случае раскладки QWERTY. Если результат распознавания меньше 100%, то кейлоггер не работает.


Через полтора года тот же автор выпустил ещё один инструмент keytap2, который работает иначе. Вместо обучения он использует статистику частотности букв и n-грамм (последовательностей символов) в английском языке.

Для успешного анализа достаточно набрать несколько предложений связного текста на английском языке — и программа начнёт определять, какому звуку соответствует какая клавиша. Небольшую демонстрацию на видео см. здесь



В онлайн-демо есть определённые ограничения. Она работает только для текстов на английском языке. Требуется набрать минимум 100 символов осмысленного текста. Случайные нажатия клавиш не дадут результата. Лучше всего программа работает на громких механических клавиатурах. Микрофон желательно включить на максимальную чувствительность.

Недавно вышла самая продвинутая версия keytap3 с более точной статистикой n-грамм. Она по-прежнему надёжно работает только с механическими клавиатурами и определяет текст на английском языке, но уже работает гораздо стабильнее. Например, страничку с демо-версией кейлоггера можно открыть на телефоне — и положить рядом с клавиатурой.


Все упомянутые кейлоггеры — это любительские проекты одного энтузиаста. Конечно, при грамотном подходе с привлечением квалифицированных специалистов и профессиональной аппаратуры можно добиться гораздо лучшей точности распознавания.

Для русского языка таких инструментов пока нет в открытом доступе. Хотя лингвистическая база для него существует, в том числе Национальный корпус русского языка (4,5 млн текстов), из которого можно получить частотность n-грамм в русскоязычных текстах. Очевидно, что частотность нажатия клавиш в русскоязычной раскладке сильно отличается от частотности букв английского языка. По тепловой карте довольно легко определить, на каком языке печатает пользователь (по крайней мере, несложно сделать бинарный выбор для пары русский/английский).



Повторим, что существующие инструменты распознают текст только на громкой (механической) клавиатуре и с близкого расстояния.

Чтобы предотвратить утечку информации по звуковому каналу, можно использовать утилиты вроде Unclack (для macOS) и Hushboard, которые автоматически отключают микрофон во время печати на клавиатуре. Кроме целей безопасности, они выполняют и более прозаичную функцию — автоматическое устранение посторонних шумов («клацания») во время видео/аудиоконференций.

Комментарии (19)


  1. Diamos
    17.07.2022 16:16
    +2

    В контексте темы для macOs еще полезна утилита, которая показывает уведомление о включении/выключении микрофона/камеры, к примеру, OverSight (бесплатная). Помимо уведомления она позволяет блокировать использующий камеру/микрофон процесс, а так же запускать кастомный скрипт.


  1. ABy
    17.07.2022 18:39
    +12

    Ого, так можно сделать механическую клавиатуру без проводов и вообще электроники! Прямо сказка.


    1. MUTbKA98
      17.07.2022 19:02

      Так там явно указано, что пароль (нормальный, то есть рандомный) не удастся ввести. ;)


      1. Refridgerator
        18.07.2022 06:49
        +2

        Это лишь следствие несовершенства системы распознавания и использования одного микрофона. С 3-мя микрофонами можно опираться не на особенности звука клавиши, а на время его достижения до каждого из микрофонов.


        1. p07a1330
          18.07.2022 21:09

          Мне кажется, там разница (с учетом расстояний в десятки сантиметров), с учетом неидеальности условий, будет слишком малой для захвата неспециализированными микрофонами


          1. Refridgerator
            19.07.2022 05:48

            Если вы не занимались такими задачами на практике — то вам действительно кажется. Специализированные микрофоны тут не нужны — достаточно, чтобы они были одной модели. Алгоритмы такого типа опираются на сдвиг фазы между одинаковыми частотами от разных микрофонов, точность там определяется длиной записанного сигнала.


            1. p07a1330
              19.07.2022 11:27

              Могу ошибаться, но - может ли у микрофона колебаться время задержки сигнала?

              Даже в рамках одной модели, в пределах допусков?


              1. Refridgerator
                19.07.2022 12:20

                Понятие «время задержки сигнала» к микрофону, как устройству, вообще неприменимо. Микрофон преобразует акустические колебания в электрические, там нет ничего что могло бы «задерживать» сигнал, а именно обеспечивать линейный сдвиг фаз на всех частотах. АЧХ/ФЧХ на разных экземплярах одной модели конечно же могут слегка отличаться, но эта разница не принципиальна, особенно если о калибровке позаботиться. Точность на атомном уровне здесь не нужна.

                По вашему откуда уникальный звук у клавиши берётся? Не потому что на ней разные буквы нарисованы, а потому что резонансы в корпусе клавиатуры отличаются в зависимости от её физических координат. И если эту разницу можно уловить одним микрофоном (как автор), то двумя и тем более.


                1. p07a1330
                  19.07.2022 18:51

                   там нет ничего что могло бы «задерживать» сигнал,

                  Как минимум АЦП явно не идеальный)
                  Более того, насколько я помню - задержка АЦП зависит от напряжения питания, которое тоже в определенных интервалах плавает, и зависит, например, от температуры (если рядом ЦП - она выше), которая в свою очередь зависит от того, что делает комп. Если с учетом этих погрешностей точности все равно хватает - это хорошо, но тем не менее - момент стоит учитывать

                  По второму абзаца согласен, безусловно



    1. aamonster
      17.07.2022 19:19
      +2

      Вроде первые пульты ДУ к телевизору были именно такими.

      Upd: zenith space command. Крутая штука, без батарейки.


    1. Mingun
      18.07.2022 07:55

      А если наловчиться, то логиниться буквально по щелчку пальцев (или цоканью языком)!


      1. SaX_KT
        19.07.2022 19:01

        Раньше была шутка про "свистеть на 28800", теперь можно будет нацокать языком связный текст.)


  1. WondeRu
    18.07.2022 09:28

    Быстро нагуглил работы 2005 года https://www.newscientist.com/article/dn7996-keyboard-sounds-reveal-their-words/. Об похожем слышал еще в 2000) опенсорса тогда не было, но метод древний)


  1. InChaos
    18.07.2022 11:23
    +3

    Звуковой кейлоггер — очень интересная задача с точки зрения безопасности.

    О, как Вы не ошиблись!!! Новое - хорошо забытое (или незнаемое) старое.

    "Жучки были обнаружены после разбора и анализа более, чем 10 тонн оборудования, изъятого из посольств и консульств США, и переданного обратно в США. Имплантанты были обнаружены всего в 16 пишущих машинках 1976-1984 годов, которые работали в посольстве США в Москве и в консульстве США в Ленинграде. Жучки стали искать только после того, что в США поступила информации о подобных устройствах от партнеров, которые подверглись тому же типу «атаки» со стороны СССР. Восемь лет жучки оставались необнаруженными, и передавали, передавали, передавали информацию советским разведчикам.

    По мнению экспертов, девайс передавал звуки печати, а уже советские специалисты идентифицировали их, расшифровывая документ, печатаемый американцами. "


    1. pulsework
      18.07.2022 12:36
      -1

      Восемь лет жучки оставались необнаруженными, - а кто менял батарейки?


      1. stalker_by
        18.07.2022 15:11
        +2

        Не везде они были нужны, поищите историю про деревянного орла от пионеров.


      1. Diamos
        18.07.2022 17:21

        Машинка скорее всего была электрическая.


  1. s_podliwoi
    19.07.2022 19:13

    Почему вы временной ряд называете спектрограммой?


  1. googoosik
    19.07.2022 19:13

    Рекламная отрасль уже потирает ручки