以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

創宇區塊鏈:傳統安全與IPFS間的安全性研究_ADD

Author:

Time:1900/1/1 0:00:00

前言

通信技術讓世界具備了更多的連接,我們每個人都在這樣的連接中被影響和受益著。同時這種連接也產生了更多對于監視需求的便利。許多人的隱私或自由可能會在不經意間受到影響,而這也催生了對于隱私保護的需求。通常,由于中心化服務器的存在,我們很難實現完整的隱私保護,而分布式的存儲等技術,則讓其成為了可能。

無數的開發者加入了Web3的開發實現中,陸續構建一個又一個偉大的Dapp,他們在普通用戶與區塊鏈底層技術中扮演著重要的中間人角色。與此同時,對于普通人接觸的最多的web-ui與IPFS,它們之間的安全也值得被探索。

知道創宇區塊鏈安全實驗室將對此進行詳細解讀。

Web3.0中,分布式的公鏈技術設施提供了各種接口供給使用者調用,但這些接口無法直接被普通用戶直接去使用。對用戶來說,Web-interface是用戶和運行在Web服務器上的軟件之間的橋梁。用戶使用瀏覽器連接Web-interfacce后進行展示與交互,同時通過錢包進行身份識別。對底層區塊鏈基礎設施來說,Web-interface是公鏈/智能合約的一層封裝,將其包裝成為友好的頁面可直接可用的功能展示給用戶。其結構功能類似如下的圖片:

2.IPFS是什么

星際文件系統是分布式存儲和共享文件的網絡傳輸協議,它將現有的成功系統分布式哈希表、版本控制系統Git、BitTorrent、自認證文件系統與區塊鏈相結合。正是這些系統的綜合優勢,給IPFS帶來了以下顯著特性:

1.永久的、去中心化保存和共享文件

2.點對點超媒體:P2P保存各種各樣類型的數據

3.版本化:可追溯文件修改歷史

4.內容可尋址:通過文件內容生成獨立哈希值來標識文件,而不是通過文件保存位置來標識

CertiK完成對螞蟻集團可信執行環境HyperEnclave的先進形式化驗證:金色財經報道,CertiK宣布完成對螞蟻集團開放式跨平臺可信執行環境(TEE)HyperEnclave的先進形式化驗證。螞蟻集團的可信原生技術團隊開發了開放跨平臺軟件可信執行環境HyperEnclave,旨在提高螞蟻集團隱私保護計算工作負載的效率和兼容性。CertiK通過其獨有的先進形式化驗證技術,驗證了HyperEnclave核心組件的安全性和技術正確性。[2023/7/26 15:59:27]

當用戶將文件添加到IPFS時,該文件會被拆分為更小的塊,經過加密哈希處理并賦予內容標識符CID作為唯一指紋;當其他節點查找該文件時,節點會詢問對等節點誰存儲了該文件CID引用的內容,當查看、下載這份文件時,他們將緩存一份副本——同時成為該內容的另一個提供者,直到他們的緩存被清除。

IPFS使用實例

網站?https://ipfs.io?提供一個帶UI界面的客戶端,安裝運行后會啟動IPFS的服務,顯示當前的節點ID、網關和API地址:

我們導入想上傳的文件,上傳文件成功后會生成該文件的CID信息,通過QmHash我們也能查找到指定的文件:

由于IPFS是分布式存儲和共享文件的網絡傳輸協議,因此上傳成功的文件被拷貝到其他節點上后,即使我們本地節點主動刪除,依然可以在IPFS網絡查詢到該文件:

IPFS中的傳統安全問題

根據使用實例,我們知道IPFS允許上傳任意類型的文件,由于允許Web訪問下載文件的特性,導致攻擊者可以像傳統安全一樣使用HTML或SVG文件實現釣魚:

以?https://IPFS.io?網關為例,上傳一個Metamask釣魚網站,由于存儲在受信域名里,受害者訪問該文件很可能攻擊成功:

Avalanche宣布推出Glacier API測試版:金色財經報道,Avalanche宣布推出 Glacier API 測試版,Glacier API將提供來自 Avalanche 和以太坊的所有區塊鏈數據以及索引 Avalanche 子網的官方 API 服務。

Glacier API Beta 為開發人員提供了廣泛的有用數據,用于瀏覽器和錢包服務、令牌傳輸等。Glacier 最初是為 Avalanche Subnet Block Explorer 而創建的,它還為 Core Wallet 提供支持,為原生資產、ERC-20 代幣和 NFT 提供余額、轉賬和相關元數據。[2023/3/1 12:37:06]

但由于IPFS只能通過CID查詢文件,使得釣魚攻擊的利用面很窄,沒辦法定向的實施攻擊。既然CID是發起定向攻擊的關鍵,那我們回頭研究下CID。

