Так уж случилось, что мне понадобилось полное шифрование ОС на моём ноутбуке. Как бы мне ни хотелось воспользоваться для этого одним из дистрибутивов GNU/Linux, к сожалению, мне пришлось остаться на Windows, поскольку мне было необходимо определенное ПО, доступное только под Windows (а Wine я слишком сильно не люблю, чтобы пользоваться им почти ежедневно). Зато такой выбор ОС сразу упростил выбор системы шифрования, поскольку под Windows ничего сто́ящего, кроме TrueCrypt, нет (поправьте меня, если я не прав).
Итак, я зашифровал весь свой жесткий диск, установил TrueCrypt'овый загрузчик и вроде бы всё у меня сразу стало хорошо. Однако, у меня было одно опасение: а что, если мой ноутбук попадёт в чужие руки включенным? Ведь тогда все мои старания будут бесполезными, поскольку ключ шифрования будет в оперативной памяти и новый владелец без проблем сможет просматривать любые данные на моём жестком диске.
Я начал думать над решением новонайденной проблемы. На ArchLinux Wiki я вычитал идею написать приложение, которое выключает ноутбук, если не может найти какое-то заданное Bluetooth-устройство. Идея, в общем-то, показалась мне неплохой, но мне не хотелось, чтобы работоспособность моего ноутбука зависила не только от его аккумулятора, но ещё и от аккумулятора какого-то другого устройства. Да и постоянно включенный и используемый Bluetooth не понизит энергопотребление.
И тут я очень вовремя вспомнил, что мой ноутбук относиться к объективно самой лучшей серии ноутбуков в мире, а именно, к серии ThinkPad. Одной из функций, присущей всем новым (и не очень) ноутбукам этой серии, является т.н. Active Protection System. Говоря простым языком, это акселерометр на материнской плате, преназначенный для того, чтобы детектировать падения ноутбука, дабы заранее припарковать головку жесткого диска, таким образом уменьшаяя вероятность нанесения урона жесткому диску в результате падения. Но кого, собственно, интересует, для чего эта штука предназначена? Ведь главное — то, что у нас есть акселерометр, при помощи которого можно определить, когда ноутбук подняли или другим образом пытаются переместить с одного места на другое.
Так родилась идея Alarmist. Alarmist — программа на языке Python, которая умеет брать показатели с датчиков и, если датчики показывают что-нибудь страшное, подавать сигнал паники. Как датчики, так и реализации паники можно легко заменять и модифицировать. Конечно же, Alarmist можно легко на время приостанавливать, например, если необходимо передвинуть ноутбук с одного места на другое.
Сейчас Alarmist умеет получать данные с ThinkPad'овского акселерометра (правда, только под Windows) и выполнять произвольные консольные команды в случае паники (по умолчанию — гибернация). За исключением датчика ThinkPadShockSensor, Alarmist полностью кроссплатформенный (в теории, на практике я его не тестировал под другими ОС). Мне большего и не нужно, но я был бы рад увидеть реализации других датчиков и методов паник, благо Alarmist свободен и доступен на github. Интересными (на мой взгляд) идеями для новых датчиков является уже упомянутое выше использование Bluetooth и устройства-«маячка», использование модулей GPS/GSM/WiMax и анализ поведения пользователя.
Я буду очень рад, если моя разработка пригодится ещё кому-нибудь, поэтому и делюсь ею здесь. Тем, кто захочет ею воспользоваться, я хотел бы дать ещё один совет: не забудьте о настроенных действиях при закрытии крышки ноутбука и нажатии на кнопку выключения, поскольку, если у вас там «sleep», ничто не помешаети злоумышленнику закрыть крышку ноутбука, отнести его к себе в логово и уже там открыть, на ровной поверхности, не вызвав никаких подозрений у Alarmist.
Кстати, вот видео с демонстрацией работы Alarmist (уж простите за качество):