В этой статье я хочу предложить подход к написанию кода на стороне сервера, который мобильные телефоны могут выполнять для выполнения длительных, периодических и ресурсоемких задач таким образом, чтобы для их размещения не требовался монолитный централизованный сервер, и Безопасность данных, необходимых для их выполнения (например, имя пользователя / пароли или информация о кредитной карте), становится труднее получить или прочитать, чем в существующих системах.
Я собираюсь начать с небольшого количества философии и истории, которая, вероятно, будет старой новостью для многих, но я думаю, что это создает основу. Новое происходит со второго раздела.
Владение информацией в ее нынешнем виде
Первоначальная предпосылка Интернета была о свободе и децентрализации. Любой может иметь свой собственный сервер и запустить почтовую систему, или HTTP-сервер, или что-то еще. Это все еще идеал, которым дорожат многие пользователи сети, однако монетизация Интернета означает, что он развивался совсем по-другому. 99% населения не заботятся о своем собственном сервере и не знают, как его настроить, если они это сделают. Люди хотят, чтобы им предоставляли услугу, которая проста в использовании. Интернет-компании извлекли выгоду из этого, создав целые экосистемы, в которых существуют их пользователи.
Facebook, Google и Apple являются крупнейшими игроками в этом пространстве и, действительно, крупнейшими новаторами в Интернете, потому что у них есть финансовая модель, которая оправдывает усилия по разработке. Однако для этого были достигнуты некоторые компромиссы. Безопасность, стабильность и даже доступность вашей персоны и данных в Интернете контролируются отдельными организациями. В целом, эти компании делают большую работу по защите ваших (своих) данных и имеют хорошую надежность.
Но когда что-то идет не так (например, недавняя утечка данных Sony ), это масштабное событие, затрагивающее не только несколько десятков или несколько сотен человек. Что еще более важно, централизация информации создает золотую жилу (почти буквально) для компаний, которые их контролируют, и правительства, желающего получить доступ .
Хотя такие проекты, как диаспора , заслуживают похвалы в своих усилиях по возвращению контроля над людьми, существуют многочисленные проблемы. Прежде всего, и я не думаю, что мы должны бороться, это инновационная финансовая модель. Диаспора производит программное обеспечение с открытым исходным кодом, которое напрямую не приносит доход (по крайней мере, не в том масштабе, который хотят крупные корпорации), и им приходится производить конкурентоспособный продукт, который люди хотят использовать, конкурируя с компаниями, у которых есть заказы. величины больше ресурсов. Простая логика гласит, что большие мальчики победят, если только у людей нет веских причин выбирать открытый маршрут. Конфиденциальность данных — очевидный выбор, но в настоящее время почти все блефуют об информационной безопасности.
Последний вызов и тема, о которой я хочу поговорить в этом посте, окружают простоту использования. Люди не запускают свои собственные серверы, потому что они не знают, как это сделать, или они трудоемки в настройке и стоят денег, чтобы работать, даже если они знают, как это сделать. Даже люди, которые относятся к безопасности (несколько) серьезно, колеблются. Я управлял электронной почтой и веб-сайтами моей семьи в течение некоторого времени и в конце концов сдался, переместив их в Google Apps, что я до сих пор чувствую смутно смущенным.
Дело для мобильных агентов
Что если бы не было сложно развернуть службы, и это можно было бы сделать таким образом, чтобы иметь доступ только к тем устройствам / людям, к которым вы хотели? Облачные вычисления предоставляют такую возможность. На данный момент большинство людей используют сервисы облачных вычислений аналогично традиционным веб-серверам. Это монолитный сервер, который обслуживает всех пользователей из одной и той же базы данных и компьютеров, потому что именно так нас учили их использовать.
Вместо этого я вижу механизм, с помощью которого ваш телефон или ноутбук просто регистрирует код с помощью службы облачных вычислений, и ваши потребности удовлетворяются таким образом. Это может осуществляться самим устройством без взаимодействия с пользователем, теперь, когда есть API для создания и использования сервисов облачных вычислений. Кроме того, взаимодействия могут (в большинстве случаев) быть зашифрованными, так что только устройство, создающее агента, может извлечь информацию или даже получить данные, необходимые для обработки запроса, тем самым делая агента меньшей целью для взлома.
Я нахожу это особенно интересным для мобильных телефонов. Мобильные телефоны становятся все более мощными с каждым днем, но они сдерживаются ограничениями батареи. На сервере разработчики могут позволить себе быть расточительными или использовать ресурсы в меньшей степени, когда пишут мобильные приложения. Традиционным способом решения этих проблем было выполнение большей части обработки на сервере и использование мобильного устройства в качестве платформы ввода-вывода для доступа к веб-данным. Это хорошо работает для платформ, которые владеют всем опытом, но может быть трудным для приложений в стиле mashup, которые могут не иметь ресурсов для запуска корпоративных серверов. Кроме того, существуют проблемы безопасности, присущие передаче информации стороннему серверу.
На практике
Я возьму пример из моего собственного приложения NodeDroid , которое выводит на экран веб-сайты телекоммуникационных компаний , чтобы сообщить об использовании телефона. NodeDroid хранит имя пользователя и пароль на телефоне, получает доступ к веб-сайту телекоммуникационной компании для загрузки HTML-страниц, а затем анализирует информацию об использовании (которая несколько загружает процессор).
Было бы замечательно, если бы телекоммуникационная компания предоставила API, чтобы сделать это без очистки экрана, но по большому счету они этого не делают. На данный момент вся обработка происходит на телефоне. Я поиграл с идеей создания службы для извлечения телефонов, но у меня не было по двум причинам. Во-первых, я не зарабатываю на этом деньги, поэтому я не понимаю, почему я должен брать на себя расходы на работу сервера. Во-вторых, что более важно, я не хотел видеть пароли людей.
Если бы у меня был сервер, телефоны должны были бы отправить пару имя пользователя / пароль, чтобы мой сервер мог передать их в телефонную компанию и получить данные. Назовите меня идеалистом, но может быть лучше. Раньше я об этом говорил , и в итоге мне всегда было неловко крутить другое веб-приложение каждый раз, когда я хочу новую услугу.
Google предоставляет сервис облачных вычислений, который называется Google App Engine . Каждый человек с учетной записью Google (а это почти каждый, у кого есть телефон Android) может создавать свои собственные облачные приложения с очень щедрыми бесплатными ограничениями. Телефон может создать специальное веб-приложение, называемое «агент», специально для извлечения данных об использовании и его развертывания в GAE. В целях безопасности развернутый агент будет включать имя пользователя / пароль для доступа к телефонной компании, но он будет шифровать его с помощью криптографии с открытым ключом и хранить закрытый ключ на телефоне, чтобы даже если кто-то взломал веб-приложение на GAE, они не смогут получить информацию. Когда телефон хотел получить информацию, он отправлял ключ на время обмена агенту, который расшифровывал параметры, необходимые для выполнения функции, возвращал данные пользователю, а затем забывал ключ. Благодаря этому мы достигли ряда преимуществ:
- Рабочая нагрузка по извлечению информации была выгружена на сервер, что позволяет экономить заряд аккумулятора и использование полосы пропускания, поскольку только необходимая информация отправляется обратно на телефон, а не весь сеанс очистки экрана.
- Информация о пользователе хранится в безопасности на сервере, так как она доступна только во время отдельного вызова с устройства
- Телефон пользователя больше не хранит конфиденциальную информацию, и если бы кто-то украл телефон, он мог бы извлечь ваше использование (вызвав агента), но не получить пользователя / пароль для доступа к другой информации на сайте оператора. Им нужно было взломать телефон и сервер, чтобы получить его, и даже тогда получить данные только одного пользователя.
- Агенты могут быть распределены для работы на любом провайдере облачных вычислений или на их собственном домашнем сервере, если пользователь хочет быть более защищенным со своей информацией
- В случае отказа одного облачного провайдера он может просто воссоздать агента в другом месте для достижения надежности
- Агент сервера может запускать фоновые или повторяющиеся задачи, избавляя телефон от необходимости делать это. Уведомление может быть выполнено C2DM , даже если исходная служба не поддерживает его
Мне нравится это как подход, и я в настоящее время экспериментирую с системой, чтобы сделать именно это на Android. Это не идеально, и есть некоторые проблемы безопасности, но это намного безопаснее, и гораздо более личное и личное, чем большинство подходов, используемых сегодня. Чтобы это работало, писать код агента будет проще, чем писать сервер и создавать инфраструктуру для его размещения. Агенты будут расширениями телефонного приложения, включенными в приложение, и для них не потребуются никакие специальные серверы. Я думаю, что могу сделать это. Я опубликую больше, как только у меня будет работающая система.