Magic 简介


作者:Joel Monegro @ placeholder

Magic 是一个 passwordless authentication 系统,其以 “magic links” 开始,在其中,你被 e-mailed 一个 login link,而非提供通常的用户名和密码。Magic 使开发者可在任何应用中快速轻松地实现此模型。但在背后,你将发现一个建立于安全硬件和 user-owned encryption 之上的健壮安全平台,为 Web 3.0 技术的更广泛采用,铺平道路。

Magic 的 security overview ,在描述其服务的安全保证方面,做得很好,但以下是一个简短摘要。通常,一个应用会在内部同时存储你的用户名和密码,并对你进行 authenticates 。这是一个巨大的安全漏洞,因为这意味着,任何侵入该应用服务器的人,都可能会侵入所有账户。通过存储你的用户名和密码,即使所有都在内部进行了加密,服务运营商也拥有对你所有数据的有效控制。Magic 还指出,“ 所有缺口中有 81% 在于密码,59% 的人在各处重用其密码 ”。因此,一项服务的故障通常会升级为其他缺口。

Magic 中的一个账户,实际上是 a unique cryptographic public/private key pair ,而不是通常的 credentials 。公钥就像用户名(可安全共享),私钥就像密码(必须安全保存)。这带来两个重要 features 。首先,a key pair 所有者可以这样一种方式数字签名任何数据——其他人可使用公钥验证其 authenticity ,因为只有私钥持有者可创建一个对应于该公钥的有效数字签名。其次,你可加密数据,只有私钥持有者可解密它。

使用 Magic authentication 的应用只能看到你的公钥,但永远不会看到你的私钥。当你注册后,Magic 会在你的设备上生成特定于该应用的 a unique key pair 。当你登录时,Magic 让你的设备使用相应 keys 创建一个 DID-compliant signature ,并将其 forwards 到该应用。如果签名与公钥匹配,你就可进入。无需密码。

重要的是,Magic 本身也无法查看或访问你的私钥。用户 keys 存储在专业 AWS 中心的专用硬件安全模块hardware security modules, HSM)中。每个账户都有一个专用的 HSM 实例,只有用户的设备可访问。Magic 的 SDK 管理你设备,你的 HSM 及应用服务器之间的客户端交易流,而不暴露你的私钥它们确实存储了私钥的加密副本以进行备份和恢复,但同样,只有用户的设备可解密它们。就像拥有你自己的云中硬件钱包。

Magic’s Delegated Key Management System

由于没有单一攻击点或控制点,因此此设置远远安全得多。应用拥有用户的数据,但没有用户的 keys 。Magic 具有账户和服务相关的一些 contextual 元数据,但没有用户的 raw keys 或数据。AWS 有 keys ,但没有用户的数据或 keys 用途相关的 context 。如果要损害一个账户,黑客将不得不同时入侵所有这些。

Magic 还为每个账户生成 unique key pairs ,因此,跨服务的用户身份是隔离开的。为了窃取信息,即使攻击者设法侵入应用,Magic 和 AWS,他们只能尝试蛮力一次破解一个账户,在他们这样做的同时,他们将不得不在所有那些对立环境内保持在线。因此,破坏单个账户,是足够难的,更不用说像通常那样进行大规模攻击。在安全性,隐私和信任标准上,其比传统 authentication 模型要高出得多,同时不牺牲用户体验。

对于 key-based authentication 胜过密码 ,任何开发者都不应感到惊讶。这些加密标准已经存在很长时间,且被频繁用于 state-of-the-art setups 中的幕后。但是,当涉及用户部署时,问题始终是用户体验和私钥的安全保存。加密 keys 是计算机生成的无法更改的长字符串,因此用户很难使用它们。如果私钥丢失或失窃,非常难以 recover ,通常不可能 recover 。

Magic 解决了这个问题。首先,它使用 email links 来平滑体验。通过附带在用户收件箱的现有安全性(它们已是可靠的)上,对于 onboarding 在 funnel 顶部,email links 非常适合。背景更为复杂:当你单击 link 后,Magic 会在触发签名之前执行各种安全 checks (如 IP 地址,device profile, etc 等)。随时间推移,他们将引导用户使用 YubiKey 等 second factors 来升级其设置。此外,开发者将很快能够使用 WebAuthn 及甚至一个 mobile app ,通过回应一个 notification ,而非点击一个链接,来补充或跳过 e-mail 来进行 authenticate,从而增加多层安全性。