IPLD是構建IPFS的數據層,它定義了默克爾鏈接、默克爾有向無環圖(Merkle-DAG)和默克爾路徑三種數據類型,通過IPLD發送到IPFS的數據保存在鏈上,使用者會收到一個CID來訪問該數據。

CID是一個由Version、Codec和Multihash三部分組成的字符串,目前分成V0和V1兩個版本。V0版采用Base58編碼生成CID,V1版包含表明內容的編號種類Codec、哈希算法MhType和哈希長度MhLength共同構成:

`CID::=`

我們以go-cid生成一組CID測試:

packagemain

import(

"fmt"

mc"github.com/multiformats/go-multicodec"

安永:意識到QuadrigaCX冷錢包中比特幣被轉移,仍未找到相關私鑰:12月21日消息,QuadrigaCX破產受托人安永會計師事務所周二發布聲明稱,已經“意識到”QuadrigaCX冷錢包里的比特幣(BTC)被轉移至其它地址。上周末,超過100枚與QuadrigaCX相關的比特幣從冷錢包中轉出,總價值約為170萬美元,其中許多資金已經流入不同的錢包。

安永證實并沒有發起這些交易。聲明中稱,安永公司以法院指定監管人和破產受托人的身份與管理層和其他人合作,以收回轉移至這些錢包中的比特幣。然而盡管進行了詳細調查,仍無法找到與冷錢包相關的私鑰。

作為Quadriga債權人律師的加拿大律師事務所Miller Thomson也在網站發表了類似聲明。安永于2019年2月初首次宣布,它“無意中”將比特幣發送至其無法訪問的Quadriga冷錢包,失去了對這些比特幣的控制。此后這些地址的比特幣一直處于凍結狀態,直到上周五,所有五個地址的比特幣在美國東部時間下午6點52分至7點14分之間流出。(CoinDesk)[2022/12/21 21:57:19]

mh"github.com/multiformats/go-multihash"

cid"github.com/ipfs/go-cid"

)

const(

File="./go.sum"

)

funcmain(){

pref:=cid.Prefix{

Version:?0,

Codec:??mc.Raw,

MhType:??mh.Base58,

Layer2隱私跨鏈協議Zecrey與YINFinance達成合作,將允許用戶進行跨鏈收益資產管理:6月22日消息,基于ZKRollup的Layer2隱私跨鏈協議Zecrey與去中心化流動性管理協議YIN Finance達成合作,將通過集成允許YIN Finance用戶實現BNB Chain、Polygon、Arbitrum等不同鏈上的收益資產管理,同時YIN Finance旗下DAO操作系統VolcanoX計劃利用Zecrey的私人支付解決方案來管理DAO系統的資產分配。

注:Zecrey是一個基于ZK Rollup的Layer2隱私跨鏈協議,可實現不同公鏈(以太坊、Near、Solana、BNBChain等)的數字資產的跨鏈聚合和管理。3月份,Zecrey完成400萬美元天使輪融資,Spartan Group與Shima Capital領投。[2022/6/22 1:24:00]

MhLength:-1,

}

c,err:=pref.Sum(byte("CIDTest"))

iferr!=nil{...}

fmt.Println("CID:",c)

}

可以看到在生成CID的過程中,無法實現結果的預測和更換,我們再往上分析上傳文件的部分。將文件上傳到IPFS,通過塊的方式保存到本地blockstore的過程位于/go-ipfs-master/core/commands/add.go:

typeAddEventstruct{

Name?string

Hash?string`json:",omitempty"`

DeFi平臺QUINT獲Galaxy Racer 2500萬美元投資:5月30日消息,DeFi平臺QUINT獲Galaxy Racer 2500萬美元投資。據悉,Galaxy Racer專注于電子競技、內容創作者、音樂和體育等領域,也是第一家向加密貨幣生態系統投入大量資金的電子競技組織。Galaxy Racer將把QUINT整合到其網站的支付系統中,并探索如何在電子競技比賽、活動和商品銷售部門中使用Token。(雅虎財經)[2022/5/30 3:50:42]

Bytesint64?`json:",omitempty"`

Size?string`json:",omitempty"`

}

const(

quietOptionName????="quiet"

quieterOptionName???="quieter"

silentOptionName???="silent"

progressOptionName??="progress"

trickleOptionName???="trickle"

wrapOptionName????="wrap-with-directory"

onlyHashOptionName??="only-hash"

chunkerOptionName???="chunker"

pinOptionName?????="pin"

rawLeavesOptionName??="raw-leaves"

noCopyOptionName???="nocopy"

fstoreCacheOptionName="fscache"

cidVersionOptionName?="cid-version"

hashOptionName????="hash"

inlineOptionName???="inline"

inlineLimitOptionName="inline-limit"

)

把上傳文件信息保存到AddEvent對象中,再通過/go-ipfs-master/core/coreunix/add.go里的addALLAndPin和fileAdder.AddFile方法遍歷文件路徑,讀取文件內容,將數據送入塊中:

