匿名币的技术之争是非常有意思的,比如KMD核心开发者Duke Leto刚发表了一篇博客文章,披露了关于Zcash及其多数分叉币存在的漏洞,而这个漏洞可能会泄露使用屏蔽地址(zaddr)的全节点 IP地址。

其还为此分配了一个通用漏洞披露(CVE)编码CVE-2019-16930来跟踪这一问题。

(以下是其具体披露的内容)

太长不看:自Zcash和Zcash协议建立以来,所有屏蔽地址都存在着一个漏洞。它出现在所有Zcash源代码分叉中,这使得攻击者可利用它找到拥有屏蔽地址(zaddr)全节点的ip地址。换而言之,如果Alice给Bob一个屏蔽地址(zaddr)用于支付,实际上可允许Bob发现Alice的IP地址,这与Zcash协议的设计是违背的。

受影响的群体:

所有使用屏蔽地址(zaddr)以及与第三方共享屏蔽地址(zaddr)的人,例如:

  1. 如果你在社交媒体上公开发布了你的屏蔽地址(zaddr);
  2. 如果你在github/email/IRC的漏洞报告中给出了你的屏蔽地址(zaddr);
  3. 如果你曾把自己的屏蔽地址(zaddr)告诉了交易所、矿池或企业;
  4. 如果你曾在一份屏蔽备忘录中回复过你的屏蔽地址(zaddr);

不受漏洞影响的群体:

如果你从未使用过zaddr,那漏洞就不会影响到你:

  1. 如果你只是给其他使用zaddr的人发送过钱,但从未收到过资金,你是安全的;
  2. 如果你使用Tor/TAILS,则IP元数据泄漏对攻击者而言就不是有价值的信息。

受影响的加密货币(非详尽清单):

  1. Zcash (ZEC)
  2. Hush (HUSH)
  3. Pirate (ARRR)
  4. 所有带有zaddr的Komodo (KMD)智能链(默认启用)
  5. Horizen (ZEN)
  6. Zero (ZER)
  7. VoteCoin (VOT)
  8. Snowgem (XSG)
  9. BitcoinZ (BTCZ)
  10. LitecoinZ (LTZ)
  11. Zelcash (ZEL)
  12. Ycash (YEC)
  13. Arrow (ARW)
  14. Verus (VRSC)
  15. BitcoinPrivate (BTCP)
  16. ZClassic (ZCL)
  17. Anon (ANON)

需要澄清的是,虽然Bitcoin Gold (BTG)使用了Zcash提供的Equihash PoW共识机制,但它并不是Zcash源代码的分叉,其也没有使用屏蔽地址(zaddr),因此它是不受影响的。

额外的说明:KMD以前也有使用屏蔽地址(zaddr),但后来禁用了该功能,Safecoin (SAFE)走了一条类似的路线,其目前也禁用了屏蔽地址(zaddr)。

缓解措施

首先,防止这种“元数据泄漏攻击”的首要方法,是在使用你喜欢的加密货币的同时,通过-onlynet=onion使用Tor,或者更好的选择,是使用TAILS操作系统。

其次,用户可使用全新的zaddr创建一个全新的wallet.dat(钱包文件),然后将所有资金发送到该地址。如果用户将这个新的zaddr保持为私有状态,那它就不会受到此类攻击。

Zcash在这里发布了一个紧急源代码(没有二进制文件)。

如果你不希望知道你的zaddr地址的人知道你的IP地址,我建议你创建新的钱包,并在软件发布更新之前停止使用旧钱包。

到这里,普通用户或许可以停止阅读了。

更多的建议

如果你运行了一个支持屏蔽地址(zaddr)的矿池,则不需要提供所有矿工和屏蔽地址(zaddr)的公开列表。由于当前的元数据泄漏攻击和其他原因,这严重地消除了矿工们的隐私。这在过去是很常见的,但由于隐私问题,大多数矿池已经停止了这一做法。

也不要在github的错误报告中给出zaddr!很多工具不断地从所有公共代码存储库中抽取潜在的敏感数据和公开来源信息。

