“萬物皆可NFT”是謊言還是真相?去中心化的表面下暗藏了哪些中心化問題?究竟是科技與藝術的碰撞交融,還是一隻披著羊皮的狼?本期文章,我們將會走進NFT的世界,探索去中心化表面下的中心化的真相。

作者:逢行( BlockSec Team)

原標題: 是技術創新還是披著羊皮的狼? NFT市場火爆背後的安全隱憂

2021年對於幣圈來講注定是一個值得被載入史冊的一年,後疫情時代各國政府為應對經濟衰退而出台的一系列宏觀調控政策使得數字經濟突飛猛進,在貨幣寬鬆政策下大量的資金湧入幣圈,從比特幣到以太坊到寵物幣,從DeFi到NFT到metaverse,一個個新的IP被點燃,市場熱情高漲,信心爆棚。區塊鏈的發展站上了嶄新的高度,群星薈萃之間,NFT當屬那顆最閃亮的星。科技賦能業務,技術賦能藝術。 Uniswap一雙襪子賣16萬美元,推特創始人五個單詞拍出250萬美元,加密藝術家Beeple在佳士得的NFT拍賣作品獲得975萬美元出價……一夜之間,NFT火爆全網。 NFT,這個脫胎於區塊鏈的技術,因其所具有的非同質化特點可以廣泛地應用在通證經濟之中,在新的歷史起點下,將推動知識產權保護,加速資產流通性,重塑資產數字化,重新構建數字藝術體系。 “萬物皆可NFT”的時代彷彿已經到來。

但是,新事物的產生和發展不是一帆風順的,而是前進性和曲折性的辯證統一。 NFT也是如此,從標準的確立到走向市場,是一個充滿矛盾的過程。 NFT背後的中心化安全問題一直沒有很好的解決方法:如何確定從鏈上token到鏈下資產的綁定關係,以及如何保證鏈下資產的不可篡改性等問題一直為人們所關注。在本文中,我們就來探討一下這些NFT背後的中心化安全問題。

閱讀建議:本文假設讀者已經對區塊鏈、以太坊、智能合約、token等概念有一定的了解,初次涉獵區塊鏈以及以太坊技術的讀者,可以先行訪問【https://ethereum.org】熟悉基本概念。

NFT是什麼

A non-fungible token (NFT) is a unit of data stored on a digital ledger, called a blockchain, that certifies a digital asset to be unique and therefore not interchangeable.NFTs can be used to represent items such as photos, videos, audio , and other types of digital files. Access to any copy of the original file, however, is not restricted to the buyer of the NFT. While copies of these digital items are available for anyone to obtain, NFTs are tracked on blockchains to provide the owner with a proof of ownership that is separate from copyright.

根據上述來自於維基百科的定義:NFT(非同質化代幣,non-fungible token)是一種被稱為區塊鏈(數位賬本)上的數據單位,每個代幣可以代表一個獨特的數碼資料。由於其不能互換,非同質化代幣可以代表數位文件,如畫作、聲音、影片、遊戲中的項目或其他形式的創意作品。同質化代幣,即FT(Fungible Token),互相可以替代、可接近無限拆分的token。例如,你手裡有一個比特幣與我手裡的一個比特幣,本質上沒有任何區別,這就是同質化,就是同質化幣。而非同質化代幣,即NFT,則是唯一的、不可拆分的token,如加密貓、token化的數字門票等。也就相當於帶有編號的人民幣,這個世界上不會有兩張編號一樣的人民幣,不會有兩隻一樣的貓,也不會有兩個完全一樣的NFT。

圖一、FT和NFT

關於NFT,簡單來說就是區塊鏈上資產所有權的通證化。以購買一件藝術品為例,當收藏家購買一件藝術品時,他們會簽署一份轉讓所有權的合同,然後收到一份真品證明,以證明他們擁有這件原作。 NFT就是以類似的方式運作,在區塊鏈中創建一個不可複制的數字令牌(因此是“非同質化”),並將自動跟踪底層文件的整個所有權歷史和銷售價格。任何NFT資產的潛在買家都將確切地看到它是在什麼時候創建,什麼時候被購買和出售,價格多少以及由誰創建。因此,不僅產生正式所有權的整個過程是去中心化的,所有的交易歷史也是透明的,這使估值過程變得更為順暢。並且從數字商品(如存在於虛擬世界中的物品)到物理資產的債權(如服裝或房地產)都可以用NFT表示。在未來幾年,我們將看到NFT在一些全新的應用場景中使用,而它們都只有在區塊鏈上才能實現。

