Лік, які сядзіць у мяне ў галаве пра гук клавіятуры, гэта 95%. У 2023 годзе Харысан, Тарэіні і Мехрнежад паклалі iPhone побач з MacBook Pro і навучылі нейрасетку на гуку клавіш. Яна адгадала 95% націскаў і 93% на запісе Zoom, зробленым праз мікрафон самога ноўтбука. У 2025 годзе Спата з суаўтарамі атрымалі 98,3% на тых жа даных MacBook, потым запісалі механічную клавіятуру і паведамілі пра 99% на ёй. У мяне ёсць невялікі інструмент earshot, ён слухае мікрафон і ператварае гаворку ў тэкст. Той жа мікрафон чуе кожную клавішу, якую я націскаю. Пра 95% я чытаў некалькі разоў і ні разу не спытаў, на чым менавіта гэта мералі. Абодва датасэты адкрытыя пад ліцэнзіяй MIT, таму гэтым разам я іх спампаваў і паглядзеў.
Абстаноўка
Абодва наборы ўладкаваныя аднолькава. 36 клавіш, лічбы і літары. Кожная клавіша запісаная ў асобны файл WAV, у ім 25 націскаў запар прыкладна раз на секунду. У Харысана 2 запісы аднаго і таго ж MacBook. Адзін зроблены тэлефонам, які ляжаў на сурвэтцы з мікрафібры, другі праз Zoom на 32 кГц з шумапрыглушэннем на мінімуме. Набор KAD ад Спаты гэта механічная клавіятура і смартфон за 17 см ад яе, плюс 10 пароляў, набраных клавіша за клавішай, кожны сваім запісам.
Я хацеў паглядзець, на што здольная простая мадэль, таму без глыбокай сеткі. Python 3.12, numpy 2.5.3, scipy 1.18.1, scikit-learn 1.9.0 на 4 ядрах. Кожны націск выразаецца па парогу энергіі, які падладжваецца, пакуль у файле не знойдзецца роўна 25 націскаў. Потым 330 мс гуку ператвараюцца ў лагарыфмічную мел-спектраграму з 64 паласамі і на яе глядзіць лагістычная рэгрэсія. Выпадковае адгадванне пры 36 клавішах дае 2,8%.
Для праверкі я дзяліў націскі па іх месцы ў файле: націскі з 0 па 4 у адным блоку, з 5 па 9 у наступным і гэтак далей. Выпадковае разбіццё адправіла б у навучанне суседзяў па часе для большасці тэставых націскаў. Тут сусед у навучанні ёсць толькі ў націскаў на краі блока.
Выйшла 92,4% на MacBook праз тэлефон, 84,6% праз Zoom і 99,3% на механічнай клавіятуры. Лінейная мадэль без аўгментацыі была не далей чым за 3 пункты ад сеткі Харысана на запісе з тэлефона. На механічнай клавіятуры яна зраўнялася з 99% у Спаты. Гэтага я не чакаў. На Zoom яна адстала на 8 пунктаў. На запісе з тэлефона Спата з суаўтарамі атрымалі 98,3%, на 6 пунктаў больш за мяне. У артыкулах даныя дзялілі інакш, так што параўнанне грубае.
Дзе я перастаў верыць
Потым я яшчэ раз паглядзеў, як уладкаваныя файлы, і мяне гэта насцярожыла. Кожная клавіша жыве ў сваім запісе. Дапусцім, тэлефон крыху зрушыўся паміж запісам a і запісам b. Тады класіфікатар можа вывучыць файл замест клавішы. Праверка вышэй гэтага не заўважыць, бо тэставыя націскі бяруцца з тых жа файлаў.
Таму я навучыў тую ж мадэль на цішыні. Ад кожнага націску я ўзяў 200 мс, якія пачынаюцца праз 400 мс пасля яго. Гук там ужо на 24–36 дБ цішэйшы за націск. І спытаў, якой клавішы належыць гэты кавалак цішыні. На MacBook праз тэлефон цішыня назвала клавішу ў 29,4% выпадкаў, праз Zoom у 16,1%, на механічнай клавіятуры ў 39,4%. Гэта ў 6–14 разоў больш за выпадковае адгадванне.
Аднаго толькі запісу, без самога націску, хапае, каб назваць клавішу. Класіфікатар на націсках, магчыма, таксама гэтым карыстаецца. Наколькі, па гэтых файлах я сказаць не магу.
Паролі KAD гэта праверка, у якой файл дапамагчы не можа. Там клавішы ідуць адна за адной унутры аднаго запісу. Я навучыў мадэль на ўсіх 900 націсках з файлаў клавіш і праверыў на 100 націсках унутры 10 пароляў. Колькі сімвалаў у кожным паролі, я загадзя паведаміў праграме, якая выразае націскі. Правільнымі аказаліся 77 са 100. У 93 са 100 правільная клавіша была ў першай пяцёрцы. Цалкам адгадаўся 1 пароль з 10, baseball47. Горш за ўсіх выйшаў position90, пачуты як ppsvtnpk00.
З 23 няправільных здагадак 10 трапілі на фізічнага суседа правільнай клавішы. Для выпадковай пары клавіш на гэтай раскладцы гэта 13%. Са слоўнікам гэта карысны спіс кандыдатаў, але паролю з лічбамі ў канцы ўсё роўна трэба 10 правільных здагадак запар.
Спата з суаўтарамі правялі такую ж праверку, на 8 паролях, запісаных пазней на той жа клавіятуры. Іх сетка атрымала ў сярэднім 89,1%. Іх пароляў у адкрытым наборы няма, таму наўпрост параўнаць я не магу, але гэта на 12 пунктаў вышэй за мае 77. У артыкуле Харысана такой праверкі няма.
Дзе ламаецца
Іншы запіс той жа клавіятуры. Я навучыў мадэль на запісе з тэлефона і праверыў на запісе Zoom, той жа MacBook і той жа чалавек за клавіятурай. Выйшла 6,3%. Адваротны кірунак даў 4,9%. Я думаў, што прычына ў рознай паласе частот: Zoom на 32 кГц супраць 44,1 кГц у тэлефона. Таму я пакінуў толькі мел-паласы ніжэй за 8 кГц і адняў ад кожнага запісу яго сярэдні лагарыфмічны мел-спектр у ролі грубага эквалайзера. Лепшае, што з гэтага выйшла, гэта 12%, у 4 разы вышэй за выпадковае адгадванне. Мяняюцца тут адразу тры рэчы: іншы мікрафон, іншы сеанс запісу і апрацоўка Zoom. Раздзяліць іх я не магу. 92% і 85% на першым графіку гэта 2 асобныя мадэлі, кожная навучаная на сваім запісе.
Шум. Тут я спачатку памыліўся. Я дадаў белы шум на 30 дБ ніжэй за націск і мадэль MacBook упала да выпадковага адгадвання. Я нейкі час шукаў памылку ў кодзе шуму, перш чым параўнаў узроўні па палосах. Большая частка гуку пакоя ў запісе тэлефона прыпадае на ніжнія паласы. Вышэй за 1,1 кГц там так ціха, што нават шум на 60 дБ ніжэй за націск гучнейшы за пакой. Так у 47 палосах з 64. Калі апошнія 5 націскаў кожнага файла адкладзеныя на праверку, у мадэлі было 88% на чыстых націсках, 43% пры 60 дБ і 5,6% пры 50 дБ. Мая здагадка ў тым, што яна абапіраецца на гэтыя амаль бязгучныя верхнія паласы.
Тады я дадаў той жа шум таго ж узроўню ў навучальныя націскі. Мадэль MacBook трымае 86% пры 60 дБ, 61% пры 30 дБ і 26% пры 0 дБ, дзе шум такі ж гучны, як сам націск. Механічная клавіятура застаецца на 97% нават пры 0 дБ. Кожная з гэтых мадэляў ведала ўзровень шуму загадзя.
Навучальныя даныя. Усё гэта патрабуе размечаных націскаў менавіта гэтай клавіятуры менавіта ў гэтым месцы. На тых жа адкладзеных націсках 1 размечаны націск на клавішу даў мадэлі MacBook 11%, 5 націскаў 41%, 20 націскаў 88%. Механічнай клавіятуры трэба менш: 50% з 1 націску і 89% з 5. Нехта мусіць спачатку націснуць кожную клавішу пад запіс або таму, хто атакуе, давядзецца размеціць націскі іншым спосабам. Працы, дзе гэта робяць без разметкі, выкарыстоўваюць моўную мадэль. Гэта асобная задача і я яе не паўтараў.
Чаго я не правяраў
Я не запісваў сваю клавіятуру. Замер ішоў на серверы без мікрафона, так што ўсё вышэй гэта 2 адкрытыя датасэты і 3 запісы. У наборы Харысана друкаваў адзін чалавек, пра KAD не сказана. Я не спрабаваў глыбокія сеткі з артыкулаў, так што перанос паміж запісамі з імі можа выйсці лепшым. Я не спрабаваў друкаваць у звычайным тэмпе, дзе націскі накладваюцца, бо маёй нарэзцы трэба 200 мс паміж націскамі. На запісе MacBook у акне цішыні гук яшчэ згасае, так што частка з гэтых 29% можа прыпадаць на гук самой клавішы. Праверка на паролях ад гэтага не залежыць. Кожны лік тут атрыманы за 1 прагон. Мае мадэлі дэтэрмінаваныя, а генератар шуму запускаецца з фіксаваным зернем.
Для мяне вынік вузейшы за загаловак. Гук клавішы сапраўды выдае клавішу. На праверцы паролямі мая лінейная мадэль атрымала 77 са 100, а сетка Спаты 89,1% на сваіх. Але ў абодвух выпадках гэта тая ж клавіятура, той жа пакой і той жа мікрафон, што і пры навучанні. З маёй мадэллю іншы запіс таго ж MacBook апускае вынік да 5 або 6%. Якая частка з 95% на MacBook прыйшла з файла, па гэтым датасэце я сказаць не магу.