我们可以认为基于网络的非插件加密钱包是安全的吗?

Could we consider non-plugins web-based crypto wallets as safe?

我知道有很多加密钱包可以在网络浏览器中使用 IFRAME 和类似技术,无需安装任何插件:

但是它们是否受到保护免受网络钓鱼 Dapp 攻击?如果 Dapp 想欺骗你并隐藏实际发送的 ETH 数量或任何其他方式,请在网络浏览器中修改钱包 UI?

Portis 在新 window 中显示登录页面,允许用户验证 URL。这不是万无一失的解决方案,而是解决此问题的好方法。

后续交易在 iframe 中签名,这可能是欺骗性的,但前提是用户登录到他们信任的应用程序。

免责声明:我是问题中列出的钱包之一 Authereum 的联合创始人。

回答你最初的问题,是的,许多基于网络的加密钱包是安全的。正如您提到的,一些钱包使用 iframe 来保护用户免受恶意应用程序的侵害。使用这种架构,用户的私钥永远不会以纯文本形式暴露给 dapp。


确实,恶意 dapp 可以尝试让用户签署恶意数据。基于网络的加密钱包可以采取其他措施。

如@tom-teman 所述,用户可以通过验证新 window 的 URL 来验证登录的合法性。

Authereum 有额外的保护措施来帮助保护用户安全。由于用户钱包的基于合约的架构,其中一些是可能的。以下是 Authereum 安全功能的非详尽列表:

  1. 切勿将私钥暴露给 dapp。
  2. 不要广播价值大于用户每日允许限额的交易。如果 dapp 尝试花费超过用户指定的金额,交易将失败。
  3. 为用户设置 dapp 特定限制(即每日交易价值限制、单个 dapp 的交易数量限制等)。
  4. 已举报或恶意行为的黑名单应用程序。
  5. 可选择要求每笔交易进行 2 因素身份验证。

注意:Authereum 是完全非托管和抗审查的。虽然上述功能是 Authereum 系统的一部分,但它们不是必需的,如果 Authereum 用户觉得自己受到审查,可以绕过它们。

您可以查看这些基于网络的加密钱包之间的一些区别 here

存储隔离

分机:

浏览器 extension-based 钱包,例如 MetaMask 使用隔离的本地存储,只有扩展程序可以访问,网站无法访问。扩展可以向网站推送数据,或者网站可以通过消息传递请求来请求数据。私钥存储在沙盒本地存储中,并且从网站向扩展程序发出请求以签署消息。扩展名 returns 到网站的签名消息。

Web-based:

Browser-based 加密钱包,例如 Authereum, Portis, Torus, and Fortmatic, use sandboxed local storage as well via an iframe. Unlike cookies, local storage is strictly restricted by domain, meaning that if a website sets a value in local storage, then only that website can read the value; so alice.com cannot read bob.com's local storage. To sandbox local storage sensitive values, they are set under a controlled subdomain, for example x.wallet.com, since no other website will be able to read the local storage. This subdomain contains no UI is meant for iframed communication only. The web3 provider's of those wallets load a hidden iframe on the website, which is used to communicate to the subdomain containing the sandboxed storage; so for example Alice on dapp.com using Authereum, the Authereum sdk connects to x.authereum.org using an iframe and send postMessage 从网站向 iframe 请求签署消息。这会限制网站读取私钥等敏感数据,并且只允许网站发送签名请求,类似于钱包扩展的工作方式。

并非所有 web-based 钱包都有沙盒本地存储,因此您应该避免使用它们,因为任何网站都可以读取存储的敏感数据,但此处提到的钱包在这方面是安全的。

防止网络钓鱼攻击

当用户被诱骗以为他们使用的是已知网站,但实际使用的是与合法网站相似的恶意网站时,就会发生网络钓鱼攻击。 Authereum、Portis 和 Torus 是基于用户名和密码的登录解决方案,因此它们在新的弹出窗口或重定向中打开登录身份验证 window。这允许用户验证网站域的合法性。 Google auth 也执行此模式。除了在登录时打开一个新的 window 供用户验证外,一些 web-based 钱包提供商还在签署消息和交易时打开一个新的 window 来验证请求。

点击劫持发生在通过网站上的 iframe 加载网站并且网站在 iframe 网站顶部覆盖不同的 UI 且 pointer-events 设置为 none 并且然后诱使用户输入信息或单击叠加 UI 上的按钮,但他们实际上是在 iframed 网站上单击按钮。这很危险,因为 iframed 网站上的操作可能类似于向攻击者钱包发送资金。

为了完全防止钱包网站加载到 iframe 中,钱包网站所要做的就是设置 HTTP header X-Frame-Options: DENY,这就是 Authereum 和 Portis 正在做的事情他们可以免受这些攻击。

信任内容脚本

使用源代码查看器插件验证浏览器扩展源代码很容易,但是为了避免来自 auto-updating 的扩展带有恶意代码,用户可以手动安装扩展以将其锁定到某个版本,方法是获取来自 github 的源代码(如果它是开源的)或来自下载源脚本的源代码。

由于使用 web-based 钱包,钱包网站所有者控制内容脚本,因此您必须相信管理敏感密钥数据的内容脚本不会是恶意的,因为钱包网站所有者或攻击者获得了访问钱包网站可以随时用错误代码更新网站源代码。

要信任内容脚本,钱包站点可以托管在 IPFS since the web address is the content hash meaning you can trust that it won't change. Authereum is one wallet that already offers this by visiting authereum.eth 上或通过解析其 ENS 名称的 contenthash 属性。

方便

Web-based 钱包是可移植的,因为你可以在任何 OS、浏览器、桌面或移动设备上使用同一个钱包,而使用浏览器扩展程序时,你会被困在使用扩展程序的环境中.扩展非常不方便,但提供了更多的存储隔离保证。但是,使用 contract-based 帐户,可以在钱包端提供更多安全功能。

Contract-based 个帐户

MetaMask、Portis、Torus 和 Fortmatic 都是 externally-owned 基于账户 (EOA) 的,这意味着资金由一个密钥存储和管理。如果攻击者获得了签名密钥的访问权限,那么他们也可以访问存储在该密钥中的资金。

Contract-based 账户(CBA),例如 Authereum,提供了更多的安全保障,因为每个账户合约可以有多个密钥来管理它,每个密钥也可能对它可以做什么的权限有限。

contract-based 个帐户的优势:

  • 资金未存储在单个密钥上
  • 您可以循环管理密钥
  • 帐户恢复,以防您的管理密钥被盗或丢失
  • 转账和取款限额
  • 键的访问控制,这意味着您可以限制键可以调用的方法