Привет, GT. Я бы хотел предложить сообществу свой взгляд на умные замки, взгляд со стороны исследователя безопасности и параноика. Эта статья родилась как попытка дать развернутый комментарий в ответ на эту статью Умный замок Dooris. Но в итоге комментарий стал слишком отвлечен от самой статьи, и я решил доработать его и представить независимо.
Я не консерватор в вопросах прогресса. Я считаю, что IoT очень перспективная вещь, жду автомобилей без водителей, верю в носимую электронику и от вживления NFC метки меня останавливает только отсутствие реально интересных дополнительных возможностей, которые я потенциально бы получил. Именно поэтому я рад, когда вещи получают прилагательное «умный». Но умной должна быть не только техника, но и ее разработчик (ну и пользователь, желательно, тоже).
После такого небольшого вступления я сразу выскажу основной тезис – умный замок не должен уметь открывать квартиру. Вот так. Причем принципиально именно механически не должен мочь, а не программным запретом.
Аргумент 1. Я не доверяю разработчику
Ничего личного я не испытываю к Александру windicted, но может ли он дать гарантию, что нет закладки, позволяющей открыть замок? Это может быть программная закладка, которая «ловит» специальный «пакет данных-вездеход», так и аппаратная закладка, например, на герконах. Хуже всего, что это может быть банальный баг реального мира. Сам автор упоминает
«Также Dooris может ошибочно запереть дверь пока она открыта, если определённым образом качнуть дверь, одновременно постукивая по ней.»
С точки зрения замка, я так понимаю, не особенно важно в какую сторону вращать, так что потенциально фразу выше можно читать и как «…ошибочно открыть дверь пока она закрыта…». Для того, чтобы убедить, что в коде нет закладок, автор предлагает опубликовывать исходный код. Прошу прощения, может я отстал от жизни, но во времена, когда я был программистом задача сопоставления исходников и бинарного файла была крайне труднорешаемой. Я уж молчу, что бинарный файл из замка еще надо вытащить. А эта прошивка единственная? Внутри замка только один контроллер? А загрузчик у него есть? А перепрошить его по воздуху нельзя?
Аргумент 2. Разработчик может ошибаться
Причем не обязательно разработчик электронного замка. На самом деле, этот аргумент – это видоизменение предыдущего. Программисты драйверов беспроводных взаимодействий тоже люди, а Ping of Death хоть и был давно, но это не вымысел. Не хотелось бы, чтобы дверь открылась только от того, что рядом кто-то прошел со смартфоном, bluetooth-имя которого начинается с цифры.
Аргумент 3. Я не доверяю интернет-управлению
Если замком можно управлять по интернету, то вектор атак увеличивается многократно. А где этот сервер? Если у разработчиков централизованный сервер, то они могут открывать мой замок вероятностью в 99%. Если сервер поднимается у клиента, то первые два аргумента применяются уже к этому серверу.
А что делать-то?
Критикуешь – предлагай. Раз замок не может открывать дверь, то что он может? Лично для меня, частая проблема с замком состоит в том, что я не могу вспомнить, а закрыл ли я его? Поэтому в умном замке я вижу в первую очередь функционал по мониторингу закрытости через интернет. Чтобы я в любой момент мог посмотреть на специальном сайте, что все хорошо – дверь закрыта. А если это не так, то мог это быстро заметить.
Но тут не все так просто – я, как параноик, не хочу, чтобы кто-то узнавал открыта у меня дверь или нет. Cryptography FTW. Семейство протоколов «вручение бита на хранение», как мне кажется, идеально подходит. Это семейство схем-протоколов позволяет подтверждать какие-то данные, без их непосредственно разглашения.
Дополнительно я бы упомянул о еще одной функции. Возможность закрыть замок. Довольно спорный функционал. Собственно, единственное его применение – утром ушли и не закрыли дверь, посмотрели через сайт или приложение и узнали об этом, заперли замок. А вот проблем наличие такого функционала добавляет много.
Кто-то может закрывать дверь вместо вас (все те 3 аргумента, что были выше). Вы вышли выкинуть мусор и теперь стоите в одних тапочках снаружи. Чем более надежная защита, тем более неудобно будет ей пользоваться. Я вижу примерно такой сценарий – на замке можно выставить кодовую комбинацию на манер кодовых замков. Только отправка такой комбинации закроет дверь, причем после закрытия комбинация сбросится.
Кроме того, моторчику, в общем-то, все равно в какую сторону вращать. Кроме того, не всегда вращение против часовой стрелки закрывает дверь. Вот и получается, что «програмно», если дверь можно закрыть, то, потенциально, ее можно и открыть. Здесь решение видится таким – на этапе настройки, пользователь физически блокирует вращение замка в одну из сторон (на манер отвертки-трещотки). Но тогда такой замок тяжело будет открыть ключом.
В общем, довольно спорная функция, которая хоть и может выручить, но потенциально сложна в реализации.
В этой статье я попытался представить свое видение умного замка, а желающих подискутировать я приглашаю в комментарии.
Автор: xi-tauw