AI 資安工具 Hans SafeDoc:讓 Obsidian 文件安全上傳雲端
我在企業內訓裡最常收到的問題之一,就是把公司的資料上傳給 ChatGPT 整理,資安上到底安不安全?
這個問題一出現,現場通常會安靜幾秒,大家手上的文件可能有客戶名單、未公開合約、訪談內容或內部資料,只要按下送出,那份資料就已經離開自己的電腦與原本的控制範圍,接下來只剩服務提供者怎麼處理與保護它。
於是我開發了 Hans SafeDoc,一個在 Obsidian 電腦版執行的 AI 資安工具,專門在文件上傳前做去識別化,先用固定規則找出電話、Email 與識別碼等候選,再讓你逐項確認並建立安全副本。
人名與組織目前仍必須人工檢查,任何自動偵測都不能保證完整,我也會告訴你市面上還有哪四套工具可以選,以及我為什麼看完之後還是決定自己寫一個。

企業內訓現場最常被問的 AI 資安問題
你按下送出的那一秒,AI 資安風險就已經發生
接著通常有人問第二句:「那我把訓練資料的開關關掉可以嗎?」
可以,但那解決的是另一個問題。關掉開關處理的是對方會不會拿你的資料去訓練模型,處理不了資料已經離開你電腦這件事。檔案送出的那一刻它就在別人的伺服器上了,接下來會被記錄多久,誰有權限看,出事的時候你怎麼證明自己有做過保護,這些都不在你手上。
更麻煩的是,一份文件裡的身分線索通常不是單獨出現,而是拼出來的。
電話跟 Email 很好認,大家也都記得刪。但姓名、公司、專案代號、就醫紀錄、地址片段跟帳號常常散在不同段落,單看其中一項認不出是誰,湊在一起就可以還原到具體某個人。這也是為什麼我很怕聽到有人說他已經把名字刪掉了,刪掉名字只是刪掉最明顯的那一個線索而已。
資料完全不上網是最乾淨的 AI 資安解法,但幾乎沒人做得到
我在課堂上給企業的第一個建議一直都是同一個,能不上網就不要上網。用 Obsidian 在自己的電腦裡建一個本機知識庫,檔案就躺在硬碟上,要搜尋、要連結、要整理都在本地跑,這是最容易掌握資料邊界的做法。
問題是這個建議只能撐到某個時間點。
你手上有一份三萬字的深度訪談,本機模型跑不動,也整理不出你要的結構,你就是需要 Claude 或 ChatGPT 幫你讀完。這個需求不會因為資安顧問說不行就消失,它只會轉成大家私下偷偷上傳,那反而更危險。
所以現實裡只剩一條折衷的路,把文件裡能確認的敏感資料先換成安全代碼,建立新副本後再交給 AI。這件事叫做假名化,也是 Hans SafeDoc 現在專心處理的步驟。正式版目前尚未開放安全還原,不能用尋找取代自行把代碼換回個資。
動手寫之前,我先把市面上的去識別化工具都試過一輪
四套主流去識別化方案,我為什麼最後都沒有用
我不喜歡重造輪子,所以先花了一段時間看現成的東西。結論是這個領域其實很成熟,只是成熟的方向跟我要解的問題不一樣。
Presidio 是微軟開源的去識別化工具,把命名實體辨識、正則、規則跟檢查碼組合在一起,文字、結構化資料、圖片都能處理,功能是這幾套裡面最完整的。代價是你要自己部署,自己調 recognizer,自己把它接成一條工作流。Limina 走的是容器化路線,主打資料不離開你的環境,很適合接進企業內部的資料管線,前提是你有人會做容器部署跟系統整合。
另外兩套的方向完全不同。Adobe Acrobat Pro 的遮蔽功能很成熟,套用的時候還可以順手清掉隱藏資訊,但它只處理 PDF,而且流程整個靠人工拉框。Google Cloud Sensitive Data Protection 提供 API,偵測完可以遮蔽、刪除、代碼替換、雜湊、日期位移,大量資料的場景幾乎沒有對手,只是要用它,你的資料本身就得先送上雲。
看完一輪我發現一個共同點,這些工具的使用者是工程師跟資安團隊,不是那位在內訓現場舉手的主管。他要的東西很小,選一個檔案,看一下裡面有哪些東西該遮,按幾下,拿到一份可以安心貼給 AI 的副本,就這樣而已。
| 工具 | 主要工作場景 | 使用者要承擔的成本 |
|---|---|---|
| Hans SafeDoc | Obsidian 電腦版,交給 AI 之前逐項審核本機文件 | 格式範圍窄,一定要人工確認,只有電腦版 |
| Presidio | 開發者自建文字、圖片或資料處理服務 | 要部署,要調校 recognizer,要自己設計工作流 |
| Limina | 企業內部容器與資料管線 | 要有容器部署跟系統整合能力 |
| Adobe Acrobat Pro | 人工處理與遮蔽 PDF | 只有 PDF,流程仍然靠操作人員 |
| Google Cloud SDP | 雲端 API 與大量資料轉換 | 資料治理、權限、費用與雲端架構要另外管 |
去識別化沒有萬用正則,這是所有 AI 資安工具的共同難題
寫過一點程式的人第一個反應都是拿正則表達式去抓,我一開始也是。
抓兩天就會撞牆。June 可能是人名,也可能是六月。一串九位數字可能是證件號碼,也可能只是訂單編號。同樣一個字串在不同產業、不同國家、不同文件裡的意義完全不一樣,Limina 的官方說明也用類似的例子在講,PII 的判斷會受上下文、地區格式跟資料組合影響。Presidio 的文件裡更是直接寫明,自動偵測不能保證找到所有敏感資訊。
兩家做得比我久、比我專業的團隊都這樣講,我就沒有理由把產品包裝成按一下自動保證匿名。這個認知決定了 Hans SafeDoc 後面所有的設計。
Hans SafeDoc 怎麼開發的,我從一張決策清單開始
這個專案最早的檔案不是程式碼,是一份 Decision Register,白話講就是一張決策清單,把我不打算妥協的事情先寫死。原始資料唯讀、禁止自動接受、輸出不准覆寫、正式流程零遙測、遇到看不懂的格式要擋下來,這五條在寫任何介面之前就鎖好了。
理由很現實。資安產品如果一邊開發一邊為了方便放寬底線,最後剩下的就只有好用,安全會一路被磨掉。
去識別化的第一條規則,我不讓它動你的原始檔
資安工具最不該做的事,是在保護你之前先把你的檔案弄壞。
Hans SafeDoc 對來源檔案是唯讀的。你選好一份文件之後,它會讀取內容並建立一份快照,記下檔案大小、修改時間跟 SHA-256。如果你在審核到一半的時候去改了原始檔,前面的決定就會全部失效,必須重新掃描。這一步很煩,但它擋掉的是最糟的那種意外,用舊的位置資訊去改寫新的內容,改完你還不知道哪裡壞了。
輸出也不走一般軟體按儲存就覆蓋的習慣,它一定另外建一份安全副本,檔名不跟原檔撞在一起,你的正本永遠留在原地。就算流程中間出錯,也不會拿原始檔當代價。
不過另存新檔本身還不夠。多了一個檔案只能證明它存在,不能證明它是乾淨的。所以產出之後,程式會獨立把那份新檔重新打開一次,檢查安全代碼有沒有正確寫入,該遮的東西還有沒有殘留,結構有沒有超出允許範圍。重開失敗、找到殘留、或結構跑掉,這三種情況它都不會把檔案交給你。

