首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2FA /智能契约认证

2FA /智能契约认证
EN

Ethereum用户
提问于 2019-03-07 20:11:39
回答 2查看 1.1K关注 0票数 1

我怎样才能产生类似于链上2FA的东西?私钥或公用钥匙能在某种程度上被秘密地用来计算一个值或什么的吗?我需要一种方法来验证一个聪明的合同用户调用者,这样其他人就不会假装拥有他的索赔。

EN

回答 2

Ethereum用户

发布于 2019-04-18 09:32:01

这真的取决于你要追求什么,以及你需要什么样的隐私、安全和权力下放。这也取决于你所说的"2FA“是什么意思。

不管怎么说,如果您需要反复检查用户的身份或其他什么的话,您实际上必须依赖两种不同的信息。在您的问题中,听起来您正在尝试从第一条信息(用户的键)中创建第二条信息。

在用户私钥受损的情况下,黑客拥有生成第二条信息所需的所有信息。所以,即使这是两条信息,实际上也只有一条。

如果要创建合同

,则为

  • 您无法真正控制用户用于与您的合同交互的钱包/帐户类型,除非您手动为用户设置钱包和白名单特定地址,一旦他们满足了特定的要求。
  • 您可以通过链上甲骨文调用离链源进行验证。这可以将外部信息与用户的链上地址/事务关联起来。但是,我相信用户需要先对链上的源进行身份验证,然后才是在线源,这感觉很奇怪,但可以通过UI/UX来解决。
  • 你也可以白名单地址,一旦他们完成X步。一个没有确认他们身份的地址不能通过你的智能合同发送。

更有趣的是,尽管..。

如果您正在创建一个钱包: TOTP

  • 通常,当人们引用2FA时,他们指的是TOTP (基于时间的一次性密码)。
  • 这依赖于“共享的秘密”。您有一个秘密,服务器有秘密、数学和时间以及算法,如果由secret + time + math匹配生成的数据的结果,您将被使用。
  • 这在区块链上是不可能的,因为没有地方可以把那些不公开的“共享秘密”放进去。而且,如果每个人都能接触到你的秘密,那就不是真正的秘密了。
  • 可能有一种集中的机制,在这种机制中,事务需要签署,然后由另一方批准。用户可以通过他们的设备生成事务,但是需要通过一个集中式的传统服务来批准它,这样它才能被完全签名并发送到网络。在这种情况下,将是private key on users device,然后是服务器上的username + password + traditional TOTP 2fa。这实际上是“三个因素”。

如果您正在创建一个钱包:没有共享秘密

  • U2F是另一种不依赖共享秘密的2FA,最常用于Yubikey和硬件钱包。下面是它的工作原理:
    • 你,用户,是唯一有秘密的人(私钥)。
    • 服务器生成一个挑战并将其发送给您。
    • 您的U2F设备在挑战上签名并将其发回。
    • 服务器验证它并允许您登录。

  • 同样,这是假设一个服务器,而不是一个智能契约。此外,这几乎正是当前的情况,无论何时您签署一个事务,以发送您的密码资产周围目前是。
    • 你决定你要寄到哪里,你想送多少。
    • 你以一种普遍同意的方式格式化它。
    • 你用你的私钥签名。
    • 您将其发送到所有服务器(也可以将其广播到网络,以给所有节点和矿工)。
    • 他们证实你确实签了字。
    • 事务已成功发送。

  • 但是,这不是“两个因素”,因为您没有将它与传统的登录结合起来--这只是一个因素:您的私钥。

如果您正在创建一个钱包:没有共享的秘密+需要

的多个信息片段

  • 最安全、最私有和最分散的选项将是多个The。
  • 在发送事务之前,Multisigs需要多个键来签署和批准事务。
  • 虽然我们经常认为多个用户是为控制或保护大量资金的多个不同的当事方服务的,但它也可以很容易地成为他们计算机上的用户和他们手机上的同一个用户。
  • 诺斯安全正试图为普通用户做到这一点。
  • 这是“两个因素”,即使它不是你手机上的代码,就像你想的那样。
票数 1
EN

Ethereum用户

发布于 2019-03-08 11:17:49

简单地说,也许不是。

即使使用诸如private之类的变量定义,块链中的所有信息也是公开的。

智能契约中的身份验证通常针对发件人的地址进行。因此,对某些函数的访问仅限于白色的发件人地址列表。这样,你当然需要事先知道地址。

理论上,用户可以使用他们的私钥来计算一些秘密值(除了他们的公共地址)。但是使用这样的值是毫无意义的,因为管理员无法知道秘密应该是什么,除非他们拥有相同的私钥(这是不-不)。

如果用户用自己的私钥创建了一个秘密,并将结果发送给管理人员,管理员将不得不将其添加到区块链中(类似于秘密的白名单),然后立即公开,其他人可以使用它。

一种选择可能是用户发送带有秘密的事务,智能契约将事务标记为内部挂起。然后管理员(或一些后端系统)检查秘密出块链,并发出一个“确定,允许这个交易”到合同。但是,再一次,这样的话,实际的验证就会脱离链,那又有什么意义呢?

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/68047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档