为了提高安全性,如果你必须要给出屏蔽地址(zaddr),你可以将它们隔离到一个单独的wallet.dat,该wallet.dat通常不使用且保持离线状态,而另一个带有屏蔽地址(zaddr)的钱包可用于发送资金。由于发送资金的钱包从未发出zaddr,因此这种类型的漏洞对于该节点而言是不可被利用的。

代码分析

这个漏洞是在最初的Zcash代码库中被引入的,相关提交时间是在2016年:

“介绍新的“libzcash”zcash协议API和围绕zkSNARK电路的加密结构。”

这一提交将漏洞代码添加到了较旧版本的屏蔽地址,而新版本的屏蔽地址代码都将其复制了进去。

该漏洞存在于Zcash的P2P层(从比特币继承而来)中,其中节点会与对等节点交换数据。

对攻击的解释:

  1. 攻击者节点将无效交易中继至其对等节点的mempool;
  2. 此交易对加密memo字段具有无效的序列化;
  3. 没有私钥且没有屏蔽地址查看密钥的节点,通常会对此无效交易做出反应;
  4. 具有私钥(或查看密钥)的节点将生成C++异常;
  5. 这个C++异常会导致不同的网络行为,从而暴露节点的“身份”;
  6. 区块链或浏览器上没有此类攻击的记录;

修正漏洞的代码在这里:https://github.com/zcash/zcash/commit/c1fbf8ab5d73cff5e1f45236995857c75ba4128d

核心修改如下:

-    CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
-    ss << pt.get(); -      SaplingNotePlaintext ret; -    ss >> ret;
+    try {
+        CDataStream ss(SER_NETWORK, PROTOCOL_VERSION);
+        ss << pt.get(); +        ss >> ret;
+        assert(ss.size() == 0);
+    } catch (const boost::thread_interrupted&) {
+        throw;
+    } catch (...) {
+        return boost::none;
+    }

下面这行代码没有try/catch是漏洞存在的核心原因:

ss << pt.get();

由于pt是由攻击者控制的数据,其正被写入本地CDataStream ss对象,因此需要更仔细的处理。

现在我们可以看到,只有boost::thread_interrupted类型的异常冒泡,所以其他异常都被“消灭”了,boost::none则会返回。这使得具有zaddr地址私钥的节点与所有其他节点一样,可以防止元数据泄露。

作者注意到,这里仍然存在寻找旧Sprout地址的易受攻击的代码。

有人可能认为这种攻击只能针对节点的对等节点,而不能针对整个网络,但增加最大对等节点计数是微不足道的,通过一个或几个节点来研究整个网络是可行的。

高级攻击者将拥有一个他们想要连接IP的zaddr数据库,然后运行密集连接至整个网络的节点,并定期向所有对等节点的mempool发送无效交易,从而建立(时间戳、Zaddr、IP地址)的三元组数据历史记录。然后,他们就可以使用这些数据,并通过数量分析和定时分析将其链接到其他数据,以完全取消屏蔽交易的匿名性,并将它们直接与IP地址和地理位置相绑定。

文/巴比特资讯 洒脱喜