func(adder*Adder)AddAllAndPin(ctxcontext.Context,filefiles.Node)(ipld.Node,error){

ctx,span:=tracing.Span(ctx,"CoreUnix.Adder","AddAllAndPin")

deferspan.End()

ifadder.Pin{//knownsec如果被鎖定

adder.unlocker=adder.gcLocker.PinLock(ctx)

}

deferfunc(){

ifadder.unlocker!=nil{

adder.unlocker.Unlock(ctx)

}

}()

iferr:=adder.addFileNode(ctx,"",file,true);err!=nil{

returnnil,err

}

mr,err:=adder.mfsRoot()

iferr!=nil{

returnnil,err

}

varrootmfs.FSNode

rootdir:=mr.GetDirectory()//knownsec獲取路徑

root=rootdir

err=root.Flush()

iferr!=nil{

returnnil,err

}

_,dir:=file.(files.Directory)

varnamestring

if!dir{

children,err:=rootdir.ListNames(adder.ctx)//knownsec展示當前路徑文件名

iferr!=nil{

returnnil,err

}

iflen(children)==0{

returnnil,fmt.Errorf("expectedatleastonechilddir,gotnone")

}

name=children

root,err=rootdir.Child(name)

iferr!=nil{

returnnil,err

}

}

err=mr.Close()

iferr!=nil{

returnnil,err

}

nd,err:=root.GetNode()

iferr!=nil{

returnnil,err

}

err=adder.outputDirs(name,root)

iferr!=nil{

returnnil,err

}

ifasyncDagService,ok:=adder.dagService.(syncer);ok{

err=asyncDagService.Sync()

iferr!=nil{

returnnil,err

}

}

if!adder.Pin{

returnnd,nil

}

returnnd,adder.PinRoot(ctx,nd)

}

最后再利用addFile函數完成文件的上傳:

func(adder*Adder)addFile(pathstring,filefiles.File)error{

varreaderio.Reader=file

ifadder.Progress{

rdr:=&progressReader{file:reader,path:path,out:adder.Out}//knonwsec按字節讀取文件

iffi,ok:=file.(files.FileInfo);ok{

reader=&progressReader2{rdr,fi}

}else{

reader=rdr

}

}

dagnode,err:=adder.add(reader)//knownsec添加上傳文件

iferr!=nil{

returnerr

}

returnadder.addNode(dagnode,path)

}

分析代碼發現,IPFS在打包文件上傳返回CID的整個過程,都沒實現劫持的可能,而成功上傳的文件無法實現修改其內容,同樣無法實現篡改:

后記

Web3建立在區塊鏈技術之上,無需中央機構即可維護。其允許用戶在互聯網上保護他們的數據,并允許網絡平臺的去中心化。而IPFS技術對他來說就如同一臺電腦的硬盤,web-ui就如同主機的顯示器一樣不可或缺,其間亦存在著復雜而多樣的安全風險可能給予不法分子可乘之機,理解其風險并避免發生問題是每一位Web3從業人員的責任與義務。

Tags:ADDNILAMENAMEDADDYDB幣UniLend FinanceSHIBAFAME價格NEO Name Credit

比特幣行情
KuCoin Will Support the Elrond (EGLD) Network Upgrade_OIN

DearKuCoinUsers,KuCoinwillsupporttheElrond(EGLD)network?upgrade.Thearrangementsareasfollows:1.The.

1900/1/1 0:00:00
以太坊合并后,Layer2何去何從?_以太坊

原文來源:CryptoSlate 原文編譯:黑米 在2022年度以太坊開發者峰會上,聯合創始人VitalikButerin表示,以太坊預計在8月份通過TheMerge升級將信標鏈與主網合并.

1900/1/1 0:00:00
一文縱覽StarkWare生態:StarkNet上超40個項目匯總_STA

撰文:Karen,本文最早發布于3月8日在擴容技術的不斷迭代和演化之外,StarkWare的生態發展也在不斷完善.

1900/1/1 0:00:00
數據:以太坊的交易量較去年下降了80%_以太坊

金色財經報道,根據IntoTheBlock數據,以太坊的交易量較去年下降了80%,是一年前的五分之一。以太坊和大多數智能合約平臺上的活動都因對NFT的興趣下降而受到影響.

1900/1/1 0:00:00
從《正義論》看Web3:我們應該打造一個什么樣的互聯網?_WEB

原文標題:《ATheoryofJusticeforWeb3》原文作者:LiJin&KatieParrott原文編譯:Kxp,律動BlockBeats所有認識我的人都知道.

1900/1/1 0:00:00
Announcement on the Completion of LUNA & UST Ticker Change_OBI

Dear?valued?users:HuobiGlobalhasalreadycompletedthemigrationandthetickerchangeofLUNAandUST.

1900/1/1 0:00:00
ads