mykeylab / MYKEY-APP

This repository for release MYKEY Mobile Application.
Apache License 2.0
16 stars 2 forks source link

恢复码和手机丢失/删除/损坏的情况下,恢复码可以恢复吗? #16

Open Himan000 opened 3 years ago

Himan000 commented 3 years ago

恢复码即助记词,根据HD算法,由助记词产生所有的秘钥。所以,恢复码才是真正的秘钥源头。1. 如果恢复码丢失,但是手机没丢失/删除/损坏,是可以替换恢复码的。因为手机还保存了恢复码生成的秘钥,也就可以将相应的资产/权限转到新恢复码生成的一堆秘钥下。2. 如果恢复码丢失,手机也丢失/删除/损坏,账号的资产/权限可以查询,但是不能更改。因为原来的一堆私钥恢复不回来了。除非,恢复码或恢复码生成的一堆秘钥在生成的时候就由交易密码加密保存到了云端,然后就用交易密码解密出恢复码或恢复码生成的一堆秘钥,当然前提是交易密码没有丢失。这种只是猜测mykey的实现,毕竟mykey app、ios端没有开源。不知道理解对不对?

期待MYKEY-APP开源。

chesterchen2010 commented 3 years ago

感谢你对MYKEY的关注。 首先,恢复码(即管理密钥)是最高权限,鼓励用户导出并离线保存的,一旦导出,手机里就不会再存储恢复码。 手机里存储的是一组操作密钥,而且是加密的。操作密钥并不是由恢复码生成的。只要有操作密钥就可以进行转账等操作。 第一种情况,恢复码丢失,手机还在。可以请求紧急联系人替换恢复码,等待30天后生效。 第二种情况,恢复码丢失,手机也丢失/删除/损坏。在新手机上,先请求紧急联系人替换恢复码,30天生效。然后再通过紧急联系人协助替换操作密钥,立即生效。 当然,如果恢复码丢失且没有紧急联系人,那么账户就永久丢失了。

Himan000 commented 3 years ago

@chesterchen2010 您好! 感谢您的回复。

  1. 操作密码是如何生成的,跟恢复码或交易密码有关吗? 2.手机里存储的是一组操作密钥是用什么加密的?是用交易密码对称加密吗?会备份一份在(安全的)云端吗?
  2. 我看过你们keyid-eth-contracts的所有合约,应该不会把恢复码、操作私钥存储到区块链里面,如果能找回恢复码、操作私钥,除非恢复码存储在了某个地方,比如安全的某个地方,如果是,这个恢复码、操作私钥是用什么哪个密码加密的?
  3. 通过学习你们写的合约,我没有发现紧急联系人在私钥方面的作用,比如找回。我的理解是,紧急联系人可以一起冻结、解冻一些公钥,但是对私钥的恢复没有什么作用。一个钱包,关键是如何找回私钥,只有找回私钥才叫真正找回。 换句话总结我的疑问:你们是如何保存恢复码(私钥),找回恢复码(私钥)的,能给一个清晰的流程吗? 谢谢!
chesterchen2010 commented 3 years ago

@Himan000 操作密钥的私钥是随机生成的,并且用交易密码加密存储在手机里。 合约里记录的是管理/操作密钥的公钥,用户的各项操作(比如转账等)都要用私钥签名,然后在合约里通过验签。 不存在私钥找回这件事情,只有替换,即把合约里记录的公钥替换掉。

Himan000 commented 3 years ago

@chesterchen2010 谢谢! 所以我的猜测如下: 1、 对于操作秘钥,因为您说"只要有操作密钥就可以进行转账等操作",而从你们开源的合约看,1: asset(transfer)转账的秘钥只有一个,因为秘钥是这么存储的mapping (address => mapping(uint256 => KeyItem)) keyData;。而对于每一种资产,比如每一种币,必定分别有一个对应的钱包(私钥)。所以我的猜测是:操作秘钥加密保存每个资产秘钥,而操作秘钥由交易密码加密保存。所以,真正的保密了资产的秘钥是交易密码。所以,要恢复资产,必须交易密码不能丢失。申明一下,我说的交易密码指的是app->我的->账户与安全->修改交易密码,这里面的交易密码。 2、 其它的的私钥,如管理秘钥、adding秘钥、reserved秘钥、assist秘钥...只要不涉及转账的,都可以不用太高的安全级别。 不知道理解对不对,尤其是第1点?

chesterchen2010 commented 3 years ago

@Himan000 交易密码丢失的情况,可以输入恢复码验明身份后修改交易密码。 管理密钥(恢复码)是最高权限,操作密钥有一组(包括asset,adding,reserved,assist)。 只有一把用于转账的asset key,不存在每种资产对应一把key。

Himan000 commented 3 years ago

@chesterchen2010 谢谢! 我的意思是,一个比特币账号,如何证明某个账号(公钥)下的比特币是我的,本质上就是因为我有私钥。mykey作为多链钱包,可以管理多种代币,对于比特币这种资产,有两种处理方式:1、我原本没有比特币钱包(私钥),myeky帮我生成一个钱包(私钥);2、我原本有一个比特币钱包(私钥),mykey可以导入(帮我保存)钱包(私钥),或者将我原本钱包的比特币转到mykey自己生成的比特币钱包(私钥)。无论哪种情况,mykey都需要保存比特币钱包(私钥)。这个钱包(私钥),要么提供功能给用户导出备份,要么通过恢复码/操作秘钥/交易密码加密保存。加密保存的,可以保存到手机,也可以保存到云服务器,这样是依然是用户自己控制的。 总之,总有一个地方保存比特币钱包(私钥)。否则,用户如何恢复自己的资产? ... 难道是用恢复码加密交易密码,交易密码加密操作密码(aseest key),而多种代币都对应同一个aseest key? 如果是这样,那恢复码是真正的私钥,问题是恢复码在遗失并且手机损坏/丢失/删除的情况下是如何恢复的?紧急联系人肯定不存恢复码?如果云端存储,理论上要加密存储,所以问题又是,用什么秘钥加密恢复码?

chesterchen2010 commented 3 years ago

@Himan000 比特币的情况比较特殊。由于比特币不支持智能合约,无法在比特币链上创建智能合约账户。 所以MYKEY的比特币账户采用了去中心化账户授权中心化托管的方案。可以看一下这篇公告:https://bihu.com/article/1305569698

Himan000 commented 3 years ago

@chesterchen2010 谢谢! 好的。我看看。

Himan000 commented 3 years ago

@chesterchen2010 看了https://bihu.com/article/1305569698,唯一觉得可能的是,私钥保存在HashKey里面。如果是,这个东西就复杂了。理论上HashKey就是中心化,只能相信它,因HashKey就像是银行一样。难道像ETH跟BTC不一样?如果是ETH,你们的私钥还是一样托管到HashKey吗?