通过 Magic ,用户和开发者都无需考虑或担心 keys 的管理。值得注意的是,Magic 建立在开放标准之上,可消除 lock-in 现象。用户始终可以导出其私钥,从而导出其身份及对其数据的控制权。开发者可用遵循相同标准,及保持相同功能的另一个系统替换 Magic's SDK 。换言之,这是一种可移植身份模型( portable identity model ),用户可留住对其数据的控制权,开发者控制其应用。

Magic 提供的 authentication 服务,对用户而言,更安全,对开发者和企业而言,则成本低得多。基于一个明确的经济价值主张,这是一个巨大胜利。但是,更有趣的是,基于 key 的 authentication 可如何帮助我们创建一个更具私密性,更去中心化的 Web加密使能数据隐私,签名使能数据验证。在这样一个环境中——每个用户账户都由 a key pair 进行表征,这两个 features 是默认启动的。开发者可使用这些 features 来创建更具私密性的可信服务。

Magic 通过使创建这样的应用变得更容易——不知道用户相关的任何,因为用户数据是加密的,不拥有对数据的托管权,因为应用没有 keys—— 将 principles of crypto service models 带向所有在线服务。应用可使用 Magic 加密你的数据,如此,只有你可读取数据,或可组合多个 keys ,如此,只有特定组可使用数据。除了创建更具隐私性和安全性的应用外,开发者还可获得重大的经济利益。这些零知识,非托管服务可通过消除持有用户数据所带来的责任,从而节省大量成本,这可以转变成,相对 web 应用(其拥有所有知识,所有控制权)的真正竞争优势。

签名同样重要,因为签名允许公众验证信息的可靠性。如果你知道我的公钥,我使用相应私钥签署某些数据(如 e-mail 或 file),你则可验证该签名的合法性,并确定该信息直接来自我,没有被篡改。通过 Magic,开发者可构建这样的服务——利用签名来认证信息。互联网上的每个内容(articles, tweets, comments, photos, emails, PDFs 等)都应附带数字签名,以验证其来源和可靠性。甚至用户交互(如投票和评论)也可进行签名。 unauthenticated 信息带来如此多的破坏,显而易见,数字签名是解决方案的关键部分。

基于 key 的 authentication,其加密和签名功能解决当今 Web 的两个最关键的结构性问题:私有数据的不安全性,以及未验证信息的快速传播。Magic 通过添加第三个 primitive 将其进一步发展: Transactions。 Magic 最初是 Fortmatic 。如今,数百个 dapp 使用它来保护 50,000 多个 wallets 。Magic 通过将以太坊wallet 附加到用户的 keys 上来将该功能纳入,因此,每个账户都可持有及交易 crypto ,以及与智能合约系统进行交互。Magic 很快将支持其他区块链,如比特币,Tezos 和 Flow。

与区块链协议的原生兼容性,为新型应用开辟了潜在功能世界。这使开发者可创建这样的应用——与不断增长的区块链加密货币,智能合约,金融协议,数字组织,一直到虚拟世界和数字商品生态系统原生集成的应用。Magic 生成的钱包并不是要成为用户的主要钱包,而是一个桥梁,使开发者可在实现中发挥创意。

例如,你可使用 Gnosis multi-sig contracts 来创建一个 multi-factor 身份方案,其中,一个 Magic 账户是签署方之一,或你可利用 Aragon DAO 合约来创建与数字组织进行交互的应用。你可集成 Erasure ,以创建一个数据市场到你的应用中,为用户创建定制以太坊代币,如 Reddit 所做。这是一个广阔开放的创新空间。

我们正走向这样一个世界,在其中,应用需要更安全,用户收回其数据控制权,没有人被锁定于与服务提供商的掠夺性关系。 Magic 通过将 keys 与应用分离,帮助开发者利用数字签名,加密和区块链交易,来使能这个世界。当创意公司将所有这些新功能结合在一起,创造新的商业模式机会时,真正魔力就会发生。我们迫不及待,想看到开发者使用这些新工具会构建出什么,很高兴与 Magic 团队一起完成他们的使命——创建一个更真实可信的 Web 。

原文:https://www.placeholder.vc/blog/2020/5/29/magic-authentication
作者:Joel Monegro @ placeholder
编译:东林