我的银行的 Android 应用程序允许用户在不使用物理令牌生成器(需要插入 ATM 卡并提供有效的 PIN)的情况下执行金融交易,这是使用银行 Web 界面时通常需要的。但是,仅当在带有硬件安全元件的手机上使用该应用程序时才支持此功能,它可以在其中存储加密密钥等。
最初,这对我来说似乎是一个不错的决定,因为没有安全元件的设备必须将密钥存储在内存或持久存储中,因此容易受到安装在同一设备上的恶意软件的攻击。
然而,仔细考虑这一点后,我得到的印象是,与仅通过软件保护密钥相比,使用安全元件实际上会使人容易受到这些攻击;比较这两种方法:
- 该系统依赖操作系统来限制对密钥的访问:其他应用程序在用户空间中无法访问它们,但是当攻击者设法获得对设备的 root 访问权限时,他们可以窃取密钥并签名或加密任何他们想要的,假装是银行应用程序。这允许他们伪造交易。
- 系统将密钥存储在 SE 上并依靠操作系统来限制对该硬件的访问:其他应用程序在用户空间中无法访问它们,但是当攻击者设法获得 root 访问权限时,他们可以指示它签署和加密任何他们想要,假装是银行应用程序。这允许他们伪造交易。
正因为如此,为此目的使用硬件芯片对我来说似乎毫无意义。对于依赖它来存储敏感材料的类似应用程序也是如此。
我在这里错过了什么吗?是否存在安全元素确实为该银行应用程序提供了明显的安全优势的情况,是否可以合理地强制执行?