08.01.2014

Всемирная база паролей к сетям Wi-Fi на вашем мобильнике

Те из нас, кто много путешествует, наверняка не раз оказывались вот в такой ситуации: в городе, в который вы приехали, много беспроводных сетей, но все они с паролями (которых вы не знаете). Местной SIM-карты у вас нет, а интернет в роуминге у вас стоит как двигатель самолёта, на котором вы прилетели.

А вот здорово бы было, если бы хотя бы некоторые из этих паролей были бы вам известны. Давайте рассмотрим, как именно подобная система могла бы работать.

Для простоты давайте предположим, что у всех пользователей Android-телефоны (или планшеты), и у всех есть root-доступ к устройству. Естественно, на практике стоит разрабатывать такую систему с расчётом на более широкую аудиторию, но, поскольку это вносит значительные технические усложнения, давайте сначала рассмотрим именно такую пользовательскую категорию.

Итак, наш пользователь (назовём его Света) сидит дома и пьёт какао. Какао тёплое, настроение хорошее, всё прекрасно. Но тут Света вспоминает, что ей нужно пойти в город по делам, и что ей, скорее всего, понадобится интернет, а мобильного интернета у неё нет. Поэтому она запускает Android-приложение (назовём его hsdb — hotspot database), которое заботливо сообщает ей о том, что в базе данных появилось 137415 новых сетей Wi-Fi (с паролями!), и Света, конечно же, нажимает на «Обновить». Программа показывает ей прогресс-бар и приблизительную оценку времени, необходимого на обновление локальной базы данных. Вместе с тем, hsdb также выводит сообщение о том, что в файлике /data/misc/wifi/wpa_supplicant.conf (именно в него Android-устройства записывают пароли к беспроводным сетям, к которым подключается пользователь) появились новые записи, и уточняет у Светы, хочет ли она загрузить их в общую базу данных. Света отмечает галочками 3 из 4 новых записей — к двум сетям она подключалась в кафешечках, к одной (гостиничной) она подключена прямо сейчас, а вот та сеть, которую она не отметила, дома у её подруги, и Света не хочет, чтобы пароль к ней был доступен любому желающему — и нажимает «Опубликовать». Три выбранные сети почти моментально оказываются в общей базе данных (разумеется, без какой-либо информации о Свете).

Проходит ещё пара минут, и обновление базы данных завершается. Довольная Света идёт в город, зная, что ей теперь не стоит так уж сильно беспокоиться на тему Интернета: не нужно задавать официантам эти абсурдные вопросы в духе «Excuse me, could you please tell me the password for your Wi-Fi?», да и, скажем прямо, скорее всего она сможет воспользоваться Интернетом и на улице (возле тех же кафешек, например). Света просто открывает hsdb, и видит список тех сетей, до которых есть сигнал и для которых в локально сохранённой базе данных есть пароль.

В принципе, в самом простом варианте — этого вполне достаточно. Но если усложнять, и реализовывать подключение с помощью hsdb (а не с помощью стандартного меню), то можно также записывать BSSID. Потому что, во-первых, название у некоторых сетей может периодически меняться, а во-вторых, по BSSID часто можно определить местоположение. Да и, в принципе, можно сразу заодно и координаты записать — может получиться более точно, чем проверять BSSID по публичным БД. К тому же, в этом случае исчезает необходимость читать /data/misc/wifi/wpa_supplicant.conf, и приложение начинает работать уже везде, а не только там, где есть root-доступ.

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

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

Буду рад вашим комментариям и идеям. С Новым годом вас, и поменьше вам трудностей с поиском беспроводных сетей в путешествиях.

Источник: habrahabr.ru