首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新:是否可以通过“zk”或“防弹”隐藏事务的发送方或接收方?

更新:是否可以通过“zk”或“防弹”隐藏事务的发送方或接收方?
EN

Ethereum用户
提问于 2018-08-28 15:27:33
回答 2查看 2.3K关注 0票数 6

为了支持用户隐私,是否可以通过"zk-SNARK“或”公告“隐藏事务的发送方地址或接收方地址?或者我们只能隐藏映射到一个地址的值?

假设以下映射:

代码语言:javascript
复制
mapping (address => bytes32) userData;

通常,使用非交互式零知识证明(如"zk-SNARK“或”防弹“),我们能够将映射到地址(即userData)的值隐藏如下:

代码语言:javascript
复制
mapping (address => bytes32) userDataHash;

然后,通过零知识证明,我们可以证明,如果userDataHash满足一个条件?例如,证明一个加密的数字在给定的范围内,而不透露关于该数字的任何其他信息。

但是,假设不是Data,而是希望隐藏事务发送方(即address)。我们希望保持用户/发送者本人的机密性,而不是他们的数据。

有可能吗?如果是,怎么做?

有可能为此目的使用保密地址吗?

EN

回答 2

Ethereum用户

发布于 2019-01-05 23:51:11

大致上,与交易隐私有关的有三个方面。

  1. 隐藏事务->环签名的发送方。参见环签名方案是否可能在Ethereum实现?中的PoC。
  2. 隐藏事务->隐秘地址的接收方(如在Monero中使用)。见https://monero.stackexchange.com/questions/1500/what-is-a-stealth-address。我不知道PoC在以太。
  3. 隐藏事务->零知识证明的内容。参见什么是zkSNARK?它们是如何工作的?史塔克对防弹?(更新)是否存在分散的0(零知识简洁、非交互的知识参数)?

现在,有一点我不能百分之百肯定。has有屏蔽地址的概念,类似于来自monero的环签名/隐秘地址。从这篇博文https://medium.com/coinmonks/monero-vs-zcash-and-the-race-to-anonymity-4322b0a9bd90中可以看出,使用ZK(?)实现屏蔽地址是可能的:

Z现货支持可选功能,以实现包括发送方、接收方和金额在内的事务的隐私。以“t”(t-addrs)开头的Zcash地址被认为是透明的,类似于比特币交易。“屏蔽”事务与以“z”(z-addrs)开头的地址一起使用,这些事务被认为是完全匿名的。值得注意的是,截至2017年12月,只有4%的现金交易受到保护。对于z-addr,zk-SNARKs用于隐藏z-addr之间的输出.因此,从t-addr到z-addr的事务将显示ZEC离开hidden,但是输出将隐藏到z-addr。

更新:我只是偶然发现了这个。这是有可能实现隐私在所有三个方面(发送者,接收者,价值),只有ZK-咆哮。有关使用https://medium.com/@atvanguard/zkdai-private-dai-transactions-on-ethereum-using-zk-snarks-9e3ef4676e22库的示例,请参见ZoKrates。

票数 3
EN

Ethereum用户

发布于 2018-12-27 18:40:27

严格地说,不可能隐藏Ethereum事务的发送方。这是因为可以直接提取发件人的公钥,从而提取地址。一个有效的Ethereum事务包含vrs (以及其他字段),它构成ECDSA签名。

下面是从空灵-功用提取公钥的示例:

代码语言:javascript
复制
/**
 * ECDSA public key recovery from signature
 * @param {Buffer} msgHash
 * @param {Number} v
 * @param {Buffer} r
 * @param {Buffer} s
 * @return {Buffer} publicKey
 */
exports.ecrecover = function (msgHash, v, r, s) {
  const signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
  const recovery = v - 27
  if (recovery !== 0 && recovery !== 1) {
    throw new Error('Invalid signature v value')
  }
  const senderPubKey = secp256k1.recover(msgHash, signature, recovery)
  return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
}

一个有效的事务还包含一个to字段,它可以是接收者地址(在发送醚时),也可以是智能契约地址。当部署新合同(来自坚实的文档)时,它是空的:

如果未设置目标帐户(事务没有接收方或收件人设置为null),则事务将创建新合同。

这意味着,如果使用零知识证明创建自己的令牌契约,理论上可以隐藏接收方的地址。您可能会实现一个与Zcash类似的协议,但是人们将能够检索发件人的地址。根据您的要求,这可能是问题,也可能不是问题。作为一个边节点,有一个很好的概念验证式混合器,它使用zk。

我不熟悉元素机密地址,但是根据元素网站,他们使用自己的块链,可以选择地与另一个块链挂钩(它作为一个侧链部署;像Ethereum这样的块链被用作信任锚)。因此,它与以太没有直接关系。

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

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

复制
相关文章

相似问题

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