新聞加密貨幣我掃描了整個 Bitcoin 區塊鏈中的圖片。這是我的發現

我掃描了整個 Bitcoin 區塊鏈中的圖片。這是我的發現

作者: Bitcoin Magazine·

重點速覽

  • 作者在一顆 4-terabyte 硬碟上同步了完整的 Bitcoin Core 節點,整個過程約花了 72 小時。
  • PhotoRec 掃描了超過一個 terabyte 的區塊鏈資料,運行超過 11 小時,但沒有復原出任何有意義的圖片。
  • 掃描過程出現少量誤判,包括 8 個 ICO 檔案和 4 個無法顯示實際圖片的相同 PNG 檔案。
  • 文章指出,Bitcoin Core 會在磁碟上將區塊鏈資料與 UTXO 集合以 XOR 方式混淆。
  • 根據文章,普通 Bitcoin 節點使用者通常不會在其儲存的區塊鏈資料中找到可辨識的任意資料或圖片。
我掃描了整個 Bitcoin 區塊鏈中的圖片。這是我的發現

Bitcoin Magazine 我掃描了整個 Bitcoin 區塊鏈中的圖片。這是我的發現

我掃描了 Bitcoin 區塊鏈中的圖片,而結果出乎意料。網路上長期以來一直有人討論 Bitcoin 區塊鏈中可能存在的任意資料與內容。這種可能性不僅催生了一個小眾藝術圈,也引發了反對 Bitcoin 網路上「非貨幣交易」的運動。若只聽支持者或反對者的說法,你可能會把這條區塊鏈想像成一面佈滿塗鴉的牆。

因此,我決定直接驗證這個說法:區塊鏈上真的有圖片嗎?這對於只是想自行運行完整節點並最大化其金融主權的 Bitcoin 使用者,又意味著什麼?我的方法很簡單:先買一顆新的硬碟來存放區塊鏈,然後用傳統的圖片復原軟體掃描資料——這類工具通常用來從損壞的硬碟中救回圖片,並辨識原始圖片資料。

我選擇使用 PhotoRec 來進行圖片復原。這是一套開源的圖片復原程式,已經存在超過 20 年。這套軟體的設計目的,是在原始資料中尋找圖片檔案。它可以從故障或損毀的硬碟中復原圖片及其他檔案格式。它也經常被用來找回 Bitcoin 錢包早期時代遺失的 wallet.dat 檔案,那時 seed word 格式尚未普及。

同步完整 Bitcoin 節點

為了儲存完整的 Bitcoin 區塊鏈,我買了一顆 4-terabyte 的磁碟硬碟,花了幾百美元。我隨後在上面安裝最新版 Bitcoin Core,並開始同步鏈。這個過程包含下載並驗證 Bitcoin 歷史上所有交易的帳務完整性,由 Bitcoin Core 在背景自動執行,花了大約 72 小時,也就是三天。我是在一台原本性能不錯的遊戲主機上進行這項操作;時間上的主要瓶頸是硬碟,因為在同步 Bitcoin 區塊鏈時,它讀寫資料的速度很慢。

這個過程最慢的部分涉及未花費交易輸出集合,也就是 UTXO。當使用者同步區塊鏈時,每一筆未花費交易價值,也就是正餘額,都會被組織進 UTXO 集合;當這些價值被花費時,它們會從集合中移除,而接收 satoshi 的新地址則會被加入。

在硬碟上,根據一些估計,這個 UTXO 索引過程可能需要三週;因此為了加快速度,我的 clanker,也就是 AI agent,建議先在 RAM 中建立索引,之後再把資料移回 4-terabyte 硬碟。雖然整個過程在背景中執行了三天,但若使用 SSD,約莫一天就能完成。SSD 比硬碟快得多,但價格也高得多,通常至少貴四倍。

當區塊鏈完整下載並驗證後,我把 UTXO 索引從 RAM 移回硬碟,並啟動 Bitcoin 軟體;此時鏈已完全同步,錢包也已準備就緒。接下來就是下一步:復原存放在區塊鏈上的圖片。

使用 PhotoRec 從區塊鏈復原圖片

