Hans SafeDoc Obsidian 外掛與文件安全代碼化操作畫面。

AI 資安工具 Hans SafeDoc:讓 Obsidian 文件安全上傳雲端

我在企業內訓裡最常收到的問題之一,就是把公司的資料上傳給 ChatGPT 整理,資安上到底安不安全?

這個問題一出現,現場通常會安靜幾秒,大家手上的文件可能有客戶名單、未公開合約、訪談內容或內部資料,只要按下送出,那份資料就已經離開自己的電腦與原本的控制範圍,接下來只剩服務提供者怎麼處理與保護它。

於是我開發了 Hans SafeDoc,一個在 Obsidian 電腦版執行的 AI 資安工具,專門在文件上傳前做去識別化,先用固定規則找出電話、Email 與識別碼等候選,再讓你逐項確認並建立安全副本。

人名與組織目前仍必須人工檢查,任何自動偵測都不能保證完整,我也會告訴你市面上還有哪四套工具可以選,以及我為什麼看完之後還是決定自己寫一個。

Hans SafeDoc 去識別化外掛的新手教學畫面,說明支援格式與 AI 資安限制
Hans SafeDoc 一打開就先把支援範圍跟限制講完。

企業內訓現場最常被問的 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 SafeDocObsidian 電腦版,交給 AI 之前逐項審核本機文件格式範圍窄,一定要人工確認,只有電腦版
Presidio開發者自建文字、圖片或資料處理服務要部署,要調校 recognizer,要自己設計工作流
Limina企業內部容器與資料管線要有容器部署跟系統整合能力
Adobe Acrobat Pro人工處理與遮蔽 PDF只有 PDF,流程仍然靠操作人員
Google Cloud SDP雲端 API 與大量資料轉換資料治理、權限、費用與雲端架構要另外管
五套去識別化工具的 AI 資安適用場景比較

去識別化沒有萬用正則,這是所有 AI 資安工具的共同難題

寫過一點程式的人第一個反應都是拿正則表達式去抓,我一開始也是。

抓兩天就會撞牆。June 可能是人名,也可能是六月。一串九位數字可能是證件號碼,也可能只是訂單編號。同樣一個字串在不同產業、不同國家、不同文件裡的意義完全不一樣,Limina 的官方說明也用類似的例子在講,PII 的判斷會受上下文、地區格式跟資料組合影響。Presidio 的文件裡更是直接寫明,自動偵測不能保證找到所有敏感資訊。

兩家做得比我久、比我專業的團隊都這樣講,我就沒有理由把產品包裝成按一下自動保證匿名。這個認知決定了 Hans SafeDoc 後面所有的設計。

Hans SafeDoc 怎麼開發的,我從一張決策清單開始

這個專案最早的檔案不是程式碼,是一份 Decision Register,白話講就是一張決策清單,把我不打算妥協的事情先寫死。原始資料唯讀、禁止自動接受、輸出不准覆寫、正式流程零遙測、遇到看不懂的格式要擋下來,這五條在寫任何介面之前就鎖好了。

理由很現實。資安產品如果一邊開發一邊為了方便放寬底線,最後剩下的就只有好用,安全會一路被磨掉。

去識別化的第一條規則,我不讓它動你的原始檔

資安工具最不該做的事,是在保護你之前先把你的檔案弄壞。

Hans SafeDoc 對來源檔案是唯讀的。你選好一份文件之後,它會讀取內容並建立一份快照,記下檔案大小、修改時間跟 SHA-256。如果你在審核到一半的時候去改了原始檔,前面的決定就會全部失效,必須重新掃描。這一步很煩,但它擋掉的是最糟的那種意外,用舊的位置資訊去改寫新的內容,改完你還不知道哪裡壞了。

輸出也不走一般軟體按儲存就覆蓋的習慣,它一定另外建一份安全副本,檔名不跟原檔撞在一起,你的正本永遠留在原地。就算流程中間出錯,也不會拿原始檔當代價。

不過另存新檔本身還不夠。多了一個檔案只能證明它存在,不能證明它是乾淨的。所以產出之後,程式會獨立把那份新檔重新打開一次,檢查安全代碼有沒有正確寫入,該遮的東西還有沒有殘留,結構有沒有超出允許範圍。重開失敗、找到殘留、或結構跑掉,這三種情況它都不會把檔案交給你。

去識別化前的合成 DOCX 文件,保留假姓名、假電話與假 Email 供 AI 資安示範
文章裡的示範全部用合成資料,這是還沒處理過的原始 DOCX。

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 在批次去識別化前顯示候選摘要,符合人工確認的 AI 資安流程
一般候選可以批次確認,Office 的中繼資料、圖片跟結構仍然要一項一項看過。

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 這類可程式化的方案才是對的選擇,不要為了一個外掛把管線重做。文件牽涉法律、醫療、金融或高度敏感的決策時,它也不能拿來當法遵認證或專業資安審查的替代品。

去識別化後的安全副本,假電話與 Email 換成安全代碼且 Word 版面完整
安全副本把假電話跟假 Email 換成安全代碼,版面用 Word 打開還是正常的。

最後的總結: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 產生器的實際驗證,也證明不了你手上那份文件不會漏。我很反對把測試數量包裝成準確率,那是拿數字當保證書。官方自動掃描通過也是同樣的道理,自動掃描通過就是自動掃描通過,跟人工審查是兩件事。

Similar Posts