可驗證輸出
一份能發現任何改動的對話副本。任何人都能確認它沒有被更動,而不必聽信我們的說法。
簡要說明
可驗證輸出是一個可以交給任何人的 .zip。其中每個檔案都有指紋,並由一家獨立機構為整個套件加上時間戳記,所以任何人都能證明它在您建立之後沒有被更動。這是關於檔案的聲明,而不是關於訊息的聲明:它顯示沒有任何東西被更動,而不說明對話代表什麼,也不說明該如何看待它。
什麼是可驗證輸出
可驗證輸出(也稱為認證輸出)把一個對話或整個封存打包成一個 .zip,用於需要讓您以外的人信任一份紀錄的情況。與截圖相比,它的意義在於能發現任何改動,而且可以獨立查核。收到它的人可以用標準工具確認這個套件沒有被更動,並且在某個特定時間以原樣存在。這其中的任何一步,您都不需要信任 Text2Store。
它包含在 Text2Store 的購買中。要建立一份,請開啟一個對話,選擇輸出,再選擇可驗證輸出(.zip)…。
從認證備份輸出會進一步強化這一點:輸出的證明會追溯到備份建立的時候,而不只是輸出的時候。這部分請參閱認證備份頁面。
套件裡有什麼
解壓縮 .zip 會得到一小組一看就懂的檔案:
- transcript.pdf:可閱讀、可列印的訊息紀錄。
- conversation.json:以資料形式保存的相同訊息,包括 PDF 無法呈現的內容。
- attachments/:對話中的每張照片、每段影片和每個檔案,保持原始位元組。
- certificate.pdf:一份可閱讀的封面,寫明裝置、對話、日期範圍、數量以及如何查核。
- manifest.json:核心所在,其他每個檔案的 SHA-256 指紋。
- VERIFY.txt:列出以淺顯英文說明的指令,方便您自己檢查一切。
- DECLARATION.txt:一份可供個人簽署的填寫式聲明(見下文)。
- manifest.json.tsr:可信時間戳記,在您連網時加入。
- tsa/cacert.pem:時間戳記機構的憑證,只憑這個套件就能查核時間。
- source/backup-timestamp.tsr:只有從認證備份輸出時才會出現,也就是備份本身建立時的時間戳記,沿用下來,讓輸出的證明追溯到備份建立的時候。
它能證明什麼
- 完整性。每個檔案都連同其 SHA-256 指紋列在 manifest.json 中。重新計算任何檔案的指紋,即可確認它與輸出時逐位元組相同。哪怕改動一張照片的一個像素,查核都會失敗。
- 來自您備份的來源。每個附件也記錄了它在來源裝置備份中的指紋,把輸出的檔案與那份特定的備份連結起來,而不是與手動輸入的內容連結。如果有任何附件不再吻合,輸出就會拒絕建立。
- 時間。連網時,整個套件會由一家獨立的時間戳記機構依照 RFC 3161 標準加上時間戳記(與程式碼簽署時間戳記的機制相同)。這證明套件在某個特定時刻以原樣存在,可以回應「你上週改過這個」的質疑。
為什麼改動無法矇混過關
「能發現任何改動」是一個精確的說法,以下說明它為什麼成立。它不是說檔案無法編輯。任何檔案都可以編輯。它是說任何編輯都會被發現。想讓改動騙過驗證工具的人,會接連撞上三道牆:
- 指紋無法偽造。每個檔案的 SHA-256 指紋是根據其確切位元組計算出的 64 個字元的值。在任何地方改動一個位元組,指紋就會完全改變。目前沒有已知方法能改動檔案又保持其 SHA-256 不變,所以被改動的檔案不可能再與記錄的指紋吻合。這是第一道牆。
- 列表本身也有指紋。下一個顯而易見的做法,是修改 manifest.json 中的指紋,使之與改動後的檔案吻合。這同樣會失敗:清單帶有一個針對自身列表的內容根指紋,而可信時間戳記是針對整份清單的。修改列表會同時破壞兩者。這是第二道牆。
- 時間戳記需要一把沒有人擁有的金鑰。最後一步是重建清單,並為改寫後的版本取得新的可信時間戳記。這需要時間戳記機構的簽署私密金鑰,而它由一家獨立的第三方(DigiCert)持有。沒有它,您、Text2Store 或攻擊者都無法產生有效的時間戳記。正因如此,只有在有有效的可信時間戳記時,Text2Store 的驗證才會回報已通過驗證:時間戳記是錨點,讓其下的一切都無法被改寫後再重新封存。沒有可信時間戳記的套件會被回報為未通過驗證,而不是已通過驗證,正是因為少了這個錨點。這是第三道牆。
- 您不必信任我們。所有這些檢查都使用開放標準(SHA-256、RFC 3161),並且可以用 Mac 和 Windows 內建的標準工具重現。安全性不依賴於相信 Text2Store 的說法,甚至不依賴於 Text2Store App 本身。
如實的界線值得說清楚:它讓改動能被發現,而不是讓改動無法發生。任何人仍然可以修改或刪除這個檔案。他們做不到的是,改動之後仍然通過查核。如果一個套件通過查核,它就是當初輸出的那個。如果它被動過,查核會如實顯示。
它不能證明什麼(請務必閱讀)
如實說明限制,本身就是讓其餘部分值得信任的一部分。可驗證輸出不能證明:
- 訊息的內容是真實的,或手機在備份前沒有被操弄。它證明的是套件自輸出以來沒有改變,而不是在那之前發生了什麼。
- 它會如何被接受。Text2Store 從不聲稱可驗證輸出會被任何特定收件人或程序接受,也從不稱其「可在法庭上採用」或「已認證」。一份紀錄有多少分量,始終由接收方決定;軟體只能讓紀錄變得可以查核。
- 完整無缺。可驗證輸出只能包含封存時手機上仍有的內容。在您擷取之前就被刪除的訊息根本不在其中。如果相關資訊保留到擷取時,紀錄會標示在裝置上被刪除、編輯或收回的訊息。
- 每則訊息確切的傳送時間(絕對意義上)。可信時間戳記證明的是輸出檔案存在的時間,而不是訊息傳送的時間。訊息的時間來自裝置。
用密碼保護(選用)
可驗證輸出是一個一般的 .zip:任何拿到檔案的人都能閱讀訊息。這通常正是您想要的,因為它不需要任何軟體就能在任何地方開啟。但如果檔案需要寄送,您可以替它上鎖。建立輸出時勾選用密碼保護此 .zip,內容就會以 AES-256 加密。它預設為關閉,每次輸出各自選擇。
加密和能發現改動是兩回事。密碼讓別人無法閱讀訊息。證明沒有任何東西被更動的,是指紋和時間戳記,兩者在兩種情況下的作用完全相同。加上密碼不會讓輸出更容易查核,不加也不會讓它更難查核。
設定密碼保護之前
- 密碼無法找回。您找不回,我們也找不回,因為它從不傳送給我們,也不保存在套件中。一旦遺失,輸出就再也打不開了。
- 在 Mac 上直接就能開啟。在 Finder 中按兩下,輸入密碼,所有內容就會解壓縮(已在 macOS 26 上測試)。在 Windows 上,您需要 7-Zip:檔案總管會顯示裡面的檔案列表,但無法解壓縮(已在 Windows 11 上測試)。Keka 和 The Unarchiver 在 Mac 上也能使用。
- 不要使用命令列
unzip。它不支援 AES:遇到受保護的輸出時,它會產生一個空資料夾並且沒有錯誤就結束,看起來像是成功了。請改用7z x,或在 Finder 中解壓縮。 - 電子郵件常常會拒收它。許多郵件服務和公司郵件過濾器會刪除或隔離受密碼保護的附件,因為它們的掃描程式無法查看內容。共用雲端硬碟、檔案傳輸連結或 USB 隨身碟比較可靠。
- 請另外傳送密碼。把密碼和檔案放在同一封郵件裡,等於什麼都沒保護。
裡面的一切都會加密,包括 VERIFY.txt,所以受保護的輸出在沒有密碼時什麼也不會洩漏。它無法隱藏一件事:zip 從不加密其檔案名稱列表,所以任何人都看得出這個套件裡有一份紀錄、一份清單和一些附件。這些名稱都是通用的,不會透露您在和誰交談或說了什麼。
要在 Text2Store 中驗證受保護的輸出,像平常一樣選取它即可;App 會發現它已上鎖並要求輸入密碼。要手動查核,請先用上述工具之一解壓縮,再依照下文的一般步驟操作。
如何查核,而不必信任我們
有兩種方法,它們檢查的是相同的指紋和相同的時間戳記。
在 App 中:選擇檔案,再選擇驗證輸出檔案…,然後選取 .zip。Text2Store 會重新檢查每個指紋和時間戳記,並回報已通過驗證、已被更動或未通過驗證。「已通過驗證」表示檔案吻合,而且可信時間戳記證明套件未被更動。「已被更動」表示有內容不再吻合。「未通過驗證」表示檔案內部一致,但套件沒有可信時間戳記,所以無法單憑自身證明未被更動(請將其清單指紋與您信任的副本比較)。它不需要連網,也不用安裝任何東西,在 Mac 和 Windows 上效果相同。為了保持獨立,它使用自己固定保存的時間戳記機構憑證副本,而不是套件裡的那份。
手動查核:隨附的 VERIFY.txt 列出了確切的指令。在 macOS 和 Linux 上使用 shasum;在 Windows 上使用 PowerShell 中的 Get-FileHash。若還要確認可信時間,請使用 openssl。VERIFY.txt 本身有一則如實的提醒:macOS 內建的 LibreSSL 無法驗證此時間戳記的憑證鏈,所以請安裝完整的 OpenSSL(Homebrew)或使用 App 內的驗證工具;在 Windows 上,Git for Windows 附帶的 OpenSSL 可以使用。VERIFY.txt 也會顯示時間戳記機構憑證的 SHA-256,方便您在依賴所證明的時間之前,與 DigiCert 在 cacerts.digicert.com 公布的根憑證比對。
技術細節
寫給想核對機制、而不是相信摘要的讀者:以下所有內容都使用公開標準(SHA-256、RFC 3161、CMS),並且可以用標準工具重現。沒有任何專有或保密的內容。這種開放正是重點:一個您可以獨立確認的說法,比一個只能憑信任接受的說法更有價值。
指紋與清單
套件中的每個檔案都依其確切位元組計算 SHA-256 雜湊值。manifest.json 列出每個檔案的路徑及其 SHA-256:
{
"format": "text2store/verified-export",
"artifacts": [
{ "path": "transcript.pdf", "sha256": "9f2c..." },
{ "path": "conversation.json", "sha256": "4a1e..." },
{ "path": "attachments/0001.jpg", "sha256": "b7d0...",
"source_backup_sha256": "b7d0..." }
],
"content_root_sha256": "e3b1..."
}
content_root_sha256 是整個列表的一個指紋,所以列表本身也能發現任何改動。計算方法是為每個項目產生一行 path:sha256,將這些行排序,用換行字元連接,再對結果計算 SHA-256。任何人都能根據清單重新計算並確認是否吻合。
把附件與裝置備份連結起來
每個附件也記錄了 source_backup_sha256,也就是該檔案在來源 iPhone 或 iPad 備份中的指紋。輸出是對照那份備份本身的總和檢查碼基準建立的,如果有任何附件不再吻合,就會拒絕建立,因此輸出的照片與那份特定的裝置備份連結在一起,而不是與手動放進去的東西連結。
哪些檔案不在指紋列表中
只有兩個檔案基於結構上的原因沒有列為項目:manifest.json 無法包含自己的指紋,而 manifest.json.tsr(時間戳記)是根據清單的指紋產生的,所以在清單封存之後才出現。其他所有內容,包括可閱讀的 certificate.pdf、VERIFY.txt、DECLARATION.txt 以及機構的 tsa/cacert.pem,都和其他檔案一樣計算雜湊值並記入清單。驗證工具會重新計算清單本身的 SHA-256,並把它當作套件的指紋。
可信時間戳記
manifest.json.tsr 是一個 RFC 3161 時間戳記權杖,一個 CMS SignedData 結構,其 messageImprint 是 manifest.json 的 SHA-256。要接受它,驗證工具需確認權杖的簽章有效、簽署者憑證可追溯到 DigiCert 的根憑證(權杖內嵌完整的簽署鏈,從終端憑證經中繼憑證到根憑證)、在所證明的時間處於有效期內、帶有關鍵的 id-kp-timeStamping 延伸金鑰用途(如 RFC 3161 所要求),而且印記與此清單的 SHA-256 相同。Text2Store 的 App 內驗證工具完全以程式碼完成這一切,不需連網,並且固定使用自己的 DigiCert 根憑證副本,而不是信任套件中的 cacert.pem,所以被替換的憑證騙不了它。VERIFY.txt 會顯示該憑證的 SHA-256,方便您與 DigiCert 在 cacerts.digicert.com 公布的根憑證比對。
親自精確地檢查
對任意檔案計算雜湊值,並與清單中它的 sha256 比較:
# macOS / Linux
shasum -a 256 transcript.pdf
# Windows (PowerShell)
Get-FileHash transcript.pdf -Algorithm SHA256
查核可信時間戳記涵蓋的正是這份清單,並可追溯到時間戳記機構:
openssl ts -verify -data manifest.json -in manifest.json.tsr -CAfile tsa/cacert.pem
套件中的 VERIFY.txt 詳細寫出了這些指令,包括如何重新計算內容根,複製貼上即可。
怎樣才算通過
只有在以下各項全部成立時,驗證工具才應回報已通過驗證:列出的每個檔案都存在並與其指紋吻合、內容根重新計算後一致、沒有多餘或重複的檔案,而且有一個可信時間戳記針對 manifest.json 驗證通過。沒有可信時間戳記的套件為未通過驗證,內部一致但沒有獨立的錨點,因為清單沒有那個外部簽章就無法證明自身的完整性。任何不吻合、多餘的檔案或無法驗證的時間戳記,都代表已被更動。
簽署的聲明
有些程序要求在紀錄之外附上一份人的證明:由一個人書面說明紀錄是如何製作的。軟體做不出這樣的聲明,只有人能做。所以套件中包含 DECLARATION.txt:一份簡單的填寫式範本,可由某個人(您,或紀錄保管人)修改,並填入其計算出的清單指紋來完成。
它只是一份範本,僅此而已。它不構成法律建議,如果您是在為正式程序準備資料,請先請律師審閱。
時間與時區
在可閱讀的 PDF 中,訊息時間以輸出電腦的當地時間顯示,並明確標出 UTC 時差(例如 2026-06-30 21:14 -08:00),時區寫在頁首,所以與您在手機上看到的一致,也不會產生歧義。機器可讀的資料(conversation.json)和可信時間戳記一律使用 UTC,所以專業人士隨時都能還原確切的時間。
如實說明的限制
可驗證輸出的完整程度取決於它背後的備份。Text2Store 只能包含您封存時手機上仍有的內容。最好的習慣很簡單:定期備份,這樣在您真正需要之前,對話早已妥善擷取。iOS 會讓已刪除的訊息在幾週內仍可復原,所以最近的備份常常能捕捉到比您預期更多的內容。更多資訊請參閱常見問題。
不構成法律建議
本頁以及可驗證輸出中的資料均為一般性資訊,不構成法律建議,使用 Text2Store 也不會建立任何專業關係。如果您打算在法律事務中使用輸出,這是您與您所在司法管轄區的合格律師之間的事;本頁內容都不是關於是否或如何這樣做的建議。
要匯入審查平台嗎?
可驗證輸出證明紀錄未被更動。如果您需要把對話交給電子證據開示審查團隊,讓他們匯入自己的平台,那就需要 RSMF 輸出(Relativity Short Message Format)。兩者分工不同,您可以兩份都提供:用可驗證輸出來證明,用 RSMF 檔案來匯入。
相關內容
用於電子證據開示審查的 RSMF、輸出成 PDF,以及備份中的 WhatsApp 聊天。
有問題嗎?
請寄電子郵件至 hello@text2store.com,我們會協助您。