IPFS/filecoin官方:加强公共DHT抵抗eclipse攻击

本文介绍了IPFS团队如何与研究人员合作,加强公共DHT以抵御Eclipse攻击。攻击者曾利用Sybil攻击控制DHT路由表,但通过改进DHT路由表管理、修复信誉系统漏洞和引入IP多样性要求,IPFS已显著提高攻击成本,增强了网络安全性。建议用户升级到go-ipfs 0.7以获取最新安全改进。
摘要由CSDN通过智能技术生成

随着网络规模的不断扩大,2020年IPFS的一个主要重点是改进内容路由。虽然我们对DHT上的请求速度进行了重大改进(https://blog.ipfs.io/2020-07-20-dht-deep-dive/),但我们的另一个关键重点是网络的安全性。在发布 go-ipfs 0.5 之前的工作中,A-SIT 和 Graz 科技大学的 Bernd Prünster 和 Alexander Marsalek 联系了我们,告知我们他们在针对 go-ipfs 0.4.23 的研究中发现的一种攻击,这种攻击可以让攻击者用最少的资源吃掉公共 DHT 上的任何节点。在过去3个小版本的go-ipfs(0.5、0.6和0.7)中,我们一直与Bernd和Alexander密切合作,这使得我们能够发布增量改进,减轻了他们的原始攻击,并将此类攻击的成本和难度提高了几个数量级。今天我们将深入研究该攻击和我们发布的各种缓解措施。如果你想阅读完整的论文,“全部的Eclipse病毒——扰乱“破坏IPFS系统”,你可以在TU Graz研究门户网站上找到它。

1.缓解攻击
Eclipse攻击指的是攻击者将对等体与网络其他部分隔离开来,使目标对等体只与攻击者控制的对等体通信的能力。这种攻击的目标是污染目标对等体的DHT路由表,使只有攻击者控制的对等体存在。在Bernd和Alexander发现的攻击中,他们利用libp2p和大量预先生成的Peer ID列表,创建了一个Sybil攻击,共计29TB的数据,以游戏libp2p中的信誉系统,从而接管路由表。
如果你对Sybil攻击(https://en.wikipedia.org/wiki/Sybil_attack)不熟悉的话,其原理是利用单个Peer的大量假名ID来颠覆信誉系统,以增加对网络的影响力。在这种攻击的背景下,假ID最终会在受影响对等体

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
分析下代码#include "dht11.h" #include "delay.h" //复位DHT11 void DHT11_Rst(void) { DHT11_IO_OUT(); //SET OUTPUT DHT11_DQ_OUT=0; //拉低DQ delay_ms(20); //拉低至少18ms DHT11_DQ_OUT=1; //DQ=1 delay_us(30); //主机拉高20~40us } //等待DHT11的回应 //返回1:未检测到DHT11的存在 //返回0:存在 u8 DHT11_Check(void) { u8 retry=0; DHT11_IO_IN();//SET INPUT while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us { retry++; delay_us(1); }; if(retry>=100)return 1; else retry=0; while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us { retry++; delay_us(1); }; if(retry>=100)return 1; return 0; } //从DHT11读取一个位 //返回值:1/0 u8 DHT11_Read_Bit(void) { u8 retry=0; while(DHT11_DQ_IN&&retry<100)//等待变为低电平 { retry++; delay_us(1); } retry=0; while(!DHT11_DQ_IN&&retry<100)//等待变高电平 { retry++; delay_us(1); } delay_us(40);//等待40us if(DHT11_DQ_IN)return 1; else return 0; } //从DHT11读取一个字节 //返回值:读到的数据 u8 DHT11_Read_Byte(void) { u8 i,dat; dat=0; for (i=0;i<8;i++) { dat<<=1; dat|=DHT11_Read_Bit(); } return dat; } //从DHT11读取一次数据 //temp:温度值(范围:0~50°) //humi:湿度值(范围:20%~90%) //返回值:0,正常;1,读取失败 u8 DHT11_Read_Data(u8 *temp,u8 *humi) { u8 buf[5]; u8 i; DHT11_Rst(); if(DHT11_Check()==0) { for(i=0;i<5;i++)//读取40位数据 { buf[i]=DHT11_Read_Byte(); } if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) { *humi=buf[0]; *temp=buf[2]; } }else return 1; return 0; } //初始化DHT11的IO口 DQ 同时检测DHT11的存在 //返回1:不存在 //返回0:存在 u8 DHT11_Init(void) { RCC->APB2ENR|=1<<3; //使能PORTB口时钟 GPIOB->CRH&=0XFFFFFF0F;//PORTB9 推挽输出 GPIOB->CRH|=0X00000030; DHT11_Rst(); return DHT11_Check(); }
06-07
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值