假设我想创建一个存储数据加密的应用程序,只有我的应用程序能够读取它。
但我希望只有当用户在特定网络上时才能访问该应用程序。 例如,该应用程序是一个处理医院医疗记录的Android应用程序。 如何确保设备连接到医院的网络?我们的想法是,在这个网络之外,该应用程序将无法运行。
这个问题与无线网络,无线设备或Android无关,这对编程和网络识别来说是一般性的。
证书能做到吗?我是新手。 网络“标识符”是否可以伪造?例如,我很确定WiFi SSID很容易伪造。
干杯。
更多细节: 让我们假设本地数据的点不是用于“离线模式”,而是为了避免网络延迟。在这种情况下,只有在连接到特定网络时,数据才能保持可访问状态,以防设备被盗。
但如果无法确定网络的身份......那么服务器会回答“Heya am I on the right networks?”的问题。如果没有回应,我知道我不是正确的? (或者服务器只是没有响应...)但是,如果应用程序被黑客攻击,那也可能是伪造的。
答案 0 :(得分:4)
有趣的问题。
一般来说,在本地存储数据的目的是在“离线”时可以访问它。
但是,我认为这里可能存在一些潜在的误解。据推测,你想要这样做的唯一原因是试图防止被盗设备放弃它的秘密。事实是,你不能。如果设备不再受物理控制,那么它就可以被黑客攻击只是一个时间问题。
如果我们谈论敏感数据,则不应将其存储在设备上。相反,设备应该在需要时从服务器检索所需的数据,并在不再需要时在本地删除它。
您希望设备仅在连接到本地网络时才能工作,这意味着您可以实现此目标。
作为旁注,这就是存在诸如“远程擦除”之类的原因。这也是为什么每次设备连接到您的网络时,都需要测试它的身份验证和授权。重点是,如果有人报告设备丢失或被盗,那么您需要能够从网络中禁用它,如果设备支持此设备,则远程禁用它。
请记住,完全可以从网络中拔出设备,从而禁止远程擦除执行。
如果不这样做,绝对没有办法确保设备在给定的网络上。所有这一切都可以伪造。设置给定名称的路由器并将其更改为伪装成任何东西,并为其分配某些IP地址,这是微不足道的。出于所有目的和目的,它可以看起来完全像您拥有的接入点......而这只是您可以在当地计算机商店购买的正常磨机无线路由器。
答案 1 :(得分:3)
您可以编写程序,以便解密数据的密钥存储在医院网络上的服务器上。如果您的程序从不存储密钥,则会使某些人在网络外部访问设备的数据变得更加困难(尽管并非不可能)。
克里斯指出,远程擦拭肯定是可取的。您可以输入逻辑,以便如果设备在未连接到网络时尝试读取数据,则会擦除数据(这可能会导致意外擦除)。黑名单也很好,因此如果设备尝试重新连接到网络,您可以基本上将其砖块化。有一件事情真的很糟糕,如果你有网络中断,你的所有设备都会被意外擦除。
答案 2 :(得分:1)
任何网络都可以复制另一个网络的SSID,因此不可靠。您可以开始使用SSID和已知路由器的MAC地址的组合,但可以复制MAC地址(尽管不在同一网络上),因此也不起作用。
坦率地说,除非有问题的无线网络使用证书来识别设备,否则你将无法做到这一点,即使这样,你也可以假设你的应用程序中有一种方法可以获得使用wifi网络的证书在网络身份验证期间返回。
答案 3 :(得分:1)
也许您可以使用IPSec隧道。许多路由器和防火墙都支持IPSec。我在想的是这样的:
-----------------------------------
/ IPSec tunnel \
+---------+ \
A | IPSec | B Untrusted \
trusted network -------| capable |------- Networks ----------- Your application
| router | Internet, etc.
+---------+
为受信任网络提供访问的网关路由器/防火墙在其自身与您的应用程序之间配置了IPSec隧道。在路由器和应用程序服务器上,隧道看起来像另一个网络接口。路由器上的路由将应用程序的流量定向到隧道接口。可以在路由器上使用过滤器,以确保仅当它到达接口A
(即可信网络)时才将流量转发到隧道。到达您的应用程序的接口B
上的流量只能被路由器上的过滤器丢弃,因为它显然是错误的。
如果您的应用程序将其侦听套接字绑定到隧道接口,您将知道您只接受通过隧道接收的连接。
您可以使用您想要的任何加密和身份验证机制组合来确保流量安全。大多数IPSec实现都支持您可能想要的任何内容。