返回關於我們

公開文件

AegisMeetings 零知識加密架構白皮書

本文件向任何讀者公開說明架構、威脅模型與保證邊界;設計以開放密碼學標準為基礎,歡迎獨立檢視。完整技術敘述見下方正文。

版本 2.3 · 發布日期 2026-07 · 公開版,不含實作細節

版本 2.3 · 發布日期 2026-07-09 · 公開版(不含實作密鑰、內網位址、程式碼名稱、自訂資源名稱)

🌐 閱讀說明

  • 本文件分兩部分:概覽以白話說明核心設計理念與安全保護;技術規格深入密碼學架構與金鑰層級,供獨立驗證。
  • 密碼學術語(AES、RSA、XChaCha20 等)保留英文原名。
  • 「誠實窗口期」(Honest Processing Window):音檔(與為提升 ASR 準確度而需解密的自訂詞庫)送進轉錄主機後、暫存資料被安全抹除前,唯一短暫接觸明文的時段;資料只存在處理記憶體與極短暫的暫存區,不作持久保存。

目錄

概覽

技術規格


概覽

一句話保證

你的會議音檔、逐字稿、AI 摘要與自訂詞庫,連 AegisMeetings 自己都讀不到。

這不是一句承諾,而是一個由密碼學「鎖死」的設計:資料在你的裝置上就先上鎖,鑰匙從不離開你。即使我們的工程師、系統管理員,甚至入侵伺服器的駭客,拿到的也只是一堆無法解開的密文。

唯一的例外,是 AI 轉錄當下需要短暫「聽」一次你的音檔——這一點我們誠實揭露,並用嚴格的隔離把它的暴露面壓到最低(見誠實窗口期(Honest Processing Window))。

誰能看到你的資料?

角色 看得到 看不到
你的瀏覽器(你自己的裝置) 全部明文(這是你的東西)
我們的伺服器 一堆上了鎖的密文、基本帳號資訊、詞庫 Blob 路徑與筆數 你的音檔、逐字稿、摘要、詞庫內容的任何明文
雲端儲存空間 加密檔案(對它而言是亂碼) 任何可讀內容
轉錄主機(AI 處理) 處理當下那一筆音檔與相關詞庫(用完即清除) 你過去所有會議、其他人的資料

重點:就算有人同時偷走我們的伺服器、資料庫、雲端儲存,他拿到的也只是解不開的密文。

為什麼連我們也解不開?

三句話講完:

  1. 鑰匙在你手上,不在我們這。 你第一次建立金庫時,加密金鑰是在你的瀏覽器、你的裝置裡產生的,從來沒有傳到我們的伺服器
  2. 我們只保管「上了鎖的保險箱」。 你的資料在離開裝置前就已經加密;我們存的是密文,沒有你的金庫私鑰(你逐字稿、摘要等密封產出的唯一解鎖鑰匙)。
  3. 只有你的裝置能開鎖。 解密的運算全部發生在你的瀏覽器內,靠你的生物辨識(Face ID/指紋/Windows Hello)或你的金庫密碼來解鎖。

簡單比喻:你把貴重物品鎖進保險箱才寄放給我們,鑰匙你自己留著。我們能幫你保管箱子、搬運箱子,但永遠打不開它。

唯一的例外:誠實窗口期(Honest Processing Window)

要把語音變成文字、做出摘要,AI 必須真的「聽」一次音檔——這是任何 AI 轉錄服務都繞不過的物理現實。我們選擇誠實面對,並用以下方式把風險壓到最低:

  • 處理 AI 的「轉錄主機」與對外網站是兩套完全分離的系統,職責與權限互不相通。
  • 解密後的音訊只存在於記憶體,處理完畢立刻刪除,不會在硬碟留下可播放的明文檔。
  • 為提升語音辨識準確度,自訂詞庫(通用/專屬/會議)亦在同一窗口期於記憶體中短暫解密為 ASR 熱詞,不寫入磁碟、不持久保存
  • 轉錄主機關閉了記憶體置換(swap),降低明文被寫到磁碟的機會。
  • 除了這個短暫窗口期,你所有「靜態儲存」的資料,連我們自己都讀不到。

我們合作的雲端 AI 服務(Microsoft Azure OpenAI)依其官方資料隱私政策不會用你的資料訓練它的模型。