從技術角度來說,NFT是一個通證(token)的概念,它規定了每一個token都有一個id,因此每個token都是獨一無二的,並且token 信息是保存在區塊鏈上的,因此可以保證其唯一性、公開性、不可篡改性、安全性。 NFT可以起'數字證書'的作用,每一個token對應一份特定資產。除此以外,每一個token還是不可分割的。 NFT在通證經濟中有著廣闊的應用前景,目前來講,NFT主要被應用於遊戲以及數字藝術品領域。以太坊ERC-721協議就是NFT的一種實現標準。

ERC-721標準:

 interface ERC721 {  event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);  event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); 
function balanceOf(address _owner) external view returns (uint256) ; function ownerOf(uint256 _tokenId) external view returns (address) ; function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable ; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable ; function transferFrom(address _from, address _to, uint256 _tokenId) external payable ; function approve(address _approved, uint256 _tokenId) external payable ; function setApprovalForAll(address _operator, bool _approved) external ; function getApproved(uint256 _tokenId) external view returns (address) ; function isApprovedForAll(address _owner, address _operator) external view returns (bool) ; }

可以看到,ERC-721協議規定了3種event和9種function用來實現token的轉移、授權等操作以及對操作的記錄。我們注意到,幾乎所有的函數中都有一個叫做_tokenId的參數,該參數即為NFT token中用於標識每個token唯一確定的“身份證”。

注意:每個token有且僅有一個id,這也是保證NTF每個token都不一樣的唯一憑證

不同種類的NFT有著不同的實現方式,從NFT與鏈下世界的信息交互類型可以將NFT分為綁定型NFT有綁定型NFT (如圖二所示):

注:這裡的”綁定“指的是鏈上的NFT token與鏈下資產的綁定關係。

圖二、NFT分類

首先是無綁定型NFT,如圖三所示,這一類NFT指的是token的所有信息只存在於鏈上,沒有其他的鏈下資產(信息)和鏈上的token所關聯,例如CryptoKitties ,該NFT是一個基於以太坊平台運行的、聚眾雲吸貓的遊戲。用戶在遊戲中可以養大、買賣並繁育“電子寵物”小貓,每隻小貓對應一個NTF token,因此每一隻貓都是獨一無二的。而且每一隻貓的所有信息都記載在合約中,因此不需要、也沒有鏈下額外的空間去記載貓的信息。

圖三、無綁定型NFT

最近火爆全網的Loot 也是以太坊鏈上的一個無綁定型NFT,Opensea上介紹Loot說:

Loot is randomized adventurer gear generated and stored on chain. Stats, images, and other functionality are intentionally omitted for others to interpret. Feel free to use Loot in any way you want.

也就是說,Loot NFT是隨機生成的冒險者裝備,並存儲在區塊鏈上。統計數字、圖像和其他功能被有意省略,供他人解釋。通俗一點,Loot 是一種黑色背景,只包含文本的鏈上NFT,任何人都可以參與鑄造,將會隨機獲得一組奇幻冒險家裝備,當然是以文本的形式,這些裝備具有隨機分佈的稀缺特徵。每個Loot都包含8 種裝備,因此有8行字,每一行代表著一種裝備。總體來說,Loot是一種僅包含文本信息的鏈上NFT,是的,它只是text文字!

如圖四所示,從Opensea上可以看到token ID 為2790的Loot NFT token的售價為9 ETH(約20萬人民幣)。

圖四、Loot NFT token 信息

其所代表的信息在etherscan上通過合約提供的以下接口可以查看到(查詢結果即為上圖的所示8個詞組)。

圖五、Loot合約接口

由於Loot NFT的所有信息都放在了以太坊鏈上的Loot合約裡,因此,Loot是一個無綁定型NFT,其所有的信息都放在鏈上。

其次是有綁定型NFT,這類NFT的特點是每一個token都和鏈下的某個資產(一幅畫,一首歌等)有著一一對應的關係,從某種角度來講,這種token可以視為鏈下資產的”證書“。因此這類NFT多用於藝術品的交易等工作。

如圖六所示,這一類的NFT和上面的NFT不同,這種NFT合約內部還存儲了和每一個token一一對應的一個外部鏈接,因此在這種NFT中,一個token的信息不僅僅保存在鏈上,還有一部分是保存在鏈下的,因此,對於這種NFT,合約中會保存token對應的外部URI信息

圖六、有綁定型NFT

