零知識證明是關於秘密見證的陳述,除了該陳述是真實的之外,用戶無需了解該見證的任何信息即可驗證該陳述
原文:Using ZK Proofs to Fight Disinformation
編譯:Kurt Pan
原用標題(譯後):使用零知識證明對抗虛假信息
封面: Photo by Micaela Parente on Unsplash
驗證數字圖像的拍攝時間地點變得越來越困難, 圖像出處在新聞媒體領域尤為重要。俄羅斯在 2 月入侵烏克蘭後,網上流傳的幾張照片和視頻 對沖突進行了錯誤的聲稱。一個例子是兩張照片的所謂的一一對比。第一張據稱是俄羅斯空襲後的敘利亞,第二張據稱是俄羅斯入侵後的烏克蘭。 《今日美國》後來的分析顯示,第一張照片實際上是 2017 年在伊拉克拍攝的,而第二張照片雖然確實是烏克蘭的,但拍攝於入侵前兩週。雖然這些事實核查服務是重要的,但如果個人能夠親自驗證照片的出處,他們將避免去依賴第三方,並使他們能夠保護自己免受此類假消息的侵害。
在一個理想的世界裡,照片會帶有地理位置和時間戳,以及這些信息是正確的證明。這樣的話,如果用戶在在線新聞文章中看到一張照片,他可以使用提供的證明來驗證照片的拍攝時間地點,而且無需信任文章的發布者或第三方事實核查網站。這種驗證可以通過諸如一個可以自動檢測和驗證這些證明的瀏覽器擴展之類的東西來進行。這篇博文的其餘部分討論了我們做出這樣的一個系統的嘗試。
內容出處和真實性聯盟 (C2PA) 提出了一個依賴於數字簽名的標準來驗證圖像出處。 相機會 “數字簽名”每張拍攝的照片以及一系列關於照片的斷言(例如位置、時間戳)。但是,照片並非會按原樣發布; 在發佈到新聞報導中之前,它們通常會被裁剪、調整大小,還可能轉換為灰度圖片。一旦進行了這些編輯,公眾就無法再驗證原始圖像上的簽名,因為只有編輯後的圖像會被發布。在 C2PA 標準中,當使用開啟 C2PA 的應用對簽名的照片編輯時,編輯應用將對發生的編輯進行簽名。公眾可以驗證這些簽名以驗證已發布照片的位置和時間戳。
這種 C2PA 方法的一個問題是它依賴於信任編輯軟件來對編輯操作簽名的正確性。如果敵手可以從編輯軟件中提取簽名密鑰,則他可以對其想要的任何圖像生成有效簽名,同時仍然遵循 C2PA 協議。這將使誠實的驗證者相信偽造的圖像是真實的照片,即使它並不是。同樣,即使沒有提取軟件的簽名密鑰,編輯軟件中的軟件漏洞也可能會讓敵手可以簽名他選擇的任何圖像。
因此,我們需要一種編輯簽名過的照片的方法,使得只擁有經過編輯的照片的人也可以確保 (i) 原始未編輯的照片已被正確簽名,並且是在所聲明的時間和地點拍攝的,以及 (ii) 僅對簽名過的照片進行了所允許的編輯,例如裁剪、調整大小和灰度。該方案的安全性不應要求信任編輯軟件。
為了證明編輯過照片的出處,我們使用簡潔零知識證明。零知識證明是關於秘密見證的陳述,除了該陳述是真實的之外,用戶無需了解該見證的任何信息即可驗證該陳述。這些證明是完備的,意思是驗證將以高概率在真實的陳述上成功;可靠的,意思是驗證將以高概率的錯誤的陳述上失敗;以及零知識的,意思是對原始圖像沒有任何信息洩露。這些性質意味著驗證者不需要信任證明者,從而解決了 C2PA 協議帶來的信任問題。
在上面描述的在線新聞系統中,我們將如下使用這些零知識證明。新聞文章中顯示的每張照片都將附有其元數據(例如位置和時間戳)、對原始照片所做編輯的描述以及一個簡潔零知識證明。該證明證明了以下陳述:
“證明者 (i) 知道一張由 C2PA 相機正確簽名的未經編輯的照片,(ii) 未經編輯的簽名照片上的元數據與附在公共照片上的元數據相同,以及 (iii) 新聞文章中的公開照片是對未經編輯的照片應用所聲稱的編輯的結果。”
僅當照片附有有效的零知識證明並且對原始照片進行的編輯列表是 “允許的” 時,查看者才會接受照片。” 允許的 “指不會從根本上改變照片內容的編輯(美聯社的這份清單 中包含了一些示例)。
我們強調,未經編輯的照片及其簽名是秘密見證的一部分,不向公眾提供。查看者只能看到編輯後的照片、其元數據和零知識證明。“零知識” 性質確保了原始照片保持保密; 這在原始照片包含需要裁剪掉的敏感內容的情況下是可取的。
2016 年,Naveh 和 Tromer 為各種照片編輯操作實現了零知識證明,包括裁剪、轉置、翻轉、旋轉和調整對比度/亮度。雖然這項工作證明了為圖像編輯生成零知識證明的可行性,但實現的證明時間太大因而無法實用。
幸運的是,過去六年取得的進步現在使我們能夠在可行的時間內為圖像編輯生成零知識證明了。為了展示這一點,我們實現了程序來生成用於裁剪、調整大小和灰度轉換的零知識證明,這些操作都包含在美聯社發布的允許編輯列表中。我們的實現是用 circom 編寫的,circom 是一種設計用於生成零知識證明的語言。每個 circom 程序都會生成一個零知識證明,用於驗證一組(可能是秘密的)輸入是否滿足一組約束。在我們的實現中,輸入是原始照片、新照片(例如在線新聞文章中顯示的照片)和與編輯操作相關的參數,並且約束斷言了新照片是通過對原始照片以給定參數執行編輯獲得的。我們將在下面討論用於生成證明的每個程序和及其運行時間。
裁剪證明生成程序非常簡單,並創建約束斷言了新照片與裁剪範圍內的原始照片具有相同 RGB 值。表 1 顯示了該程序的運行時間結果。
原始大小 (像素 x 像素 ) | 大小改變後大小 (像素 x 像素) | 證明生成時間 (秒) |
---|---|---|
100 x 100 | 36 x 67 | 3.05 |
100 x 100 | 75 x 75 | 2.97 |
100 x 100 | 100 x 100 | 2.88 |
200 x 200 | 100 x 100 | 3.20 |
200 x 200 | 200 x 200 | 3.19 |
300 x 300 | 150 x 150 | 4.95 |
300 x 300 | 300 x 300 | 4.75 |
400 x 400 | 200 x 200 | 6.9 |
400 x 400 | 400 x 400 | 7.23 |
500 x 500 | 250 x 250 | 9.81 |
600 x 600 | 300 x 300 | 13.32 |
600 x 600 | 600 x 600 | 13.31 |
調整大小證明生成程序,創建約束斷言可以通過雙線性調整從原始照片中獲得新照片,雙線性調整通過採用原始圖像中四個像素的 RGB 值的加權線性組合來計算調整大小後圖像中每個像素的 RGB 值。我們的 circom 程序實現了這篇博文中描述的大小調整邏輯,這與 tensorflow 的圖片大小調整操作是一致的。表 2 顯示了該程序的運行時間結果。
原始大小 (像素 x 像素 ) | 大小改變後大小 (像素 x 像素) | 證明生成時間 (秒) |
---|---|---|
100 x 100 | 36 x 67 | 3.42 |
100 x 100 | 75 x 75 | 3.75 |
100 x 100 | 100 x 100 | 3.71 |
200 x 200 | 100 x 100 | 5.27 |
200 x 200 | 200 x 200 | 8.12 |
300 x 300 | 150 x 150 | 9.25 |
我們的灰度證明生成程序 創建了一些約束,斷言新照片的 RGB 值可以通過將 Photoshop 使用的標準灰度計算 應用於原始照片的 RGB 值來獲得。此公式通過對 RGB 值進行加權線性組合來獲得一個像素的值:grayValue = 0.30R + 0.59G + 0.11B。為了適應該計算中涉及的浮點數,我們將我們的值縮放了 100 倍,並將餘數作為秘密見證的一部分傳遞給舍入計算。表 3 顯示了該程序的運行時間結果。
像素 | 證明生成時間 (秒) |
---|---|
40,000 | 5.63 |
80,000 | 8.92 |
160,000 | 17.88 |
320,000 | 37.05 |
我們在運行在 Microsoft Surface Book 筆記本電腦上的 Hyper-V Ubuntu 虛擬機上進行了實驗,最終在我們的時間測試實驗受到了筆記本電腦內存的限制。幸運的是,因為我們的時間呈像素的線性增長,所以我們可以估計出更大實驗的運行時間。例如,紐約時報上的照片一般都調整為 2048 x 1363 像素,我們可以估計對於這種尺寸的圖像,生成裁剪證明大約需要 103 秒,生成調整大小證明大約需要 287 秒,生成灰度證明大約需要 323 秒。使用更強大的機器會大大縮短這些時間。因為這些證明只需要生成一次,所以這樣的時間是適合實際實現的。驗證時間與圖像大小無關,只需不到幾百毫秒。
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。