AI 資安不能自動化,每一項都要你自己按下去
Hans SafeDoc 沒有一鍵全部接受,這是我刻意擋掉的。規則抓到的每一個疑似敏感項目,都要由你決定要換掉還是保留,就算你要批次處理,它也會先跳一份摘要出來讓你再確認一次。分數低的候選可以在介面上收起來,但不會從檢查裡消失。
這個設計看起來很不 AI,可是它比較貼近實際狀況。
同樣一個公司名稱,出現在已經發布的新聞稿裡你應該留著,出現在還沒公開的併購文件裡你就得拿掉。字串一模一樣,風險完全不同,差別在文件的用途,這件事模型分數判斷不了,只有你自己知道。
被你接受替換的內容會變成一組安全代碼,長得像 ⟦PB:…⟧ 這樣。同一份文件裡的同一個人會拿到同一組代碼,AI 讀的時候才知道前後講的是同一位受訪者,分析結果才有意義。信用卡號、密碼跟 API Key 這種東西則不允許做成可還原的代碼,只能直接遮掉、排除那個段落,或是整份停止輸出。
還有一點要講清楚,我把這個過程稱為假名化跟安全代碼化,沒有宣稱它完成了法律上的匿名化,這兩件事在個資的定義裡差很多。
AI 資安產品不一定要有 AI,我把本機模型整個拿掉了
一開始我當然想把 AI 塞進去。
本機的命名實體辨識模型,聽起來就是這種產品該有的東西,人名跟組織的偵測靠規則很難做好,交給模型是最直覺的解法,我也真的測了幾套。
結果兩邊都卡住。第三方的候選模型,授權跟來源鏈我查不清楚,不敢包進一個標榜資安的產品裡。自己訓的版本,precision 跟 recall 沒有過我自己設的門檻,講白話就是抓不夠準,也漏得太多。
那個當下有兩條路,一條是把門檻往下調一點,然後在產品頁寫上內建本機 AI 模型,另一條是整個拿掉。
我選了拿掉,正式版連模型下載、匯入、推論的入口都移除,ONNX runtime 跟模型權重也沒有打包進 Release。現在 Markdown、TXT、CSV、DOCX、XLSX 全部走固定規則,不需要 Ollama,不需要跑任何 LLM。
代價也要說清楚,人名、組織跟情境式的稱呼它會漏,你一定要自己看過一遍。這不是什麼技術上的勝利,說白一點就是我手上的證據不夠,不敢硬掰。
換來的好處是行為可以預期。規則跑出來的每一個候選,我都能告訴你它為什麼被抓出來,是台灣身分證字號的格式,是電話,是 Email,還是地址。可以解釋,就可以做穩定的回歸測試,對一個要交付安全承諾的工具來說,這比看起來聰明重要得多。
Word 和 Excel 的去識別化,看不懂的結構就直接停手
很多人以為 Word 檔就是一段文字,其實不是。DOCX 跟 XLSX 是一包壓縮檔,裡面有大量的 XML、關聯設定、媒體檔跟屬性,文字可能躺在本文裡,也可能躺在表格、頁首頁尾、註腳、隱藏工作表、共用字串、名稱定義或超連結裡。
只把畫面上看得到的字抓出來替換,會有兩種下場,一種是漏掉隱藏的內容,一種是把檔案結構弄壞。
我的處理方式是開白名單,只碰我確定能完整處理的部分。DOCX 支援通過檢查的文字、表格、頁首頁尾、註腳跟安全的圖片結構,XLSX 支援沒有公式、符合範圍的共用或內嵌文字、格式化的識別碼、隱藏工作表跟合併儲存格。圖片不做 OCR,要保留的話必須你自己確認過。
清單以外的東西一律擋下來。巨集、OLE 物件、外部內容、追蹤修訂、公式、註解、樞紐分析、沒看過的 XML 結構,遇到就停,不猜。
這裡有個很多人會誤會的地方,Word 或 Excel 能正常打開一個檔案,不代表這個檔案通過了安全驗證,這兩件事沒有關係。所以 Hans SafeDoc 產出之後還是要重開、掃殘留、驗結構,三關都過才算數。
結果就是有些文件它做不了。我寧可讓你罵它挑,也不要它交給你一份看起來乾淨、其實裡面還藏著客戶名字的檔案。如果你的 XLSX 有公式,可以先在 Excel 裡另存一份只有數值的版本,再拿回來處理。

