【问题标题】:developing custodial vs non-custodial wallets开发托管钱包与非托管钱包
【发布时间】:2021-12-28 14:58:22
【问题描述】:

这是一个非常广泛和普遍的问题,因此我将指定我的预期用例并分支几个问题,主要是指每种方法的实现。

简而言之,使用我的钱包的用户会不断地相互发送数据,并且可能会从/向其他钱包和网络接收/发送数据,我提到这一点是为了它可以提供交易将如何进行的概述放置在我的应用中。

所以从托管钱包开始:据我所知,大多数托管钱包对每个用户都有 1 个冷钱包和 1 个热钱包和一个热钱包,因此当用户创建帐户密钥时,会自动为该用户生成,但我的问题是用户的密钥是如何存储的:是在普通数据库中还是以其他方式存储,以及这种模型如何工作,就像他们在技术上如何使用冷钱包和热钱包一样。

转向非托管钱包,我想知道基本相同的事情,用户的密钥如何以及在哪里存储?以及如何访问它们?如果我采用这种方法,我仍然可以对我的应用程序上发生的 tx 收取 tx 费用?

我希望我所说的有道理,并且希望检查您的答案,如果有人愿意拨打不和谐/缩放电话,我将不胜感激。提前致谢,如果您需要更多信息来回答,请告诉我。

【问题讨论】:

    标签: blockchain ethereum web3


    【解决方案1】:

    托管钱包

    用户的密钥是如何存储的

    这取决于每个应用程序的实现。一个好的做法是将敏感数据(例如私钥)存储在机密管理系统中。它通常是具有高级访问控制的加密数据库 - 允许根据用户组策略访问数据组,生成用于访问数据的一次性或时间敏感令牌,......然后应用程序可以从 SMS 请求私钥使用用户的唯一令牌。

    非托管钱包

    用户的密钥如何以及在哪里存储?以及如何访问它们?

    软件钱包(包括浏览器扩展程序)通常将私钥存储在一个文件中,该文件位于您的计算机中,由主密钥加密。例如,主密钥可以是您的 MetaMask 密码的哈希值和一些预定义的盐值。当您输入正确的密码解锁钱包时,钱包软件会解密包含实际私钥的文件,然后就可以使用私钥了。

    硬件钱包将私钥存储在设备上,并由主密钥加密(例如您的设备 PIN 和盐)。私钥永远不会离开设备是一种常见的做法。所以 UI 软件通常会向设备发送一个对原始交易数据进行签名的请求,然后设备要求用户输入他们的密码,在实际设备上执行签名并将签名的交易返回给 UI 软件。

    【讨论】:

    • 感谢您的回答,我也想知道,如果我采用非托管方式,我是否能够遵循允许我注册用户并通过用户名/密码识别用户的特定方案?
    • @whitebat199 你可以让他们先在你的应用中注册,让他们输入他们的地址,然后让他们签署一个预定义的消息(使用与输入地址对应的私钥,存储在他们的非保管钱包)。然后,您的应用程序可以使用零知识证明算法验证消息是否从提供的地址签名。示例:on-chainoff-chain。这样,您就可以可证明地将地址连接到用户名。
    • 再次感谢 petr,请尽可能检查您的电子邮件,并在方便时回复。
    猜你喜欢
    • 2011-11-14
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多