安全

加密模型

.rkvey v5 格式:序言、依隔間 AEAD、僅追加提交與金鑰隔離。

.rkvey v5 格式(Rust Key Vault)依 HKDF 與 AEAD 最佳實務實作多層加密模型。概念模型:主密碼 → 主金鑰 → 子金鑰 → 加密隔間

每個項目分為 隔間(中繼資料、受保護機密、清單與附件檔案),各自擁有獨立 HKDF 金鑰。解密一個隔間不會暴露其他隔間。

QubKey v5 加密模型

主密碼

使用者輸入 (UTF-8) — 從未以明文形式儲存

韓國發展基金

氬氣2id

16 位元組(前導碼)

記憶

64MB

迭代

3

平行性

4

輸出

256位

萬能鑰匙

256 位元·保險庫根密鑰

HKDF-SHA256

資訊=“人類發展報告”

標題鍵

標頭鍵

HKDF-SHA256

訊息=“idx”

索引鍵

索引鍵

HKDF-SHA256

資訊=“車廂”

車廂鑰匙

隔間鑰匙

每個條目 (v5)

HKDF(master_key, salt=file∥entry_id, info=kind∥sub_id) → 分區金鑰

元數據
秘密
注意。顯現
AES-256-GCM

加密隔間

金鑰衍生

衍生將主密碼轉換為可用的密碼學金鑰。Argon2id 刻意消耗時間與記憶體(約 500 ms、64 MB)以限制離線暴力破解。在 v5 中,每個項目隔間隨後透過 HKDF 取得獨立金鑰。

使用者輸入 → 主密碼(UTF-8)

Argon2id → 含隨機 Salt 的 master_key(256 位元)

HKDF-SHA256 → B-Tree 的 index_key

HKDF-SHA256 → 依項目與隔間類型(中繼資料、機密、附件…)的 compartment_key

參數說明預設
VariantArgon2idOWASP 建議的混合變體 —— 抗 GPU 與側通道
Memory64 MB每次衍生占用記憶體 —— 提高並行攻擊硬體成本65536 KB
Iterations3記憶體遍歷次數 —— 安全/效能(約 500 ms)
Parallelism4並行執行緒
Output32 bytes衍生金鑰長度
Salt16 bytes序言中的隨機 Salt

AEAD 加密

AES-256-GCM(預設)

  • 現代 CPU 的 AES-NI 硬體加速
  • Nonce:12 位元組,認證標籤:16 位元組
  • 理論上限:每金鑰約 64 GB 加密資料

適用情境:具 AES 硬體加速的機器、日常使用。

多數平台上的預設演算法,效能最佳。

XChaCha20-Poly1305(選用)

  • 擴展 Nonce:24 位元組(碰撞機率可忽略)
  • 不依賴硬體 —— 所有 CPU 上效能穩定
  • 建議用於長期封存保險庫

適用情境:封存保險庫、無 AES-NI 的機器、偏好 ChaCha20。

可在進階保險庫設定中啟用。

檔案結構

preamble
header.enc
btree_root.enc
btree_nodes.enc
core_meta.enc
protected_secrets.enc
attachment_manifest.enc
attachment_blob_*.enc
commit_N
footer (validated)

結構說明(v5):

  • preamble —— 魔數、格式版本、Argon2id Salt
  • header.enc —— 加密的保險庫中繼資料(名稱、建立日期、設定)
  • index/ —— 加密 B-Tree,O(log n) 搜尋且無需解密機密
  • compartments/ —— 依類型的 AEAD 區塊:中繼資料、受保護機密、清單、附件
  • append/ —— 提交區域:新隔間 + 索引快照 + 已驗證頁尾

完整性與提交

容錯能力

僅追加提交 保證中斷時的完整性:

  1. 將新隔間追加到檔案末尾
  2. 寫入加密索引快照
  3. 同步到磁碟(fsync)
  4. 已驗證頁尾 完成提交(一致性點)

真實情境:編輯項目時斷電導致寫入中斷。重新啟動後 QubKey 找到最新有效頁尾 —— 無資料遺失、無靜默損壞。過時空間過多時定期壓縮寫入乾淨檔案。

依隔間隔離

透過 HKDF-SHA256,每個隔間擁有從主金鑰依項目 ID 與隔間類型衍生的獨立 compartment_key。實務效果:

  • 檢視項目僅解密 中繼資料;機密保持遮罩直至明確顯示
  • 附件 單獨載入(下載/預覽),開啟保險庫時不載入
  • B-Tree 索引使用與資料分離的 index_key
  • 修改機密時不一定重寫未變更的附件檔案

此隔離原生內建於 .rkvey v5 格式。

密碼學原語

原語用途函式庫
Argon2id密碼 → 金鑰衍生argon2 (RustCrypto)
HKDF-SHA256金鑰 → 子金鑰衍生hkdf (RustCrypto)
AES-256-GCMAEAD 加密aes-gcm (RustCrypto)
XChaCha20-Poly1305AEAD 加密(備選)chacha20poly1305 (RustCrypto)
HMAC-SHA256檔案完整性hmac (RustCrypto)
CSPRNG亂數產生getrandom (OS)