Hans SafeDoc 的能力邊界,我想在你安裝之前先講完
127 項驗收不是準確率,去識別化沒有百分之百
README 目前列了 127 項驗收,涵蓋來源唯讀、格式拒絕、敏感內容偵測、人工審核、輸出殘留、Office 結構、網路行為跟 Release 資產。
這個數字代表我開發的時候拆出來的檢查項目數量,不代表準確率 127 分,也證明不了你手上的文件不會漏。測試能做的事只有一件,確保已知的情境沒有退步,它替代不了不同產業、不同語境、不同 Office 產生器的實際驗證。我很反對把測試數量包裝成企業資料準確率,那是拿數字當保證書。
發布狀態我也分開講。Hans SafeDoc 1.2.9 已經正式上架 Obsidian Community Plugins,可以直接在外掛市集搜尋安裝,官方的自動掃描完成了,而且成功從公開原始碼逐位元重建出一模一樣的 main.js,代表你下載到的程式跟 GitHub 上看得到的程式碼是同一份。自動掃描通過是自動掃描通過,跟人工審查是兩件事,我不會把其中一項擴大成所有外部審查都完成了。
安裝的時候你會看到一個 Direct Filesystem Access 的權限警告,那是功能需要。它必須讀取你指定的、Vault 以外的檔案,並且在 Vault 外面建立安全副本,才能同時做到不覆寫來源,也不把還沒處理過的文件複製進你的知識庫。這個權限跟上傳無關,處理全程留在你的電腦。
哪些人適合用 Hans SafeDoc 做去識別化,哪些人不用浪費時間
適合的情況很具體,你已經在用 Obsidian 電腦版,偶爾要把 Markdown、TXT、CSV、DOCX 或沒有公式的 XLSX 交給外部 AI,又希望掃描跟判斷的過程留在自己電腦裡。顧問、研究者、內容工作者跟小型團隊大概是最典型的樣子,你不用自建資料管線,就多一道人工確認跟安全副本的程序。
它也適合很在意原檔不能被動到的人,你可以先拿一份假資料跑完整個流程,熟悉之後再處理真的檔案,第一次操作不用賭在正式文件上。
不適合的情況我列得更清楚一點,需要手機版、要直接處理 PDF、要對掃描圖片做 OCR、檔案是舊版的 doc 或 xls、Excel 裡有公式或複雜物件、Office 檔帶巨集,這幾種現在都不要裝。PDF 建議先用本機的確定性工具逐頁轉成 Markdown,確認沒有漏頁也沒有整頁掃描圖之後再進來,或者直接用 Adobe Acrobat Pro 的遮蔽功能,那本來就是它的主場。
如果你要每天處理幾十萬筆資料,要串資料庫或企業 ETL,那 Presidio、Limina、Google Cloud 這類可程式化的方案才是對的選擇,不要為了一個外掛把管線重做。文件牽涉法律、醫療、金融或高度敏感的決策時,它也不能拿來當法遵認證或專業資安審查的替代品。

