如何唯一标识一个网络?

4
假设我想制作一个应用程序,其中存储的数据已加密,因此只有我的应用程序能够读取它。但我希望仅在用户连接到特定网络时才能访问该应用程序。例如,该应用程序是一款安卓应用程序,用于处理医院的病历记录。如何确保设备连接到医院的网络?这样,在该网络之外,该应用程序将无法工作。这个问题与无线网络、无线设备或安卓没有特别关联,这是编程和网络识别的通用问题。证书可以做到这一点吗?我对此还不熟悉。网络“标识符”是否可以被伪造?例如,WiFi SSID很容易被伪造。如果本地数据的目的不是为了“离线模式”,而是为了避免网络延迟,那么,只有在连接到特定网络时,数据才需要保持可访问性,以防设备被盗。但是,如果无法确定网络的身份怎么办?那么,一个能够回答“嘿,我是否在正确的网络上?”的服务器如何呢?如果没有响应,我就知道我不在正确的网络上了?(或者服务器只是没有响应……)但是,如果应用程序被黑客攻击,这也可以被伪造。

是的,谢谢@blowdart,对此我很抱歉。 - Arnaud
4个回答

4
有趣的问题。
一般来说,本地存储数据的目的是为了在“离线”时访问它。但是,我认为这里可能存在一些潜在的误解。想必你想这样做的唯一原因是试图防止被盗设备泄露机密信息。事实是,你无法做到。如果设备不再受你的物理控制,那么它被黑客攻破只是时间问题。
如果我们谈论敏感数据,它不应该存储在设备上。相反,设备应该在需要数据时从服务器检索所需数据,并在不再需要时在本地删除它。
你希望设备仅在连接到你的本地网络时才能工作,这意味着你可以实现这个目标。
顺便说一下,这就是为什么会有“远程清除”的事情存在。每次设备连接到你的网络时都需要测试其身份验证和授权。如果有人报告设备丢失或被盗,则需要能够将其从你的网络中禁止,并在设备支持的情况下远程禁用它。
需要注意的是,完全有可能从网络中拉出设备,从而禁止执行远程清除操作。
既然如此,你绝对无法确保设备连接到特定的网络。所有这些都可以被伪造。将普通的无线路由器改名并更改其MAC地址以冒充任何东西并分配特定的IP地址是相当轻松的。在所有实际用途上,它可能看起来完全像你拥有的访问点...而这只是你可以在当地计算机商店购买的常规无线路由器。

同意这个误解的事实。 如果本地数据的重点是可以在离线状态下访问,那么尝试识别网络是毫无意义的... - Arnaud
谢谢你提供的“远程擦除”,我也会去看看。 - Arnaud

3
您可以编写程序,使解密数据的密钥存储在医院网络上的服务器上。如果您的程序从不存储密钥,则使得除网络外的任何人访问设备数据变得更加困难(虽然不是不可能)。
正如Chris所指出的,远程擦除肯定是可取的。您可以添加逻辑,以便如果设备尝试在未连接到网络时读取数据,则擦除数据(这可能会导致意外的擦除)。黑名单也很好用,因此如果设备尝试重新连接到网络,则可以将其基本上变成砖头。一个非常糟糕的事情是如果您的网络中断,所有设备都会被意外擦除。

第一段有正确的想法 - 唯一安全的方法是确保技术上需要读取数据的东西只在正确的网络上可用。您应该使用许多密钥 - 每个记录一个密钥,然后在使用后立即使应用程序忘记密钥。 - caf
为了谨慎起见,我个人认为在网络故障的情况下最好将设备意外清除。 - NotMe
但是当密钥从服务器检索时,我会受到中间人攻击,对吗? - Arnaud
我绝对不是安全专家,但您可以使用安全的密钥传输方法(SSL)。即使有人可以嗅探到密钥,他们还需要访问设备和您的解密方法程序才能获取数据。 - Jeff

1
也许你可以使用IPSec隧道。许多路由器和防火墙都支持IPSec。我的想法是这样的:
                             ----------------------------------- 
                            /            IPSec tunnel           \
                       +---------+                               \
                     A |  IPSec  | B      Untrusted               \
trusted network -------| capable |-------  Networks  ----------- Your application
                       | router  |      Internet, etc.
                       +---------+

提供受信任网络访问的网关路由器/防火墙已在其与您的应用程序之间配置了IPSec隧道。在路由器和应用程序服务器上,隧道看起来像另一个网络接口。路由器上的路由将应用程序的流量定向到隧道接口。可以在路由器上使用过滤器确保仅当流量到达接口A(即受信任网络)时才将其转发到隧道。到达您的应用程序的接口B上的流量可以通过路由器上的过滤器直接丢弃,因为它显然是错误的方向。

如果您的应用程序将其侦听套接字绑定到隧道接口,则您将知道您只接受通过隧道接收到的连接。

您可以使用任何加密和身份验证机制的组合来确保流量安全。大多数IPSec实现支持几乎所有您想要的内容。


1

任何网络都可以复制另一个的SSID,所以这不可靠。您可以开始使用已知路由器的SSID和MAC地址的组合,但是MAC地址可以被复制(尽管不能在同一网络上),因此这也行不通。

坦白地说,除非所讨论的无线网络使用证书来识别设备,否则您将没有可靠的方法来做到这一点,即使是这样,这也假定您的应用程序有一种方法来获取WiFi网络在网络身份验证期间返回的证书。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接