關於檔案儲存的那些事

picture

2025-05-23

關於檔案儲存的那些事

關於檔案儲存的那些事

在打造一個涉及私密性檔案儲存系統時,我們總想著上傳要穩、載入要快、檔案可以延伸應用處理、而且不會外流,需求依次排開後才發現各種衝突與矛盾,大學學到的安全、效能、成本的三角拉鋸戰是真的。這篇文章想聊聊我們在 CDN 時代、微服務架構下,如何面對檔案保存帶來的挑戰與折衷方向。

IPFS是啥?安全嗎?

IPFS 是一種分散式檔案儲存與分享的網路協議,目的是讓資料的儲存與取得不再依賴於集中式伺服器,而是透過 P2P 方式進行。由於一些還沒申請好的專利設計,我們需要將檔案保存在 IPFS 作為 CDN 解決方案。然而在理論上,IPFS 本身並不加密資料內容。它提供的是一種基於「內容雜湊」的尋址方式,也就是說,只要你知道一個檔案的 Hash,你就能找到這份資料的來源。但這也意味著,只要這個 hash 被分享出去,任何人都可以取得該內容。IPFS 一切檔案公開可讀、但不可竄改。他幫我們解決「資料既需要保密又要全世界交換來交換去」的需求。它能天然地支援跨區快取、去中心化分流,省下不少流量費用,也不用擔心信義區停電就全線宕機。不過話說回來,安全機制還是要我們自己補上去,IPFS 本身只是資料通道,不是保險櫃。

檔案分片與分片加密

在這個連前端都會默背 secp256k1 的時代,幫每個使用者準備一組 Hierarchical Deterministic Wallet 早已不是什麼黑科技。這套金鑰機制不只能拿來簽名、登入,甚至可以用來保障每一個使用者上傳檔案的隱私性。我們的分片加密流程大致如下:

  1. 建立 secret salt:在使用者每次上傳新檔案時,先隨機生成一組 secret salt,作為後續加密的 root seed。
  2. 公鑰加密 salt:使用者的 HD Wallet 公鑰對 secret salt 進行非對稱加密,以便之後能由私鑰解密取出對稱加密金鑰。
  3. 分片處理:將原始檔案切割為每片 4MB 的 chunk,這樣做的好處包括上傳重試更簡單、資料校驗更輕量、且利於快取。
  4. 對稱加密分片:使用由 secret salt 經過雜湊函數衍生出的密鑰,對每個 4MB 分片做對稱式加密,保證即使分片被竊取也無法還原內容。
  5. 分片上傳至 IPFS:每個加密後的分片都上傳至 IPFS,並取得對應的內容 hash。
  6. 構建 metadata:將整份檔案的 metadata 結構化,包括原始檔案的 hash、檔案大小、所有分片的 hash 清單、salt 的加密版本等。
  7. 儲存 metadata hash:這份 metadata 同樣存入 IPFS,取得最終的 metadata hash,並將此 hash 作為檔案的唯一代表儲存在資料庫中,方便索引與查詢。 這樣的架構使得檔案系統確保資料不可篡改,僅限授權者可閱覽,支援斷點續傳。這就是我們在實作分散式儲存系統時,讓「去中心化」與「資料保護」可以兼容並行的做法。

救命啊我的機器壞了有幾個分片救不回來!

最近信義區不知道怎麼了,停電成了每週的例行公事。對一般人來說可能只是電梯多走幾層樓的問題,但對我們來說一次機房斷電,就可能讓好幾百萬筆檔案無法立刻還原。用戶點了下載卻卡在 98%,公司電話會被打到骨折。為了解決這個「1 個分片爛掉就全檔報廢」的痛,我們參考 RAID5 的概念,自己打造了一套 Software RAID 機制 Raid2X,原理概念如下:

  1. 分片分區儲存:原始檔案切成固定 4MB 大小的 chunk(主分片),每 8 個主分片為一組。
  2. 加上 1 個 parity 分片:我們使用簡化的 XOR 編碼每組生成 1 個冗餘分片,只要整組裡少於兩個分片遺失,就可以還原整組內容。
  3. metadata 記錄冗餘分片清單:metadata 補上冗餘分片清單,未來下載時系統自動判斷是否需 parity 分片還原。 歡迎畢業論文還沒找到題目的研究生來幫我們驗證或打臉。

請工讀生處理檔案會不會外流啊

加密的資料總會有要拿出來見人的時候,如公司會計在登打發票時(對,我們做的是會計系統),有時會遇到這種狀況:一張用途不明的五星級飯店住宿發票,抬頭寫著「招待外賓」,但入住人看起來是總經理本人。對資深會計來說,這叫做「知道了也裝不知道」;畢竟大家都要留點餘地過日子。但如果登打的人是工讀生呢?這時就凸顯出資訊系統該如何設計「最少揭露,但仍可用」的能力,我們在此設計了兩種機制:

  1. 使用同態加密技術,能算不能看。同態加密(Homomorphic Encryption) 的特性,讓系統能在不解密原始資料的情況下執行計算與驗證,你的計算結果是加密過的內容,這部分篇幅過大有機會再分享。
  2. Simulated Redaction 保留必要資訊,重新仿真生成。針對不同權限角色不直接提供解密後的資料,而是「仿真生成可用資料」,幫你的資料內容加上一片海苔。 透過讓敏感資訊完全自動封裝、記錄、稽核、並只在需要時解封,而非靠人與人之間的默契與壓力。在會計領域中,事務所可以一口氣找外部幾百個工讀生一起比對帳務,透過人工智能技術撰寫審計報告,而不用擔心客戶資料外洩,以實現持續審計。

結語

檔案保存這件事從來不只是儲存檔案而已,它不只牽涉到系統設計的細節,也觸及組織文化與倫理底線。為了在效能、成本與安全之間找到一條務實可行的路,加密可以放在後端,但是切片與合併就必須在前端實現,這讓前端工程師撞牆到懷疑人生,需要大量下午茶與甜點安撫,又進一步造成工作傷害。總而言之,我們提供一個實驗性作品展示部分機制,最重要的是:如果你是還沒找到畢業論文題目的研究生,要不要考慮幫我們驗證或優化?

luphia_avatar

Luphia

Chore Errand Operator

I bet a Tequila Sunrise that you can't pronounce my name. Loser drinks.

Check more from this author

Share to

Back