关于三星安全文件夹的一得之愚

本文最后更新于 2026年2月9日 下午

实现原理

2017 年三星发布 Galaxy S8 系列,同时在 OneUI 中引入安全文件夹(Secure Folder),旨在通过 Knox 硬件和附属机制加密存储文件。它在安卓 5.0 (Lollipop)中引入的工作资料(Work Profile)特性的基础上构建了一套三星自己的机制。这和其他安卓定制系统通过多用户(Multi-User / User Handle)实现的类分身系统有本质的不同。其他安卓定制系统中的分身系统有比三星安全文件夹更高的隔离性,这其实被很多人混淆了。

本质是容器,而非虚拟机

对一般虚拟机来说,使用的物理硬件必然和宿主机一致,对一般容器来说,使用的底层软件(如路由表、网络栈等)也许和宿主机一致。三星安全文件夹一直被很多人视为“虚拟机”、“分身”,实际上最恰当的描述是“容器”,你可以类比 Docker 的 Container。安全文件夹的文件系统在锁定状态下是处于加密卷未挂载的状态,解锁过程是调用 Knox 硬件秘钥进行解密并挂载文件系统。所以,三星安全文件夹的机制可能和你预想的不同,这里主要讨论它的行为逻辑,以便更好地处理一些兼容性问题。

表现

偶尔可以在设置中,看到文件夹内的应用,和一般的应用不同的是图标的左下角会有一个安全文件夹的角标,在某些权限管理的设置中也可以看到这些应用。特别是 OneUI 8 以来,三星更新了一个设置,你可以在外部程序的分享菜单中看到文件夹内部的程序,不需要再经过繁琐的转移过程(这非常像挂载 Volume)。

行为逻辑

既然是容器,它就会共享系统的内核(Kernel),不(完全)具有虚拟机的隔离属性。这里分两方面看:存储数据方面,受三星 Knox 机制的保护,加密存处于文件夹内,想要读取,一定要经过安全文件夹;网络数据方面,进入安全文件夹内的数据有类似路由器的防火墙和端口触发机制,如果这个数据不是内部要的,则无法进入。

至于传出文件夹的网络数据,文件夹内部没有网络的相关设置,甚至 DNS 设置都没有,数据并非在文件夹内部做完全部的软件处理,而是直接透传至宿主系统的网络协议栈,即“system”,此时一般的网络访问是没有任何问题的。所以如果你的用法,是在内部挂一个 VPN 来隔离以保证数据流安全,它并不能做到。

另外,如果只在外部运行了代理软件,此时安全文件夹内部应用传出的流量,除了不走代理的,其余经过代理软件的都不能正常的返回到内部。所以如果想让内部也走代理,必须在内部也开一个软件,在 OneUI 8 和 meta 内核的叠加下,同时开两个 meta 有底层路由策略冲突。

在安全文件夹内外同时开启 meta 内核的 Bug

复现方式

关闭 IPv6,防止 IPv4 不通系统自动回退到 v6;调整 tun: stack 为 system 或 mixed;打开安全文件夹内外的代理。你会发现先打开代理的那个环境网络不正常,表现就是某些软件不能(完全)加载完成,甚至干脆卡死。

原理

安卓虽然允许开启多个 VPNservices,但 system 栈依赖于 Android 系统的 tun 设备管理路由表,但在某些情况下,Work Profile 与主空间在路由表层面存在抢占或优先级覆盖。解决方法也很简单,把 tun: 调整为 gVisor 即可,gVisor 是谷歌开发的一套隔离实现方式,即使三星安全文件夹是容器,他也可以在内部做一个沙箱出来,在用户态有自己的网络栈和路由表,数据在交给硬件之前就已经封装好了,避开了系统路由表的冲突。因为在硬件之前的部分是独立于系统之外的实现,处理性能略有下降,但兼容性更高 。

尾巴

谷歌在 Android 15 引入了类似三星的实现方式,即 Private Space,所以这里说的逻辑具有很强的时效性,可能很快就会失效。


关于三星安全文件夹的一得之愚
https://seailor.com/posts/10a6cb3f/
作者
Seailor
发布于
2026年2月9日
许可协议