換裝置/遺失裝置怎麼辦?

因為鑰匙只在你手上,我們無法「幫你重設密碼」。但我們準備了兩條安全的後路:

  • 換新手機/新瀏覽器:在你已經登入、已授權的舊裝置上,於「安全設定 → 授權新裝置」產生限時配對資訊——12 碼配對碼 + 6 位 PIN 碼,以及可掃描的 QR Code(手機/平板掃描可開啟授權頁並自動填入)。在新裝置的「安全設定 → 從其他裝置授權此裝置」輸入配對碼與 PIN,或掃 QR 完成綁定。整個過程伺服器只是「加密包裹的中繼站」,看不到你的鑰匙。
  • 所有裝置都遺失了:你第一次建立金庫時,系統會自動下載一份 Aegis Recovery PDF(內含 24 字助記詞與加密私鑰)。把它存好(雲端硬碟或 USB,建議兩份異地備份),日後上傳到復原頁面就能在你的瀏覽器本地還原——PDF 內容同樣不會傳到我們伺服器

⚠️ 這份 PDF 等同你金庫的最高鑰匙,請妥善保管、切勿外流。


技術規格

本部分提供演算法選型、金鑰階層、信任邊界與雲端網路控制,供獨立驗證。所有圖表均去識別化:不揭露內網位址、訂用識別、自訂資源名稱或程式碼路徑;網路元件以通用 Microsoft Azure 服務名稱邏輯角色描述。

1. 密碼學架構(演算法與金鑰階層)

1-1. 金鑰不離開你的裝置

主私鑰(RSA-4096)由瀏覽器在使用者裝置記憶體內生成,從不傳送至伺服器。保護該私鑰的對稱金鑰有兩條衍生路線:

  • WebAuthn PRF(硬體路線,優先):金鑰衍生材料綁定於裝置安全晶片(Secure Element/TPM)。攻擊者即使取得實體裝置,也須通過生物辨識或 PIN;純軟體攻擊無法繞過硬體屏障。
  • Argon2id(密碼路線,降級方案):用於不支援 WebAuthn PRF 的環境。保護私鑰的對稱金鑰由**金庫密碼 + 伺服器下發 Salt + 僅存於該瀏覽器 IndexedDB 的「裝置秘密(device secret)」**經 Argon2id(128 MB 記憶體成本)衍生。僅有密碼、缺少該瀏覽器的裝置秘密,無法還原私鑰——避免「同時竊得伺服器密文與使用者密碼即可在任意電腦解密」的風險。

音訊金鑰的誠實窗口期傳遞路徑(為避免語病,需明確說明):音檔以各會議專屬的音訊金鑰(以 HKDF 自每筆會議的隨機主秘密衍生,詳見 §1-3)在瀏覽器端加密後,以 SAS Token 直接上傳至 Blob——音檔位元組從不流經網站 VM。與此同時,音訊金鑰以轉錄主機公鑰再度封裝,連同 Blob 音檔位址一起置入 Service Bus 任務訊息 payload,由任務佇列傳遞至轉錄叢集——此金鑰材料不寫入資料庫。轉錄主機收到任務後,於記憶體以自身私鑰解封取得音訊金鑰,從 Blob 下載密文並解密,於記憶體執行語音辨識;任務結束後音訊金鑰連同音訊明文一起清除,轉錄叢集不再保有任何音檔解密能力

此設計的必然意涵:資料庫中不存在以轉錄主機為對象的音檔解密金鑰,任務訊息消費後即消失。若使用者遺失裝置私鑰,AegisMeetings 從系統設計上即無法為其解密已儲存的音檔——這是零知識架構的代價,也是保護所有使用者不受服務提供者濫用的根本機制。

1-2. 演算法選型

用途 演算法 選用理由
主金鑰對 RSA-4096 OAEP 業界標準,主流瀏覽器原生支援
私鑰靜態保護 AES-256-GCM 硬體加速、NIST 標準
音檔上傳密文(瀏覽器) libsodium secretstream(XChaCha20-Poly1305) 串流式 AEAD、大 nonce 空間,適合大型音檔分塊
轉錄產出密文 XChaCha20-Poly1305 家族 與上傳鏈路一致之 libsodium 管線
金鑰衍生(密碼路線) Argon2id 2015 Password Hashing Competition 冠軍,抗 GPU/ASIC 暴破
裝置綁定(硬體路線) WebAuthn PRF W3C 標準,衍生材料由裝置安全晶片產生
訊息完整性 HMAC-SHA256 確保系統內部任務訊息未遭竄改
會議子金鑰分離 HKDF-SHA256 自每筆會議的隨機主秘密以固定 info 分流出音訊金鑰與 HLS 串流金鑰