最後的總結:AI 資安做的是決定權,不是保證書
我做 Hans SafeDoc,不是要跟你保證從今天開始任何文件都可以放心丟給 AI。我想解決的只有一步,在資料離開你的電腦以前,先停下來看見裡面有什麼,自己做決定,原檔留在原地,最後只交出一份通過檢查的副本。
回頭看這個產品,最重要的選擇其實都是它拒絕做的事。不覆寫來源,不自動接受,不把品質不夠的模型硬塞進正式版當賣點,不碰看不懂的 Office 結構,也不把自動掃描通過講成所有外部審查都完成了。去識別化這件事沒有一鍵完成的版本,任何自動偵測都會漏,這也是為什麼我把人工確認寫死在流程裡拿不掉。
Hans SafeDoc 1.2.9 現在可以從 Obsidian Community Plugins 直接搜尋安裝,原始碼在 GitHub 上公開,如果你要試,先看限制那一段,用假資料跑完一次完整流程,再處理自己的東西。
這個外掛還在持續改,我也很清楚它現在的格式支援範圍偏窄。如果你有用過更好的去識別化工具,或者你在企業裡遇過我沒想到的 AI 資安情境,歡迎直接留言告訴我,或寫信給我。你踩過的坑,會變成下一個版本擋下來的東西。
https://community.obsidian.md/plugins/hans-safedoc

