[Russian][Crypto] Что такое side-channel attack / timing attack

Была у меня когда-то подруга и съемная двухкомнатная квартира. И мы обычно работали находясь в разных комнатах.

Деятельность подруги за компом была разделена на 4 основные (под)вида:

Фазы 2 и 3 часто перемежались, как и у большинства людей.

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

По нажатиям на клавиши вы можете прикидывать, какого размера сообщения уходят.

Облегчало задачу и то, что подруга довольно шустро топтала клаву вслепую.

Так работает side-channel attack (а особенно timing attack) в быту.


Так и с номерными радиостанциями. Дешифровать их сообщения никто не возьмется. Но имея дешевый радиоприемник и газету с новостями, вы могли протоколировать -- как часто станция выходит в эфир? Как много выдает сообщений? Какой они длины? И что в это время происходит в мире, в новостях? Так делали выводы о том, какая станция связана с какой страной.

В последствии так можно делать выводы -- если некая станция слишком активна, значит в такой-то стране что-то назревает. Опять же, такие выводы можно делать имея только радиоприемник, не дешифруя ничего.

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

Например -- в 1960-х, после карибского кризиса, между кабинетами президентов США и СССР установили телетайпы для прямой и срочной связи. По слухам, для шифрования использовался one-time pad (одноразовый блокнот), а ключами обменивались через дипломатов, надо думать, в чемоданах (ключ для OTP должен быть такой же длины, как и сообщение). Но и его могли подслушивать и наблюдать за активностью, даже не дешифруя сообщения. Так что во время неактивности, телетайпы гнали друг другу куски из русской (и американской?) художественной литературы. Наверное, принимающая сторона автоматически идентифицировала этот текстовый шум и игнорировала его. К тому же, это еще и было для теста, чтобы было видно, что во всякий момент времени телетайпы исправны и канал(ы) связи тоже.


Также может много полезной информации вам дать тот факт, что наблюдаемое сообщение, хотя и зашифрованное, но точно такое же. Вы можете делать разные полезные выводы, зная, что одно и то же сообщение X было отослано несколько раз, в такие-то дни и часы. А сообщение Y -- в другие какие-то дни и часы. Для современной безопасной связи в интернете это неприемлимо вообще. Поэтому в ssl/tls и ssh пакеты всегда будут разные, даже если пользователь запрашивает одну и ту же страницу через https, исполняет одну и ту же команду через ssh, и т.д.


И еще народная мудрость. Если поздно вечером в каком-то правительственном здании горит много окон -- это что-то значит. "Что-то происходит". Если много суетятся, мотаются машины -- тоже. (Хотя вы можете и не иметь доступа к той информации.) Ну и т.д.


Кстати, однажды на lichess.org опявился очень сильный гроссмейстер под ником Konevlad. Люди гадали, кто это может быть. (Настолько сильных гроссмейстеров в мире не так уж и много.) Нашелся тот, кто просто выкачал базу всех игр с lichess.org и проанализировал, в какие часы чаще всего был активен Konevlad и те гроссмейстеры, на кого падало подозрение. К тому же, анализировали и дебютный репертуар, что тоже очень легко, если под руками есть все сыгранные партии всякого активного гроссмейстера. Так его анонимность была раскрыта. Забавно: это можно было сделать даже если вообще не разбираться в шахматах.


И еще история со времен Фидонет. Конец 90-х. При коннекте через модемы (которые через телефонные линии), фидошные мейлеры передавали друг другу инфу о себе. Тогда это называлось EMSI-пакеты. В нашем маленьком городке завелся пранкер. Он изменил всю инфу в конфигах. И звонил на разные узлы, пакостил по мелочам.

Как я его идентифицировал? Хотя АОНа у меня не было. Дело в том, что в EMSI-пакетах фидошный мейлер также передавал текущее время на компе. А в то время, системное время (намеренная игра слов) выставляли вручную. Редко с точностью до секунд. Обычно с точностью до минут. К тому же оно съезжало постепенно. По NTP еще не синхронизировался никто.

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

Пранкер был идентифицирован и наказан.

(the post first published at 20230126.)


List of my other blog posts.

Subscribe to my news feed

Yes, I know about these lousy Disqus ads. Please use adblocker. I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.