1-3. 金鑰階層

使用者主金鑰對(RSA-4096)
│  ← 裝置生成,私鑰從不上傳
│
└── 每筆會議的加密金鑰材料(以你的 RSA 公鑰封裝,存於資料庫)
      │
      ├── 上傳路徑:32 位元組每筆會議隨機主秘密(高熵)
      │     → HKDF-SHA256(RFC 5869;固定 info 區隔用途)
      │        ├── 音訊金鑰(32B)… 音檔 secretstream 加密
      │        │     ↑ 同時以「轉錄主機公鑰」再度封裝,隨 Service Bus 任務 payload 傳遞(不寫入 DB);
      │        │       轉錄主機於記憶體解封 → 解密音訊 → 任務完成即清除;
      │        │       網站 VM 無轉錄主機私鑰,從設計上無法代為解密
      │        └── HLS 串流金鑰(16B)… HLS 串流 AES-128 切片(與音訊金鑰分離,避免跨協定重用)
      │
      └── 逐字稿金鑰 ← 轉錄主機產出後,以你的 RSA 公鑰包入每筆會議的加密金鑰材料

每筆會議使用獨立對稱材料:即使單一會議洩漏也不波及其他會議。逐字稿等密封產出的金鑰(存於每筆會議的加密金鑰材料中)受你的 RSA 主公鑰保護,只有你的私鑰能解開;音訊金鑰另行以轉錄主機公鑰封裝,透過 Service Bus 任務訊息傳遞(不持久化至 DB),供轉錄主機於誠實窗口期記憶體使用,任務完成後隨即清除——兩組封裝路徑互相獨立,各自以不同金鑰持有方為對象;任務結束後轉錄主機不再保有任何音檔解密能力。

1-4. 靜態儲存的型態

資料 存放位置 內容 誰能解讀
音檔(整檔或即時分片) 雲端 Blob 儲存 加密密文物件 持有你私鑰的裝置;或轉錄主機於誠實窗口期內(以自身私鑰解封音訊金鑰,記憶體解密)
逐字稿/摘要/重點/待辦(密封 bundle) Blob(主存)+資料庫(指標) 密文存於 Blob;資料庫僅存路徑、長度、完整性雜湊 只有持有你私鑰的裝置
詞庫(通用/專屬/會議,各獨立 Blob) Blob(主存)+資料庫(指標) 以音訊金鑰 XChaCha20-Poly1305 密封;資料庫存 Blob 路徑與詞彙筆數,不存任何詞彙明文、密文或逐詞雜湊 持有你私鑰的裝置;或轉錄主機於誠實窗口期(在記憶體中解密為 ASR 熱詞,任務結束即清除)
每筆會議的加密金鑰材料 資料庫 以你的 RSA 公鑰鎖住 只有持有你私鑰的裝置

伺服器(含資料庫、Blob)所見的靜態內容皆為「無對應私鑰即無法解讀之密文」,或僅為路徑/雜湊/筆數等不可還原之指標。

1-5. 自訂詞庫(三型 Blob)

為提升 ASR 準確度,使用者可維護三種詞庫,皆以音訊金鑰(與逐字稿金鑰相互獨立)XChaCha20-Poly1305 密封存放;靜態儲存時一般伺服器無法讀取詞彙內容,但轉錄主機於誠實窗口期會將指定詞庫在記憶體中解密為 ASR 熱詞(見下方操作說明):

類型 用途 靜態存放
通用詞庫 跨會議共用的專有名詞 獨立密封 Blob
專屬詞庫 綁定特定分類的術語 各分類一個獨立密封 Blob
會議詞庫 單場會議專用詞彙 各會議一個獨立密封 Blob
  • 瀏覽器端:編輯詞彙 → 以音訊金鑰密封 → 經 SAS 直傳 Blob;Web API 僅寫入路徑與筆數。
  • 轉錄主機:任務派發時攜帶 Blob 指標;於誠實窗口期(Honest Processing Window)在記憶體中解密合併為 ASR 熱詞(上限截斷),任務結束即清除。
  • 已廢止:資料庫逐詞 RSA 加密列或逐詞雜湊——現行架構不在 DB 保存任何詞彙形式

2. 信任邊界

區域 可見資料 不可見資料
瀏覽器(你控制) 金鑰、解密後明文 —(這是你的裝置)
網站伺服器(我們營運) 密文、元資料(會議時間、參與者帳號) 音檔/逐字稿/摘要的任何明文
雲端儲存 加密檔案(對它是亂碼) 任何可讀內容
轉錄主機(我們營運,半信任) 誠實窗口期內的明文音訊與相關詞庫(處理即清除) 歷史會議、網站伺服器的任何憑證

即便有人同時取得網站伺服器、資料庫與雲端儲存的完整存取權,得到的也只是無法解密的密文。

3. 多裝置授權與降級路線

3-1. 跨裝置授權(帶外傳輸/配對碼)

要在新瀏覽器或新裝置使用既有金庫時:

  1. 已解鎖且已授權的裝置 A,於「安全設定 → 授權新裝置」產生限時 15 分鐘的配對資訊:12 碼配對碼 + 6 位 PIN 碼,以及 QR Code(供新裝置掃描自動填入)。
  2. 在新環境 B 的「安全設定 → 從其他裝置授權此裝置」,輸入配對碼與 PIN(或掃描 QR),向伺服器領取經 PIN 加密的私鑰包裹(包裹對伺服器不可讀)。
  3. 包裹被領取後即自伺服器刪除(防重放)。
  4. B 於本地以 PIN 解開包裹後,依環境支援之方式重新綁定(WebAuthn PRF 或 Argon2 + 該瀏覽器新生之裝置秘密)。

全程伺服器僅為「加密包裹中繼站」,無法讀取傳輸中的私鑰;金庫密碼從不傳送至伺服器。

配對強度(與金庫主密碼區分):配對碼(12 碼十六進位)與 PIN(6 位數)各司其職——前者用於向伺服器領取包裹,後者在本機解密包裹內的私鑰;二者均需正確才能完成授權。此設計不具金庫密碼等級的離線暴破抵抗力。實作上以極短時效(15 分鐘)、成功綁定後刪除、伺服器端 API 限速與濫用偵測約束線上枚舉。需長期離線抵抗請以 Recovery PDF 或 WebAuthn PRF/金庫密碼路線為準。

3-2. 各路線的綁定範圍

  • WebAuthn PRF 使用者:能否跨裝置取決於驗證器類型。雲端同步 Passkey 可於已同步環境使用;Windows Hello、Touch ID 等強綁定驗證器在新裝置須先完成配對(3-1)或以 Recovery PDF 復原後重新綁定。
  • Argon2 密碼路線使用者:同一瀏覽器設定檔內需「金庫密碼 + 該瀏覽器裝置秘密」;換瀏覽器/設定檔/裝置時,單靠帳密與金庫密碼無法綁定,須以配對碼或 Recovery PDF 完成。
  • 清除瀏覽器網站資料(連帶清除 IndexedDB):等同失去該瀏覽器的綁定,須以 Recovery PDF 或配對碼重新綁定。

4. 災難復原(Recovery PDF)

  • 首次建立金庫時自動下載 Aegis Recovery PDF,建議妥善保存並異地備份。
  • PDF 內含:① 24 字助記詞(BIP-39 相容,頁面同時印出供人工核對)② QR Code ③ 完整加密私鑰(以助記詞 + Argon2id 加密,嵌於 PDF 元資料)④ 金庫密碼(密碼路線備用)。
  • 復原時將 PDF 上傳至復原頁面,瀏覽器本地解析還原私鑰,內容不傳送至伺服器

⚠️ 復原依賴 PDF 的完整電子檔;僅列印紙本會遺失元資料中的加密私鑰 payload,紙本無法數位復原。 ⚠️ 此 PDF 等同金庫最高存取憑證,請勿分享。

5. 安全保證與已知限制

我們保證

  • 服務端無法解密:全部伺服器遭入侵,攻擊者也只拿到密文。
  • 儲存洩漏安全:雲端儲存外洩時所有檔案均為加密狀態。
  • 最小歷史暴露:轉錄主機遭入侵,至多看到當下處理中的單筆會議,無法存取歷史。
  • 部署時機密注入:執行期機密僅於部署時經 Managed Identity 自 Key Vault 拉取一次,注入受權限保護之本地快取,運行時零外部機密查詢。
  • PHP 執行環境沙箱化:危險系統函數停用、檔案系統存取受限,即便 RCE 也難執行系統指令。
  • 唯讀應用程式層:部署後程式碼目錄 root 擁有、PHP 僅讀取,無法植入 Web Shell。
  • 核心前端資源自託管:字型、樣式與應用程式 JS/CSS 由本站自建置產物託管;少數執行所需第三方(如 libsodium WASM、邊緣分析)以 CSP 明確允許清單納入(見 §7)。
  • API 全域限速:所有端點限速,敏感端點更嚴格。
  • VM 磁碟全程加密(Encryption at Host)。
  • 網路最小暴露面:應用 VM 不綁定可直接從網際網路撥入的公網介面;管理通道不倚賴對外開放之 SSH 埠。
  • 資料庫自動備份;程式碼以 Git + CI/CD 為還原真相來源。
  • 供應鏈安全掃描:每次部署前 composer audit + npm audit,高風險即中止;並啟用 Dependabot 持續監控。
  • 依賴版本鎖定:正式環境僅用 lock 檔精確版本。

已知限制(誠實告知)

  • ⚠️ 使用者裝置遭入侵:攻擊者控制你的瀏覽器後可讀取記憶體中的私鑰;任何客戶端加密系統在此情境皆無法保護。
  • ⚠️ AI 處理窗口期:轉錄期間明文短暫存在於轉錄主機記憶體中(見誠實窗口期(Honest Processing Window))。
  • ⚠️ 無靜態主金鑰的前向保密性:主私鑰若洩漏,歷史會議理論上可被解密。此為靜態主金鑰架構的本質取捨;未來版本規劃引入每次會議的臨時金鑰。
  • ⚠️ 營運元資料為明文:會議時間、時長、參與者帳號、處理狀態等為明文,用於系統運作;使用者可選將會議顯示標題以客戶端加密形式儲存(伺服器仍無法解讀)。
  • ⚠️ 配對碼與 PIN 熵有限:見 §3-1,設計為短時帶外授權,不等同金庫主密碼的離線暴破抵抗力。

6. 雲端與網路縱深防禦

本章說明營運面如何與密碼學零知識互補;以「誰有公網、誰沒有、誰能連誰」描述,不揭露內網位址、訂用識別或自訂資源名稱。下圖為同一章節的總覽架構圖(細節見各小節表格)。

6-1. 入口三層

攻擊者無法略過 Cloudflare 直打網站 VM——因為網站 VM 沒有對外公網介面;若改打負載平衡器入口且來源不在 Cloudflare 白名單,則在網站子網 NSG 被明確拒絕。

6-2. 網站子網 NSG 入站(邏輯順序)

優先序 規則(邏輯) 來源 目的埠 動作
LB 健康探針 Azure 負載平衡器 80 Allow
Cloudflare 回源白名單 Cloudflare 公布之公網段 80, 443 Allow
拒絕其他外網 外網際網路 80, 443 Deny
預設 虛擬網路內 同虛擬網路 * Allow

網域須維持 Cloudflare Proxy(橘雲);改 DNS only(灰雲)將因回源不帶 Cloudflare 特徵而被拒絕——此為刻意設計。

6-3. 資料平面、身分與內網路徑

  • Key Vault/Blob/資料庫/Azure OpenAI:公網端點關閉或對 Worker 不可達;網站 VM 與轉錄主機以 Private Link + Managed Identity 存取資料平面;連線字串外洩仍無法從一般外網直連。
  • 身分分離:網站受管身分與轉錄主機受管身分不同;轉錄專用私鑰、佇列完整性金鑰僅轉錄身分可讀,網站應用無法代為解密。
  • 內部 Webhook:走虛擬網路內 HTTPS,不依賴使用者可見的公網網域。
  • Service Bus:發佈任務時附 HMAC-SHA256;轉錄主機消費前驗證,不符則拒收並進入死信佇列。佇列依方案分流(VIP/優先/一般)。

6-4. 轉錄主機 VMSS 雙向隔離

轉錄叢集與網站 VM 使用不同 NSG,不配置公網 IP(NSG 掛於 VMSS 網路介面),設計為「Internet 無法直接入站、白名單外出站一律拒絕」:

方向 類別 目的地(邏輯) 用途
入站 維運(可選) 同虛擬網路 僅 VNet 內有限通道(如 SSH); Internet 來源允許
出站 平台 Azure 中繼資料與 DNS 受管身分、名稱解析(含 Private Link 的 privatelink 解析)
出站 資料平面 Private Endpoint 子網 Blob、Key Vault、Redis、Azure OpenAI(443)
出站 任務佇列 Service Bus 服務標籤 拉取/完成任務(Standard 佇列,尚無 Private Link)
出站 可觀測性 Azure Monitor 服務標籤 Application Insights 等遙測
出站 容量 Azure Resource Manager VMSS 擴縮
出站 回報 網站 VM 子網(VNet 內) 內部 HTTPS Webhook
出站 預設 其餘全部 DenyAllOutbound 一律拒絕

即使轉錄主機遭 RCE,也難以向任意公網 C2 外傳資料(僅能走上述白名單 Azure 目的地與網站內網 webhook)。開機時關閉 swap、機密自 Key Vault 注入、語音模型於映像階段預裝並載入記憶體。

6-5. 與密碼學章節的關係(務必區分)

若發生… 網路層(本章) 密碼學層(§1–§4)
入侵者取得 DB + Blob 快照 仍可能拿到密文與元資料 無私鑰則無法解讀內容
繞過 Cloudflare 直打 LB NSG 拒絕非 CF 來源
轉錄主機被入侵 僅影響當下單筆任務 歷史密文仍受 RSA 保護
XSS 於瀏覽器執行 可能讀取已解鎖裝置記憶體內金鑰(見 §5 限制)

網路層提供縱深防禦與攻擊面最小化使用者內容機密性仍主要由客戶端金鑰與零知識管線承擔,兩者不可互相替代。

7. 傳輸層、CSP 與執行環境

7-1. Content Security Policy(重點)

指令 設定(摘要) 說明
script-src 'self' + 少數明示來源 支援 libsodium WASM(音檔加密於瀏覽器記憶體);wasm-unsafe-eval 為已知取捨
connect-src 'self' + Blob 儲存原點 瀏覽器不直連 Azure OpenAI;LLM 呼叫發生於轉錄主機出站
form-action 'self' + Paddle Checkout 網域 付款表單僅能提交至 Paddle(Merchant of Record)
frame-ancestors none 防 Clickjacking
object-src / base-uri none / 'self' 禁老舊外掛、阻 base 注入

搭配 X-Content-Type-Options: nosniffReferrer-PolicyPermissions-PolicyStrict-Transport-Security(HSTS 1 年)、upgrade-insecure-requests

即便 XSS 發生,攻擊者仍無法自伺服器讀取你的金庫私鑰或會議明文(該等資料不在伺服器端以明文存在)。

7-2. 機密管理(部署時注入)

執行期機密僅於部署時經 Managed Identity 自 Key Vault 拉取一次,寫入受權限保護之本地快取(PHP-FPM 唯讀);運行時零 Key Vault 網路呼叫。正式環境不依賴明文 .env

7-3. 拿到 Session 也沒有金鑰

攻擊者取得 能做 不能做
Session Token 模擬登入發 API 無法取得私鑰(只在瀏覽器記憶體)
資料庫密文 / 包裹金鑰 無法解密/解包,需使用者私鑰

Session + 資料庫 + 雲端儲存全拿 = 仍拿不到明文。

7-4. 濫用防護與金流

  • 限速:全域 API 限速;金庫建立、SAS 授權、配對等敏感端點更嚴格。
  • 上傳/轉錄濫用閘:建立會議頻率與並行未完成轉錄上限;失敗累計達閾值暫停上傳(紀錄僅含風控指標,不含會議內容)。
  • 會議處理鎖:以 Redis 協調,避免重複派工或 webhook 競態。
  • 金流(Paddle):訂閱、續期、退款由 Paddle(Merchant of Record)處理;金流整合上線前相關頁面可能尚未開放,目標架構不變。

7-5. Session 生命週期