推薦閱讀
Obsidian 是什麼?一篇搞懂這款筆記軟體為什麼讓工程師和研究者都瘋狂
Anthropic 洩漏 Claude Code 原始碼的 3 個警訊,如何看 AI 資安風險
Hermes Agent 是什麼?2026 教學、費用、本地模型硬體需求與 Ollama 指南
參考資料
GitHub (2026). “Hans SafeDoc repository”
GitHub (2026). “Hans SafeDoc 1.2.9 Release”
Obsidian (2026). “Community Plugins:Hans SafeDoc”
Microsoft Presidio (2026). “Data Protection and De-identification SDK”
Limina (2026). “Introduction to Limina”
Adobe (2026). “Redact sensitive content in PDFs”
Google Cloud (2026). “將機密資料去識別化”
常見問題 FAQ
檔案都放在本機,又關掉訓練開關,還需要做 AI 資安防護嗎?
需要,這兩件事都擋不住資料離開你的電腦。訓練開關處理的是對方會不會拿你的資料去訓練模型,處理不了資料已經送出去這件事。檔案放在 Obsidian 或 AnyType 也一樣,只要 Codex、Claude 或 API 把內容送到雲端模型,資料就已經離開電腦,接下來會被記錄多久,誰有權限看,出事的時候你怎麼證明自己做過保護,都不在你手上。Hans SafeDoc 處理的是更前面那一步,掃描、預覽、對照表與還原全部留在本機,正式流程不送遙測,只把不含對照表的安全封包交給雲端 AI,再把結構化結果帶回本機驗證。
哪些檔案和哪些人不適合用 Hans SafeDoc 做去識別化?
支援五種格式,PDF、手機版和有公式的 Excel 都不行。現在可以處理 Markdown、TXT、CSV、DOCX 與沒有公式的 XLSX,全部在 Obsidian 電腦版執行,舊版的 doc 與 xls、帶巨集的 Office 檔、有複雜物件的 Excel 都會被擋下來,圖片也不做 OCR。PDF 建議先用本機的確定性工具逐頁轉成 Markdown,確認沒有漏頁也沒有整頁掃描圖再進來,或者直接用 Adobe Acrobat Pro 的遮蔽功能。如果你每天要處理幾十萬筆資料,要串資料庫或企業 ETL,Presidio、Limina、Google Cloud 這類可程式化的方案才是對的選擇。文件牽涉法律、醫療、金融或高度敏感的決策時,它也不能當成法遵認證或專業資安審查的替代品。
Hans SafeDoc 是用 AI 判斷個資嗎?為什麼不加本機小模型?
不是,正式版沒有打包任何 AI 模型。1.3.0 走的是固定規則、工作階段客戶字典與人工確認三層,不需要 Ollama,ONNX runtime 與模型權重也沒有放進 Release。身分證、電話、Email、信用卡與統一編號這種格式明確的資料用確定性規則偵測,姓名、公司、專案與內部系統名稱靠你匯入的客戶字典做完全相符比對。1.5B 等級的小模型用 CPU 確實跑得動,但跑得動不代表抓得準,除了精確率(Precision)與召回率(Recall)要過門檻,還得檢查模型授權、訓練資料來源與供應鏈安全。我實際測過幾套,第三方候選的來源鏈查不清楚,自己訓的抓不夠準也漏得太多,最後決定整個拿掉,不把品質不夠的模型硬塞進正式版當賣點。
中文姓名和地址,去識別化時抓得到嗎?
地址多半抓得到,姓名和公司名一定要你自己看過。符合常見格式的臺灣完整地址可以用規則偵測,但遇到 OCR 錯字、口語寫法、欄位拆分或少見格式仍然可能漏判。姓名與公司名稱沒有固定格式,Hans SafeDoc 不會假裝能猜出所有名稱。比較安全的做法是把已知的姓名、公司、部門、產品與專案名稱放進工作階段客戶字典,讓它以完全相符的方式精確比對,最後再由你人工確認一次。它沒有宣稱能自動找出所有個資,靠的是固定規則、精確字典與人工審核三者疊起來。
安裝 Hans SafeDoc 時的檔案存取權限警告,會把資料傳出去嗎?
不會,那個權限是為了不動到你的原始檔。安裝時你會看到 Direct Filesystem Access 的警告,它需要這個權限才能讀取你指定的、Vault 以外的檔案,並且在 Vault 外面建立安全副本,同時做到不覆寫來源,也不把還沒處理過的文件複製進你的知識庫。這個權限跟上傳無關,整個處理過程留在你的電腦。原始檔對它是唯讀的,選檔之後它會記下檔案大小、修改時間與 SHA-256,你如果在審核到一半去改了原始檔,前面的決定會全部失效並要求重新掃描。
去識別化是加密、雜湊,還是直接把內容刪掉?
都不是,它換成該次工作專用的安全代碼。你確認之後,系統會把敏感資料換成這次工作(Job)專用的安全代碼,長得像 ⟦PB:…⟧ 這樣,再把原文與代碼的對照表加密保存在 Obsidian Vault 之外。還原密碼會先透過 scrypt 衍生金鑰,再用 AES-256-GCM 加密對照表,密碼本身不會儲存,對照表也不會放進 Vault、安全副本或安全封包。雜湊只用來驗證檔案有沒有被換掉,不是拿來取代個資。信用卡號、密碼與 API Key 這類內容不允許做成可還原的代碼,只能直接遮掉、排除該段落,或是整份停止輸出。
相同的資料處理過後,會得到相同的安全代碼嗎?
同一個工作內會,不同工作不會。同一次處理工作中,相同類型且統一格式之後相同的資料會拿到同一組代碼,例如同一支電話即使空格、括號或連字號的寫法不同,仍然會對應到同一個安全代碼,AI 讀的時候才知道前後講的是同一位受訪者,分析結果才有意義。不同工作會使用不同的代碼金鑰,同一筆資料不會永遠產生相同代碼,這是刻意的設計,避免不同工作之間被互相串聯,也避免外部系統長期追蹤同一個人。
去識別化之後,AI 分析完可以還原嗎?
可以,但 AI 必須按指定格式回傳結構化結果。系統只接受符合格式的 Result JSON,並且會逐項檢查工作編號、安全封包雜湊、匿名文件編號與每一個安全代碼,只要出現未知、偽造、缺少或來自其他工作的代碼,整包還原就會停止。驗證通過之後會另外建立新的結果資料夾,不覆寫原始文件、安全副本,也不覆寫 AI 回傳的檔案。要特別注意的是,還原後的文件會重新包含個資,那份檔案就不能再上傳到任何雲端服務。
127 項驗收代表 Hans SafeDoc 的去識別化準確率嗎?
不代表,那是檢查項目的數量,不是分數。README 目前列的 127 項涵蓋來源唯讀、格式拒絕、敏感內容偵測、人工審核、輸出殘留、Office 結構、網路行為與 Release 資產,它能做的只有一件事,確保已知情境沒有退步,替代不了不同產業、不同語境、不同 Office 產生器的實際驗證,也證明不了你手上那份文件不會漏。我很反對把測試數量包裝成準確率,那是拿數字當保證書。官方自動掃描通過也是同樣的道理,自動掃描通過就是自動掃描通過,跟人工審查是兩件事。