dz email地址无效_Zcash屏蔽地址漏洞或揭示全节点IP地址(附解决方案)相关推荐

  1. 钱包一般链接那个节点_Zcash屏蔽地址漏洞或揭示全节点IP地址(附解决方案)...

    免责声明:本文旨在传递更多市场信息,不构成任何投资建议.文章仅代表作者观点,不代表火星财经官方立场. 小编:记得关注哦 投资区块链,猛戳:火星财经App下载 文章来源:巴比特 匿名币的技术之争是非常有 ...

  2. IP地址的分类及简介,一文搞定IP地址的相关知识

    前言 说到电脑的IP地址,相信不少人都会有这样的疑问:为何同样品牌的电脑它们的IP地址都各有不同,甚至没有一点类似?实际上,IP地址和许多电脑硬件一样,它也是有类型之分的,那么,IP地址究竟都有着怎样 ...

  3. 【全0、全1的地址干嘛用的】几类特殊的IP地址,网络号全0,主机号全1等

    127网段:回拨地址   网络号全0地址:当前子网中的主机   全1地址:本地子网的广播   主机号全1的地址:特定子网的广播   169.254.0.0:保留地址,用于DHCP失效(Win系统)   ...

  4. 管理口地址 ibm_WAN口有IP地址上不了网如何解决 WAN口有IP地址上不了网解决方法【详解】...

    设置好路由器WAN口PPPoE拨号后,WAN口状态已经显示获得到IP地址,如下图: WAN口有IP地址上不了网怎么办 但是终端设备连接路由器无法上网,请参考以下步骤排查.电脑需要设置为自动获得IP地址 ...

  5. 如何修改 Kubernetes 节点 IP 地址?

    如何修改 Kubernetes 节点 IP 地址? ✨博主介绍 前言 环境 操作 master 节点 node 节点 推荐操作 个人总结 ✨博主介绍

  6. linux主ip地址 网络信息不可用,win10 安装虚拟机提示 主IP地址显示网络信息不可用...

    问题:在虚拟机详情下面显示 主ip地址:网络信息不可用 解决办法: 先root用户[root@dfhf~]#cd .. [root@dfhf/]#cd /etc/sysconfig/network-s ...

  7. 史上最全的IP地址详解,速来get

    史上最全的IP地址详解 白在了解虚拟机网络之前,我们首先得了解ip地址是什么? 1.简单局域网的构成 局域网:一般称为内网 简单局域网的构成:交换机.网线.PC(其他IT终端) 交换机:用来组建内网的 ...

  8. hp服务器修改ip地址,如何使用命令行更改hp 500x打印服务器的ip地址

    如何使用命令行更改hp 500x打印服务器的ip地址 1 恢复出厂设置 2 web方式无法打开 3 telnet ip(打印服务器默认地址192.0.0.192) 4 Telnet 配置示例 下面的示 ...

  9. Tor 浏览器存在严重漏洞 或泄露用户真实 IP 地址

    网络安全公司 We Are Segment 研究人员 Filippo Cavallarin 近期在 FireFox 浏览器中发现一处关键漏洞 -- TorMoil,能够导致用户真实 IP 地址在线泄漏 ...

最新文章

  1. 以太坊区块链_以太坊区块链搭建与使用(一)-私有链
  2. 浅析网站页面设计需要注意哪些细节问题?
  3. 《JAVA与模式》之单例模式
  4. The most important part of the body
  5. vue cli 4 多环境_Vue 前端uni-app多环境配置部署服务器的问题
  6. 1336:【例3-1】找树根和孩子
  7. mysql5.7主从复制遇到的坑
  8. 疯传社群源码v7.8.0 测试可用 修复绿色版
  9. 2小时学会java_2小时学会springboot源码
  10. 1005 C语言控制输入1001-1004
  11. 背包问题九讲[转载]
  12. 如何写好一篇技术博客
  13. python平均值和加权平均值
  14. leedcode.203移除链表元素
  15. 吴军《格局》读书笔记
  16. 教师备课计算机教师管理制度,计算机学院教学过程管理中教师职责与问责暂行规定--中地大计字[2016]03号...
  17. unity 打砖块—休闲小游戏,摸鱼必备(完整代码)
  18. 清华镜像安装Python第三方库
  19. js 转json_2020年了为啥 还要学 Node.js
  20. Unity技能系统框架(一)技能效果

热门文章

  1. 【个人笔记】《知了堂》node.js简介及创建应用
  2. jstl中c:foreach下的表格实现异步刷新
  3. 最良心不过AMD AM4接口下一代可继续用
  4. utf-8编码引起js输出中文乱码的解决办法
  5. commons-logging中无法寻找log4j
  6. 局域网的分层结构的优点及分层原理
  7. 开源jeecms,jeebbs学习笔记4——从jo_user表看持久层设计
  8. 二分查找算法的C/C++实现
  9. 1337. 矩阵中战斗力最弱的 K 行
  10. 宝岛探险1(DFS)