前些天在 imToken Fans 社群里,有用户提出这样一个问题:
你们是否也有过这样的困惑呢?既然去中心化钱包不会保存用户钱包私钥和密码,那么这些信息又是从哪里导出的?难道是钱包服务商在「撒谎」?
哈哈,请不要慌张,去中心化钱包的确没有保存你的钱包信息,这些信息是通过权限审核后从手机中的数据库导出的,这个数据库有一个专业的术语叫「沙盒」。
什么是沙盒?
沙盒(Sandbox)是一种通过隔离从而减轻因系统故障或软件漏洞造成影响的安全机制,运用于测试未经验证的代码或不受信任的程序,因为在沙盒环境下进行测试,不会损害主机或者操作系统,并且沙盒会严格限制这些软件,通常不允许或提供非常有限的读取数据或网络访问权限。简单来说,沙盒是能保证信息安全的一种机制。
沙盒应用广泛,不仅运用于计算机安全领域,在我们生活中处处也有它的影子。比如监管沙盒(Regulatory Sandbox),政府在严控风险的前提下,鼓励金融科技等企业进行创新,去年 9 月全国第一个区块链监管沙盒在杭州成立。再比如沙盒游戏,比较典型的就是 Minecraft。
沙盒运作流程
我们以 iOS 系统为例,iOS 在设计之初就决定将每个 APP 的存储能力都限制在对应的沙盒中,APP 只能在系统为其创建的文件库中读取数据。在高版本的 iOS 中权限有所开放,当然这是在用户给予授权的前提下。
上图为苹果官方 APP 沙盒文档图片,经过审核的应用沙盒文件都有以上三个部分:Bundle、Data 和 iCloud。Bundle 为安装目录,安装完成后是不可以进行修改的;iCloud 即为可被云备份下的文档;应用的数据信息存放在 Data 这个目录下。
用户创建导入钱包和导出钱包信息两个操作步骤为例,当用户钱包密码设置和备份助记词步骤完成时,应用会自动将助记词通过用户设置好的密码进行加密(Encrypt),生成 Keystore 最后按照钱包的通用唯一识别码(UUID )写入对应的沙盒文件中。
下图是 MEW 用文字的形式来具体展示了创建钱包的流程,用密码加密完成后,同样也存入设备中的「Local secure vault」,也就是沙盒。
而当用户需要导出钱包信息时,需要输入当时设置的密码对加密文件进行解密(Decrypt),解密成功则执行后续对应操作,解密失败则会提示用户密码不正确。
沙盒的安全性
在正常情况下,沙盒是安全的。即使你手机上有安装一些来源不明的软件,也不会对你其他应用的数据安全造成影响。iOS 和 Android 都会采取相同的处理方式:给每个应用单独分配一个盒子,每个盒子之间是不允许互相访问的。恶意软件也是一个应用,在正常的系统环境下,是没有能力去入侵其他应用的沙盒。
但如果你的手机越狱或者 root 过,手机系统的底层相当于处于开放状态,应用可以通过向系统申请调用权限,一旦获得权限,就能任意访问手机里的所有数据信息,包括任意应用沙盒中存储的文件,使得沙盒的安全环境完全被破坏。
今年 9 月底苹果系统就爆出无法修复的一个漏洞,漏洞可以导致旧手机可以被越狱,如果用户因此而进行越狱是非常不安全的行为,可能因此造成文件资料或财产的丢失,imToken 也强烈建议存有代币资产的手机千万不要进行越狱或者 root 操作。
销毁和云备份的问题
可能用户又提问了:为什么不干脆直接出一个备份完助记词销毁的功能?这样也不怕手机被越狱或 root 了。
为什么不能销毁这些信息,这就要回到钱包最初的转账原理说起了。我们知道转账是需要输入密码进行验证最后通过私钥来签名授权的,如果你的手机里都没有这些信息了,那么你还能正常发起转账吗?这个过程和导出钱包信息类似,只不过一个使用钱包信息授权交易一个是进行钱包备份。
如果手机沙盒里没有存储钱包信息,那你的钱包将不能正常使用,无法发起转账操作。
一般这种情况出现在苹果手机 iCloud 云备份下来的 imToken APP 或者经过深度清理的安卓手机。以 iOS 为例,imToken 在产品设计时做了一个设置,将钱包信息排除在 iCloud Container 之外。由于 iCoud 经常遭受黑客的攻击,加上用户对于自己 iCould 账户安全保护做得不到位,为此导致的用户隐私泄露事件屡见不鲜。对于直接关系到用户财产安全的相关信息,更不应该同步在云端的服务器中。遇到上述这种情况,只需要将私钥或助记词等信息重新导入钱包就可以正常使用。
写在最后
photo by frankreddit5
手机系统中的沙盒确保我们在使用相关 APP 进行转账时信息不发生泄漏,关于数字钱包的安全,最重要的还是要回到钱包私钥的备份以及后续的保管方式中,说白了最终都回到「人」的问题上。如果我们不打破这个正常的系统环境,如果我们能够按照要求物理备份好钱包信息并将它保存在安全的地方,那么除了你自己,谁还可以触及到你的资产呢?
参考资料:
什么是沙盒:https://en.wikipedia.org/wiki/Sandbox_(computer_security)
Apple Sandbox 开发者文档:https://developer.apple.com/app-sandboxing/
Android Sandbox 开发者文档:https://source.android.com/security/app-sandbox
如何防止文件上传到 iCould:https://developer.apple.com/library/archive/qa/qa1719/_index.html