Как однозначно идентифицировать сеть?

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

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

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

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

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

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

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

+3
источник поделиться
4 ответа

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

Вообще говоря, цель локального хранения данных - это доступ к ней во время автономной работы.

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

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

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

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

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


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

+4
источник

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

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

+3
источник

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

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

+1
источник

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

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

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

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

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

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос