User Secrets v.s. Data Protection @NET5

比較 UserSecrets 與 DataProtection 機制。

引言

研究系統初始化時如何安全的初始化。發現了 ASP.NET Core 中開發應用程式秘密保管庫儲存體(即 UserSecrets)設定 ASP.NET Core 資料保護(即 DataProtection) 就花了幾天時間研究。 跳過過程直接結論。

Data Protection

  1. 自動產生加密金鑰。

  2. 間接透過保護加密金鑰來保護資料。

  3. 可選用憑證來保護加密金鑰。經數十次試用,此保護用憑證(1)需內函私鑰,故於安裝部署時現場產製;(2)此保護用憑證只能放在憑證庫Cert:\CurrentUser\My的位置。

  4. 最終保護依據是作業系統對 CurrentUser 的保護機制。

  5. 若不用憑證保護加密金鑰,也可選用【Azure Key Vault】或【DPAPI】或自行加工。

  6. 有二種應用模式:(1)自我保護模式;(2)主要/次要保護模式,其中主要端才可以加密;次要端只能解密。

    • 自我保護模式,比較適合保護中繼形式的資料。

    • 主要/次要保護模式,比較適合系統初始化取初始參數。

  7. 結論:若能保證初始化參數的安全性,那安全性還滿高的。

User Secrets

  1. 保護依據是作業系統對 CurrentUser 的保護機制。

  2. 保護資料固定放在:%APPDATA%\Microsoft\UserSecrets<user_secrets_id>\secrets.json

  3. 有加密金鑰,以明碼保存資料。所以…

  4. 可以與 IConfiguration (AddUserSecrets) 整合。

  5. 使用簡單,適合用於系統取得初始化參數。

  6. 但是!官方建議只能用在系統開發時期的個人隱私資料保護!(囧囧囧囧囧)

  7. 結論:這是個高級垃圾機制,因為不適合部署到正式環境使用!

  8. 個人認為:還是可以用在windows應用程式存放以個人帳號分隔的保密資料。

  9. 個人細思:這個設計該不會只是為了在開發期間原碼簽入時,各個開發人員帳密資料分隔與避免簽入SVN/Git吧?

Last updated