Как однозначно идентифицировать сеть? - PullRequest
4 голосов
/ 22 марта 2011

Допустим, я хочу создать приложение, в котором хранимые данные зашифрованы, поэтому только мое приложение может их прочитать.

Но я хочу, чтобы приложение было доступно только в том случае, если пользователь находится в определенной сети. Например, это приложение для Android, которое работает с медицинскими картами в больнице. Как быть уверенным, что устройство подключено к сети больницы? Идея состоит в том, что вне этой сети приложение не будет работать.

Этот вопрос не имеет особого отношения к беспроводным сетям, беспроводным устройствам или Android, это вообще касается программирования и идентификации сети.

Может ли сертификат сделать это? Я новичок в этом. Может ли сетевой «идентификатор» быть подделан? Например, я уверен, что WiFi SSID легко подделать.

Приветствие.

Подробнее: Предположим, что точка локальных данных не для «автономного режима», а для того, чтобы избежать задержки в сети. В этом случае данные должны оставаться доступными, только если они подключены к определенной сети, в случае кражи устройства.

Но если нет способа убедиться в идентичности сети ... Как насчет сервера, который ответил бы на вопрос "Эй, я в правильной сети?" и если нет ответа, я знаю, что я не на правильном? (Или что сервер просто не отвечает ...) Но, опять же, если приложение взломано, его тоже можно подделать.

Ответы [ 4 ]

4 голосов
/ 22 марта 2011

Интересная проблема.

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

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

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

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

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

Принимая во внимание, что можно полностью вытащить устройство из сети и, следовательно, отключить удаленную очистку от выполнения.


При этом с пути нет абсолютно никакихспособ, которым вы можете убедиться, что устройство находится в данной сети.Все это может быть подделано.Это довольно просто настроить маршрутизатор с заданным именем и изменить его MAC, чтобы он маскировался как угодно и назначить ему определенные IP-адреса.В любом случае это может выглядеть так, как если бы у вас была точка доступа ... И это только при обычном запуске беспроводных маршрутизаторов, которые можно купить в местном компьютерном магазине.

3 голосов
/ 23 марта 2011

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

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

1 голос
/ 23 марта 2011

Возможно, вы могли бы использовать туннели IPSec. Многие маршрутизаторы и межсетевые экраны поддерживают IPSec. Я думаю, что-то вроде этого:

                             ----------------------------------- 
                            /            IPSec tunnel           \
                       +---------+                               \
                     A |  IPSec  | B      Untrusted               \
trusted network -------| capable |-------  Networks  ----------- Your application
                       | router  |      Internet, etc.
                       +---------+

Маршрутизатор / межсетевой экран шлюза, который обеспечивает доступ к доверенной сети, настроил туннель IPSec между собой и вашим приложением. И на маршрутизаторе, и на сервере приложений туннель выглядит как еще один сетевой интерфейс. Маршрут на маршрутизаторе направляет трафик для вашего приложения на интерфейс туннеля. Фильтр может использоваться на маршрутизаторе, чтобы гарантировать, что трафик направляется в туннель только в том случае, если он поступает на интерфейс A (т. Е. Доверенная сеть). Трафик, поступающий по интерфейсу B, предназначенный для вашего приложения, может быть просто отброшен фильтром на маршрутизаторе, поскольку он явно идет в неправильном направлении.

Если ваше приложение привязывает свой сокет прослушивания только к интерфейсу туннеля, вы будете знать, что принимаете только те соединения, которые получены через туннель.

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

1 голос
/ 22 марта 2011

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

Честно говоря, если рассматриваемая беспроводная сеть не использует сертификаты для идентификации устройств, у вас не будет надежного способа сделать это, и даже в этом случае предполагается, что у вас есть способ получить сертификат в сети Wi-Fi в своем приложении. возвращается во время сетевой аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...