如果合約中所記載的外部鏈接中沒有再額外指向其他地方的鏈接,即一個外部鏈接中包含全部描述對應token的信息,那麼這種token叫做單級綁定NFT ,如圖六所示。如果合約中所記載的外部鏈接中還有指向其他地方的外部鏈接,即多個外部鏈接嵌套循環,那麼對於這種token叫做多級綁定NFT 。如圖七所示。如果外部鏈接的嵌套層數是n,我們就叫n級綁定NFT,區塊鏈層處於第0級(level 0)。

圖七、多級綁定NFT

NFT的中心化安全問題

前文我們講過,得益於區塊鏈技術的去中心化和不可篡改等特性,NFT中每一個token的安全性是可以保證的,即合約中token本身的內容(鏈上數據)的唯一性,合法性,所屬權是不可篡改的。但是在有綁定型NFT合約中不僅僅保存了token本身的內容,如圖六所示的NFT合約,這種NFT合約中還保存了和token對應的外部URI的信息,外部URI指向的是token所對應的鏈下信息。而這種鏈上和鏈下交互的機制中就存在我們開頭所講的中心化安全問題

雖然合約內部的token id、external URI本身的內容是不可篡改的,但是URI所指向的外部頁面中的內容卻是可以修改的。如圖八所示,如果有人修改了外部鏈接中的內容,僅僅通過鏈上數據是無法檢測到的,在這種情況下,你的NFT資產隨時可能被別人掉包。也就是說對於上圖六、圖七所示的有綁定型NFT合約來講,是無法保證鏈上數據和鏈下資產的一致性的。這就是NFT中如何保證鏈下資產不可篡改性的中心化安全問題。

圖八、對有綁定型NFT的篡改

有綁定型NFT分為2種:弱綁定型NFT強綁定型NFT

  • 弱綁定型NFT即為上述所說:無法保證鏈上數據和鏈下資產一致性的NFT ,例如圖六、圖七所示的即為弱綁定型NFT。

  • 強綁定型NFT指的是可以保證鏈上數據和鏈下資產的一致性的NFT ,也就是說存在某種機制,使得token所對應的鏈下資產無法被篡改,或者對篡改操作可以溯源的NFT。顯然,強綁定型NFT更加安全、可靠,也更符合區塊鏈“去中心化”的設計理念。

為了更好地了解當前的NFT生態,我們選取了截止到9月11號為止以太坊上歷史交易量(Transfer Event)最多的10個符合ERC-721標準的NFT合約來進行分析(合約信息以及分析結果在本文最後的附錄中)。遺憾的是,目前大部分有綁定型NFT都是弱綁定的 10個NFT合約中,除了3個無綁定型NFT,其餘的7個有綁定型NFT中有6個都是弱綁定的。

案例分析:Art Blocks

Art Blocks在上述6個頭部弱綁定NFT中比較活躍且較具代表性,以下我們就以Art Blocks作為案例分析的目標NFT。

Art Blocks 是一個專注於策劃可編程生成藝術作品的平台。這些作品通常使用p5.js 進行編程,p5.js 是一個允許創造性編碼的JavaScript 庫,腳本存儲在鏈上。當鑄造新藝術品時,會使用腳本隨機生成一個獨特的“種子”,從而生成獨特的藝術品。據Opensea(Opensea是目前以太坊網絡上規模最大的NFT買賣市場)顯示:截止到9月16號為止,Art Blocks是七天之內成交量最大,歷史上成交總金額第二大的NFT。

圖九、Opensea平台上NFT 7天成交量排名

如圖十所示,從Opensea上可以看到token ID 為95000658的Art Blocks NFT token的競價高達398.5 ETH(約1千萬人民幣)。

圖十、天價Art Blocks NFT token

那麼這個token背後所代表的是什麼呢,我們在etherscan上通過合約接口去查看這個token的信息得到對應的URI為:https://api.artblocks.io/token/95000658。

圖十一、Art Blocks合約接口

如圖十二所示,這個外部鏈接的內容為一個json格式的文件,其定義了藝術品相關的信息,在這個json文件中,給出了指向圖片藝術品的URI(image字段)。我們注意到無論是鏈上保存的token URI 還是鏈下保存的image URI,這些URI都指向的是Art Blocks這個項目方私有的站點,並且沒有校驗機制。簡而言之,如果項目方私下更改URI內的內容,那麼用戶的NFT收藏品就會被掉包。顯而易見,作為一個多級弱綁定型NFT,Art Blocks是存在中心化安全隱患的。

圖十二、ArtBlocks NFT token的鏈下信息(level 1)