在硬碟上放入完整的 Bitcoin 區塊鏈後,我關閉 Bitcoin Core,並請我的 clanker,也就是 Cursor AI agent,在該硬碟上執行 PhotoRec 7.2。PhotoRec 的預設流程會搜尋 jpg、png、gif、tif、bmp、ico、psd 與 raw 格式。這個流程在區塊鏈資料上運行了超過 11 小時,最終找到了……(停頓一下)……沒有任何結果。

超過一個 terabyte 的區塊鏈資料、半天的掃描時間,結果沒有出現任何圖片。PhotoRec 的 wiki 頁面提供了一個簡單例子說明其運作方式:"PhotoRec identifies a JPEG file when a block begins with: 0xff, 0xd8, 0xff, 0xe0, 0xff, 0xd8, 0xff, 0xe1, or 0xff, 0xd8, 0xff, 0xfe." 換句話說,這個程式會在磁碟資料中尋找可表示存在圖片檔案的位元組。

不過,這個程式可能產生誤判;它儲存了 8 個 ICO 檔案和 4 個完全相同的 PNG 檔案,打開後都不會顯示任何圖片,如下圖所示。因此,實際上並沒有找到任何有意義的圖片。

JPEG 都去哪了?XOR 的魔術技巧

這怎麼可能?多年來,加密領域的人一直在討論 NFT,以及如何把圖片資料刻錄到 Bitcoin 區塊鏈上。這個小眾領域已經流動了數百萬美元,而且圍繞這個問題的文化戰爭至今仍在進行。區塊鏈上真的可能沒有圖片嗎?

事實上,任意資料所帶來的風險,早在 2011 年就已經在 Bitcoin Core 的開發圈內被討論並納入規劃。XOR 是一種簡單的資料混淆技術,用來在硬碟上靜置時將所有區塊鏈資料打亂。

你可能聽過,電腦的基本語言由 0 和 1 組成。簡單來說,XOR 會比較兩個數字或位元,若兩者不同則回傳 1,若相同則回傳 0。以 Bitcoin 為例,XOR 會把區塊鏈資料的每一個位元,與初始安裝時產生的隨機金鑰進行比較,讓靜置中的資料對其他程式而言毫無意義。不過,當 Bitcoin 軟體執行時,它擁有解開這些資料所需的金鑰,並可隨時使用。XOR 速度也非常快,因此不會對效能造成實質影響。這裡有一個 Bitcoin genesis block 在 XOR 前後的例子。

目前,XOR 同時套用於區塊鏈資料與 UTXO 集合。XOR 最初是在 2014 年被討論,當時防毒軟體開始把區塊鏈資料誤判成病毒程式碼。防毒軟體會隔離某個區塊,進而損壞區塊鏈資料並使 Bitcoin 當機,導致無法同步。到 2015 年底,XOR 已被實作在靜置中的 UTXO 集合資料上,而在 2024 年,它又被實作到所有靜置中的區塊鏈資料上。

順帶一提,XOR 的流程意味著,若不刻意繞過 XOR,就無法從區塊鏈中辨識或提取任何任意資料;而這一步對 Bitcoin 的貨幣用途並非必要。由於 Bitcoin Core 軟體會保存每個被混淆區塊位置的簡單資料庫,它可以輕鬆取得資料、解開混淆並針對性地使用。以未解混淆方式同步 Bitcoin 是一種自訂流程,所需時間可能與從頭同步一樣長,因為它基本上必須以新的順序重寫整整一個 terabyte 的資料;對於只是想享有運行 Bitcoin 節點所帶來的正常隱私與安全性的人來說,這樣做並沒有太大意義。

因此,對於世界各地普通 Bitcoin 使用者電腦上所存放的絕大多數 Bitcoin 區塊鏈資料副本而言,實際上沒有可被辨識的任意資料或圖片。很震撼,我知道。你也可以在自己的節點上跑一次 PhotoRec 測試!

這篇文章《我掃描了整個 Bitcoin 區塊鏈中的圖片。這是我的發現》最初發表於 Bitcoin Magazine,作者為 Juan Galt。