Привет, GT. Я бы хотел предложить сообществу свой взгляд на умные замки, взгляд со стороны исследователя безопасности и параноика. Эта статья родилась как попытка дать развернутый комментарий в ответ на эту статью Умный замок Dooris. Но в итоге комментарий стал слишком отвлечен от самой статьи, и я решил доработать его и представить независимо.

Я не консерватор в вопросах прогресса. Я считаю, что IoT очень перспективная вещь, жду автомобилей без водителей, верю в носимую электронику и от вживления NFC метки меня останавливает только отсутствие реально интересных дополнительных возможностей, которые я потенциально бы получил. Именно поэтому я рад, когда вещи получают прилагательное «умный». Но умной должна быть не только техника, но и ее разработчик (ну и пользователь, желательно, тоже).

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

Аргумент 1. Я не доверяю разработчику

Ничего личного я не испытываю к Александру windicted, но может ли он дать гарантию, что нет закладки, позволяющей открыть замок? Это может быть программная закладка, которая «ловит» специальный «пакет данных-вездеход», так и аппаратная закладка, например, на герконах. Хуже всего, что это может быть банальный баг реального мира. Сам автор упоминает
«Также Dooris может ошибочно зап��реть дверь пока она открыта, если определённым образом качнуть дверь, одновременно постукивая по ней.»

С точки зрения замка, я так понимаю, не особенно важно в какую сторону вращать, так что потенциально фразу выше можно читать и как «…ошибочно открыть дверь пока она закрыта…». Для того, чтобы убедить, что в коде нет закладок, автор предлагает опубликовывать исходный код. Прошу прощения, может я отстал от жизни, но во времена, когда я был программистом задача сопоставления исходников и бинарного файла была крайне труднорешаемой. Я уж молчу, что бинарный файл из замка еще надо вытащить. А эта прошивка единственная? Внутри замка только один контроллер? А загрузчик у него есть? А перепрошить его по воздуху нельзя?

Аргумент 2. Разработчик может ошибаться

Причем не обязательно разработчик электронного замка. На самом деле, этот аргумент – это видоизменение предыдущего. Программисты драйверов беспроводных взаимодействий тоже люди, а Ping of Death хоть и был давно, но это не вымысел. Не хотелось бы, чтобы дверь открылась только от того, что рядом кто-то прошел со смартфоном, bluetooth-имя которого начинается с цифры.

Аргумент 3. Я не доверяю интернет-управлению

Если замком можно управлять по интернету, то вектор атак увеличивается многократно. А где этот сервер? Если у разработчиков централизованный сервер, то они могут открывать мой замок вероятностью в 99%. Если сервер поднимается у клиента, то первые два аргумента применяются уже к этому серверу.

А что делать-то?

Критикуешь – предлагай. Раз замок не может открывать дверь, то что он может? Лично для меня, частая проблема с замком состоит в том, что я не могу вспомнить, а закрыл ли я его? Поэтому в умном замке я вижу в первую очередь функционал по мониторингу закрытости через интернет. Чтобы я в любой момент мог посмотреть на специальном сайте, что все хорошо – дверь закрыта. А если это не так, то мог это быстро заметить.

Но тут не все так просто – я, как параноик, не хочу, чтобы кто-то узнавал открыта у меня дверь или нет. Cryptography FTW. Семейство протоколов «вручение бита на хранение», как мне кажется, идеально подходит. Это семейство схем-протоколов позволяет подтверждать какие-то данные, без их непосредственно разглашения.

Дополнительно я бы упомянул о еще одной функции. Возможность закрыть замок. Довольно спорный функционал. Собственно, единственное его применение – утром ушли и не закрыли дверь, посмотрели через сайт или приложение и узнали об этом, заперли замок. А вот проблем наличие такого функционала добавляет много.

Кто-то может закрывать дверь вместо вас (все те 3 аргумента, что были выше). Вы вышли выкинуть мусор и теперь стоите в одних тапочках снаружи. Чем более надежная защита, тем более неудобно будет ей пользоваться. Я вижу примерно такой сценарий – на замке можно выставить кодовую комбинацию на манер кодовых замков. Только отправка такой комбинации закроет дверь, причем после закрытия комбинация сбросится.

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

В общем, довольно спорная функция, которая хоть и может выручить, но потенциально сложна в реализации.

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