З таго часу як у верасні выйшаў Whisper, я праганяю праз яго запісы сваіх званкоў. Расшыфроўкі збіраюцца ў тэчцы побач з нататкамі. Відавочным месцам для іх быў рэпазіторый git са сканерам сакрэтаў у хуку на каміт, гэтак жа як абараняюць код. Потым я зразумеў, што не маю ўяўлення, што сканер бачыць у расшыфроўцы: я запускаў яго толькі на кодзе.
Таму я гэта вымераў, але без сваіх сапраўдных званкоў. Цягнуць сапраўдныя размовы ў тэст пра іх уцечку мне не хацелася.
Як я мераў
Я напісаў кароткую размову двух выдуманых людзей, 12 рэплік. У яе я заклаў 11 рэчаў, якія не павінны выйсці з пакоя: ключ доступу AWS, прачытаны па літарах, пароль ад базы на стэйджынгу, код ад дзвярэй офіса, код, які толькі што даслаў банк, тэлефон, email, нумар карткі, IBAN, адрас, хворую спіну калегі і заробак, пра які прасілі маўчаць. Імёнаў у ёй два, Anna і Marek.
Кожная рэпліка ёсць у двух варыянтах. Першы такі, як я набраў бы яе ў нататках падчас званка, напрыклад DB_PASSWORD=PurpleOtter1987. Другі такі, як яе вымавілі б: “the staging database password is still purple otter nineteen eighty seven”. Вусны варыянт я агучыў espeak-ng 1.51 двума наборамі галасоў. Першы гэта звычайныя галасы espeak, другі MBROLA us1 і us2, на мой слых яны гучаць менш механічна. Расшыфроўваў Whisper з рэпазіторыя ў стане на 9 снежня, мадэлі base і small на CPU, fp32, мова зададзена англійская. Атрымалася 4 расшыфроўкі адной размовы. Кожную рэпліку я сінтэзаваў і расшыфроўваў асобна, таму радок N расшыфроўкі гэта заўсёды рэпліка N.
Для сакрэтаў я прагнаў па кожным дакуменце сёлетнія версіі: gitleaks 8.15.2, trufflehog 3.21.0 і detect-secrets 1.4.0. Для асабістых даных я запусціў Microsoft Presidio 2.2.31 з мадэллю spaCy en_core_web_lg. Паўторны прагон Whisper даў тыя ж 2 расшыфроўкі MBROLA літара ў літару. У расшыфроўках espeak змяніліся 3 радкі, бо там Whisper пераходзіў на сэмплаванне: гэтыя 3 радкі дэкадуюцца пры тэмпературы 0,4 і вышэй. Ніводная клетка табліцы ніжэй ад гэтага не змянілася.
Нататкі
Тут інструменты зрабілі прыкладна тое, чаго я чакаў. gitleaks знайшоў ключ AWS па форме: AKIA і яшчэ 16 знакаў. Пароль ён знайшоў, бо той стаіць пасля PASSWORD= і яго энтрапія 3,51 ледзь перавышае парог правіла, 3,5. Так што крыху менш выпадковы пароль прайшоў бы. detect-secrets знайшоў толькі ключ. trufflehog не знайшоў нічога. Яго дэтэктару AWS патрэбны ідэнтыфікатар ключа разам з сакрэтам, а сакрэт на 40 знакаў у нататках падчас званка трапляецца рэдка. Presidio знайшоў тэлефон, email, картку, IBAN, горад і абодва імёны. Яшчэ ён вырашыў, што DE89 3704 0044 гэта чалавек.
Разам 7 з 11 пунктаў злавіў хоць адзін інструмент. Код ад дзвярэй, код ад банка, спіну і заробак не злавіў ніхто. Ні ў аднаго з гэтых 4 інструментаў няма правіла для чатырохзначнага ліку, які хтосьці назваў. Я не вельмі разумею, як такое правіла выглядала б.
Расшыфроўкі
На 4 расшыфроўках 3 сканеры сакрэтаў разам выдалі 0 знаходак.
Чаму так, відаць па радках. Whisper small на галасах MBROLA запісаў ключ як a KQX7 or HM2 PLT-4WZ6NB. AKIA больш няма, так што рэгулярцы няма за што зачапіцца. Пароль стаў “purple under 1987”, пасля слова password няма =, таму агульнае правіла не спрацоўвае. Картка стала for 1111 1111 1111 1111 1111: першае “four” ператварылася ў прыназоўнік і з’явілася пятая група. Presidio правярае нумары картак алгарытмам Луна. Лічбы, што засталіся, праверку не праходзяць. Email стаў “hurrymail is in the dot calzcatexample.com”. Marek стаў “Merck” на галасах MBROLA і “America’s” на espeak. Presidio палічыў America геаграфічнай назвай. Anna ацалела адзін раз, унутры зламанага радка з email: espeak з small запісаў “Anna.Kaul’s cat example.com”. Толькі ў гэтай расшыфроўцы Presidio яе і знайшоў. У астатніх яна ператварылася ў “and”, “in a” ці знікла зусім. У расшыфроўцы MBROLA small Presidio замест яе знайшоў чалавека на імя “hurrymail”.
Я даволі доўга чытаў гэтыя радкі, перш чым убачыў заканамернасць. Я чакаў, што на расшыфроўках інструментам будзе цяжэй. Так і выйшла, але губляецца не абы-што.
Whisper зламаў большую частку таго, што інструменты ўмеюць шукаць, бо ў такіх пунктаў ёсць форма: прэфікс, кантрольная сума, @. Тэлефон таксама ацалеў, але толькі на галасах MBROLA. Ва ўсіх расшыфроўках ацалелі код ад дзвярэй, код ад банка, спіна і заробак, гэта значыць якраз тое, чаго ніводзін інструмент не злавіў ні ў адным дакуменце. Гэта кароткія лікі і простыя словы. Whisper захоўвае лікі і сэнс, нават калі скажае словы вакол. У 1 расшыфроўцы радок пра дзверы стаў “The office norco is 4815”. У расшыфроўках MBROLA чытэльнымі засталіся 5 з 11 пунктаў. Presidio адзначыў 1 з гэтых 5, тэлефон, з ацэнкай 0,4. Яшчэ ён адзначыў Springfield з адраса, які ператварыўся ў “14 ohms street”.
Скажоныя пункты па-ранейшаму чытаюцца кожным, хто ведае каманду: “Merck is up until Friday. The doctor says it is his back again.”
Што вяртае git rm
Другая палова рашэння даўно вядомая. Я праверыў, як паводзіць сябе git rm, у асноўным для таго, каб мець права сказаць, што праверыў. Я закаміціў расшыфроўку, наступным камітам выдаліў яе праз git rm і паглядзеў. git log -S'door' знаходзіць абодва каміты. Файл чытаецца праз HEAD~1 пасля git gc --prune=now. Свежы клон яго таксама мае, бо каміт, які яго дадаў, па-ранейшаму ў гісторыі. Каб прыбраць файл, трэба перапісаць гісторыю праз git filter-repo або BFG і спадзявацца, што ніхто не паспеў скланаваць. Старонка GitHub пра выдаленне канфідэнцыйных даных раіць тыя ж 2 інструменты і папярэджвае пра існыя клоны.
Так што расшыфроўкі не трапляюць ні ў адзін рэпазіторый. Тэчка ляжыць па-за ўсімі рэпазіторыямі. Сканер у хуку на каміт застаецца інструментам для кода.
Чаго я не правяраў
Гэта 1 выдуманая размова з сінтэтычнымі галасамі. У сапраўдных званках ёсць шум і акцэнты. Людзі перабіваюць адно аднаго. З жывым голасам Whisper, хутчэй за ўсё, лягчэй разбірае імёны. Я не спрабаваў мадэлі medium і large-v2, якія могуць аднавіць ключ AWS або email. Я не спрабаваў рускую. Presidio працаваў са стандартнымі распазнавальнікамі. Уласны шаблон для кодаў ад дзвярэй злавіў бы частку з іх, але, хутчэй за ўсё, злавіў бы і любы чатырохзначны лік у размове. І я не спрабаваў моўную мадэль у ролі дэтэктара. Яна, магчыма, зразумела б “she asked us not to tell the team”, але для гэтага ёй давялося б прачытаць расшыфроўку цалкам.