此外,我們之前也提到過在弱綁定的NFT中,如果有人獲得了你的token所對應的外部鏈接的控制權,那麼他就可以修改這個鏈接內的內容,從而可以在神不知鬼不覺的情況下掉包你的NFT token。雖然弱綁定的NFT從某些方面可以省去一些成本、提高開發效率等,但是這些是以犧牲NFT的安全性為前提的。

區塊鏈的初衷之一便是去中心化加上密碼學機制所帶來的安全性和不可篡改性。如果說我們拋棄了這些特性,那麼存在於區塊鏈之上的NFT又和傳統的證書方式有何異處呢?

可以做得更好

目前多數有綁定型的NFT都是弱綁定型NFT,無法有效地保證鏈上的token和鏈下的數據完全一致。而強綁定型NFT,採取了特殊的方法來保證token鏈上鍊下信息的一致性。強綁定型NFT主要有以下兩種實現方法:

  • 第一種是通過IPFS為代表的基於區塊鏈、分佈式網絡存儲實現強綁定機制的NFT:

    圖十三、IPFS強綁定型NFT

    這種方式通過將文件存放在不可篡改的區塊鍊或者分佈式網絡存儲系統上來保證鏈上信息和鏈下信息的一致性,例如IPFS或者是Arweave,由於其文件系統的技術特點可以保證文件一旦上傳便不可篡改,因此token信息的一致性不會被破壞。如圖十三所示即為使用IPFS的NFT:這種NFT合約中存儲了每個token對應的外部IPFS URI地址,由於IPFS文件系統是分佈式、點到點、且不可篡改的文件系統,文件一旦上傳到IPFS網絡中就不可再更改,因此每個token所對應的鏈下信息也是不可更改的。 RARI NFT就採取了這種方式。

    採用以IPFS為代表的基於區塊鏈、分佈式網絡存儲實現強綁定機制的NFT合約的優點是合約中只需要記載token 對應的URI信息,節省了鏈上存儲空間。缺點是區塊鍊或者分佈式網絡存儲系統使用起來比較麻煩,對於普通用戶不友好,使用成本較高。

  • 第二種是通過哈希指針實現強綁定機制的NFT:

    哈希指針,英文為“Hash Pointers”,就是一個指向數據存儲位置,以及該存儲位置裡面的數據的哈希值的指針。一個普通的指針可以告訴你數據存儲的位置,而哈希指針不但可以告訴你數據存儲的位置,還可以給你一種方式,讓你驗證數據沒有被篡改過。

    圖十四、哈希指針強綁定型NFT

    如圖十四所示,在使用哈希指針實現強綁定的NFT中,鏈上合約內部存儲了第一層外部鏈接的哈希指針,第一層外部鏈接內保存了第二層外部鏈接的哈希指針......每一級的存儲系統都保存了指向下一級的哈希指針,在這種機制下,如果某一層的內容被篡改了,那麼一定可以被追查到被篡改的地方。

    採用哈希指針方式的強綁定型NFT合約的優點是易於使用,外部文件的存儲不僅僅局限於區塊鍊或者分佈式網絡存儲系統,還可以使用http、https等萬維網協議。缺點是在每一級的存儲結構中都要存儲下一級鏈接的哈希指針,較為浪費空間,尤其在寸土寸金的區塊鏈上,多存一部分的內容的開銷不容小覷。

從安全角度來講,我們建議NFT合約的設計規範應符合以下條件之一

1. 採用非綁定式NFT,即全部數據都放在鏈上

2. 採用類似基於IPFS機制實現的的強綁定NFT

3. 採用基於哈希指針實現的強綁定NFT

總結

本文分析了以太坊上的交易量最多的10個NFT合約,這其中大多數合約都是弱綁定型NFT合約,弱綁定合約存在不容忽視的中心化安全問題,從某種程度上講,弱綁定型合約就像是一個披著區塊鏈外皮的中心化證書系統,而中心化的權力機構擁有對NTF的絕對控制權,在這種情況下,你口袋中的NFT不是屬於你自己的,只是別人暫時賦予你它的使用權限,而且隨時可收回,這在去中心化的世界中不可不謂是一種倒行逆施。

安全工作無小事,天堂地獄一念間。在去中心化的世界中技術應該幫助建立起一個公平公正的框架,而不是那種披著去中心化外皮的傳統中心化體系。目前,NFT的發展方興未艾,一系列的標準有待確立,舊的世界需要被打破,新的秩序急需建立。我們有理由相信,一個真正的去中心化的NFT世界終會到來。

附錄

本文所分析的10個以太坊上的NFT合約