可設定閒置登出(1 小時/8 小時/1 天/7 天,預設 7 天);過期時瀏覽器自動清除本地金鑰快取。Session 內容寫入 Redis 前經伺服器端加密;Cookie 強制 securehttponlysamesite=Lax

8. 資料流與處理環境(記憶體/密文邊界)

階段 執行環境 資料型態與留存
金鑰生成與解鎖 使用者瀏覽器(裝置記憶體) 私鑰與明文僅在裝置;不上傳
音檔上傳 瀏覽器 → Blob(SAS 直傳) 全程密文;網站 VM 不接觸明文
即時錄音 瀏覽器 → Web PubSub → Blob 分片加密直傳;停錄後 使用者裝置 以金鑰呼叫 live-dispatch-asr/ensure-play-assets;伺服器不代為補金鑰
詞庫編輯 瀏覽器 → Blob(SAS 直傳) 音訊金鑰密封;DB 僅路徑與筆數
任務派發 Service Bus 任務描述 + Blob 音檔位址 + 以轉錄主機公鑰封裝的音訊金鑰(不存 DB)+ 完整性標記;不含任何明文
轉錄與 AI 轉錄主機 VMSS(RAM 工作區) 誠實窗口期:音訊與詞庫明文僅於記憶體與極短暫存;結束即刪除
產出入庫 Blob(主存)+資料庫(指標) 逐字稿等為密文 bundle;DB 僅路徑/雜湊
逐字稿閱讀/編輯 使用者瀏覽器 自 Blob 下載密封 bundle → 本地解密/編輯/回寫;伺服器不解密封包內文
進度回報 內網 Webhook → 網站 VM 僅 Blob 指標與完整性欄位
訂閱付款 Paddle(外部 MoR) 帳務資料與會議密文分離
網站 API 網站 VM 密文、元資料、鎖與計數;無使用者私鑰與明文

原則:靜態儲存一律視為密文;唯一允許短暫明文的區段為轉錄主機 VMSS 的誠實窗口期,記憶體為主、關閉 swap、任務結束即清除。

9. 名詞解釋

術語 說明
零知識加密 服務提供者在設計上無法讀取使用者儲存資料的架構
端對端加密(E2EE) 全程僅收發雙方可解讀。AegisMeetings 不屬於 E2EE:AI 轉錄需在轉錄主機短暫處理明文(誠實窗口期)
誠實窗口期 音檔進入轉錄環境後至抹除前、資料僅於記憶體流動之唯一明碼時段
RSA-4096 / AES-256-GCM 業界標準非對稱/對稱加密演算法
XChaCha20-Poly1305 現代 AEAD;音檔上傳經 libsodium secretstream 串流封裝
Argon2id 2015 密碼雜湊競賽冠軍,用於由密碼安全衍生金鑰
WebAuthn PRF W3C 標準,由裝置安全晶片產生金鑰衍生材料,無物理驗證則無法衍生
裝置秘密(device secret) 僅存於瀏覽器 IndexedDB 的隨機秘密,參與密碼路線金鑰衍生;伺服器不持有
HMAC-SHA256 / HKDF-SHA256 訊息完整性驗證/金鑰衍生函數
SAS Token 限時限權的雲端儲存存取憑證,供瀏覽器直傳音檔與詞庫 Blob,過期失效
詞庫 Blob(通用/專屬/會議) 以音訊金鑰密封的自訂詞彙桶;DB 不存詞彙內容,僅存路徑與筆數
密封 bundle(sealed bundle) 逐字稿/摘要等產物以 XChaCha20-Poly1305 密封後存 Blob;閱讀與編輯在瀏覽器本地完成
Managed Identity Azure 無密碼機器身分,供服務間安全存取
Private Endpoint / Private Link 將雲端資源以私有網路連線接入內網,關閉公網端點
NSG(網路安全群組) 子網或 VM/VMSS 網路介面上的入出站防火牆規則
Egress Filtering(出站過濾) 限制伺服器對外連線目的地,阻斷資料外洩途徑
前向保密性 即便長期金鑰洩漏,過去通訊仍受保護的特性

10. 聯絡資安團隊

若你發現潛在安全性問題,請先私下聯繫,給我們在公開揭露前完成修復的機會:

[email protected]

我們承諾第一時間回覆、驗證並修復。在修復完成前,懇請對漏洞細節保密,共同保護所有使用者的資料安全。