[設計案例] 授權碼 如何實作? #3 (補) - 金鑰的保護

[設計案例] 授權碼 如何實作? #3 (補) - 金鑰的保護

問題與答案 (FAQ)

Q&A 類別 A: 概念理解類

Q1: 什麼是「授權碼」?

  • A簡: 授權碼是描述授權條件並經數位簽章的資料,供客戶端離線驗證授權真偽與範圍。
  • A詳: 授權碼是以結構化資料表述授權條件(如版本、功能、期限、綁定硬體等),再以原廠私鑰進行數位簽章產生的字串或檔案。客戶端僅需公鑰即可驗證其完整性與發行者,常用於軟體啟用、功能解鎖、更新權限判定等,能離線驗證且不暴露私鑰,避免授權條件被竄改。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q2, A-Q3, B-Q1, C-Q2

Q2: 什麼是數位簽章?與授權碼有何關係?

  • A簡: 數位簽章以私鑰簽出、以公鑰驗證,確保授權碼來源真實與內容未被修改。
  • A詳: 數位簽章使用非對稱密碼學。發行端以私鑰對授權碼摘要簽章,驗證端以對應公鑰驗證簽章與原文是否匹配,達到身分鑑別與完整性保護。此機制使客戶端無需接觸私鑰即可判斷授權碼真偽,是授權系統的核心安全依據。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q3, B-Q1, B-Q4, C-Q2

Q3: 什麼是「公開金鑰/私密金鑰」金鑰對?

  • A簡: 金鑰對是非對稱加密的兩把鑰;私鑰用於簽章,公鑰用於驗章與分發。
  • A詳: 金鑰對包含私鑰(保密,僅發行者持有)與公鑰(可公開,供驗證者使用)。私鑰用於生成授權碼的簽章,任何人拿到公鑰即可驗證簽章正確與否。安全性仰賴私鑰保護與公鑰的真實性來源(避免被掉包)。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q4, A-Q6, B-Q2, B-Q5

Q4: 為什麼需要妥善保護私鑰?

  • A簡: 私鑰若外洩,攻擊者可偽造有效授權碼,破壞整個授權信任鏈。
  • A詳: 私鑰是授權碼可信的唯一根本。持有者可任意簽出看似合法的授權,不當外流將導致無法區分正版與假碼,需全面撤換金鑰並通知所有客戶更新。妥善保護可藉硬體模組(TPM/HSM)、權限與流程管控、審計與輪替制度實現。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: B-Q8, D-Q5, B-Q11, C-Q1

Q5: 公開金鑰在驗證中的角色是什麼?

  • A簡: 公開金鑰提供驗章能力,讓客戶端能驗證授權碼來源與完整性。
  • A詳: 公開金鑰由原廠發佈給客戶端,驗證端使用它與授權碼原文計算摘要並比對簽章值,從而確認授權碼未被修改且確為私鑰持有者簽發。其安全性依賴取得方式:內嵌、從可信CA取得、或連回原廠交叉驗證。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q6, B-Q4, B-Q6, C-Q5

Q6: 什麼是「公開金鑰掉包」風險?

  • A簡: 攻擊者以自製公鑰替換原廠公鑰,使偽造授權碼也能通過驗證。
  • A詳: 若客戶端採用的公鑰可被第三方替換,攻擊者生成自家金鑰對,用私鑰簽出假授權碼,再以掉包之公鑰驗證,即形成虛假信任。防範需以內嵌公鑰、CA信任鏈、憑證固定或強制連回原廠多重機制建立來源可信度。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q5, B-Q7, C-Q6, D-Q2

Q7: 為何要將公開金鑰預先內建於系統?

  • A簡: 內建公鑰可避免被替換,離線也能驗證授權碼,降低供應鏈攻擊面。
  • A詳: 將公鑰寫死於應用程式或韌體(憑證固定/金鑰釘選),可免除部署與分發過程的掉包風險。此模式適合受控環境(如遊戲主機)或可配合硬體保護(TPM、Secure Boot)。缺點是輪替不便,需設計過渡與更新機制。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q7, B-Q11, C-Q2, C-Q9

Q8: 什麼是CA(憑證機構)?為何透過CA發行公鑰?

  • A簡: CA是受信第三方,提供憑證與信任鏈,讓驗證端能取得可信公鑰。
  • A詳: CA核發含有公鑰與主體資訊的憑證,並以上游CA簽章構成信任鏈。客戶端只要信任根CA,即可驗證發行者身分與公鑰真偽,防止掉包。代價是建置與維運成本、年費與線上撤銷查詢需求,需要合規流程支援。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, B-Q10, C-Q5, D-Q3

Q9: 內嵌公鑰、使用CA、強制連回原廠三者有何差異?

  • A簡: 內嵌離線強;CA提供第三方信任;連回原廠可動態控管與偵測異常。
  • A詳: 內嵌公鑰具離線與抗掉包優勢,但輪替難。CA模式具標準化、可撤銷與跨域信任,惟需線上資源與費用。連回原廠可實作啟用、心跳與更新門檻,偵測與阻斷異常,但受網路依賴與隱私考量。實務常混合使用以達成防禦縱深。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, A-Q8, B-Q9, C-Q7

Q10: 什麼是TPM?如何協助金鑰保護?

  • A簡: TPM是可信平台模組,提供硬體層級金鑰儲存與運算,避免私鑰外流。
  • A詳: TPM可產生並封存私鑰,僅允許在晶片內部完成簽章運算,外界無法匯出私鑰原始值。配合OS與驅動(如Windows CNG、DPAPI、Key Storage Provider),可提升私鑰防護強度,適合授權產生端與重要驗證節點。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q8, C-Q1, C-Q3, D-Q5

Q11: 為何「安全取決於金鑰管理,而非程式碼」?

  • A簡: 演算法公開且可靠,關鍵在私鑰不外流與公鑰來源可信。
  • A詳: 現代密碼學依賴演算法公開與金鑰保密。再完美的程式碼,若私鑰外洩或公鑰被掉包,攻擊者即可繞過授權。故需重視密鑰產生、存放、分發、輪替、撤銷、審計與應變,建立制度與技術並行的治理。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q4, A-Q6, B-Q11, D-Q5

Q12: 什麼是KMS?與授權驗證有何啟示?

  • A簡: KMS是集中授權服務,客端週期性回報以維持啟用狀態,類似連回原廠。
  • A詳: Windows KMS要求用戶端定期與內部或雲端KMS通訊更新授權租約。其模式顯示「強制連回可信端」可控授權狀態與偵測異常設備。對第三方授權方案,心跳、租約與黑名單亦可應用,補足離線簽章的即時控管不足。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q9, C-Q7, D-Q7, D-Q8

Q13: 憑證包含哪些資訊?與金鑰有何關聯?

  • A簡: 憑證含公鑰與主體、有效期、用途、簽發者等,用於建立信任鏈。
  • A詳: X.509憑證內含公鑰、主體名稱、序號、有效期間、延伸用途(EKU)、簽發者、簽章演算法與簽章值。客戶端透過憑證鏈與根CA信任建立公鑰真實性,並據用途限制(如簽章/用戶端認證)判定是否可用於授權驗證。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, B-Q10, C-Q5, D-Q3

Q14: 何時自建CA,何時採用公用CA?

  • A簡: 內部封閉環境自建;面向廣泛客戶或跨網域信任建議公用CA。
  • A詳: 自建CA適合企業內網、有統一控管與佈署能力,成本低但需維運。公用CA適合對外發行、需跨平台/地區的信任,具撤銷與相容性優勢但需年費。亦可內外兼用:內部簽設備,對外用公用CA發佈與釘選。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, C-Q8, D-Q3, D-Q8

Q15: 數位簽章在授權管理的核心價值是什麼?

  • A簡: 提供離線可驗證的真偽與完整性,將信任根聚焦於金鑰管理。
  • A詳: 數位簽章讓授權碼不依賴祕密通道傳輸,任何人可公開驗證真偽。它將攻擊面縮小到金鑰安全與分發,便於以制度和硬體層保護;配合CA與連回原廠可形成多層防護,平衡使用體驗、成本與風險。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: A-Q2, A-Q11, B-Q1, B-Q9

Q&A 類別 B: 技術原理類

Q1: 授權碼的數位簽章驗證如何運作?

  • A簡: 以私鑰簽摘要、客戶端以公鑰驗章,比對簽章與原文摘要一致即可信。
  • A詳: 原理:先對授權碼原文做雜湊,再用私鑰簽章。驗證端重算雜湊並用公鑰驗章。流程:序列化→雜湊→簽章→封裝;客戶端解封→驗章→解析→套用。核心組件:非對稱演算法(RSA/ECC)、雜湊(SHA-256)、序列化器、驗證器。確保原文與簽章綁定且不可否認。
  • 難度: 初級
  • 學習階段: 核心
  • 關聯概念: A-Q2, B-Q4, C-Q2, C-Q4

Q2: 金鑰生成與長度選擇的原理與流程?

  • A簡: 依安全等級選RSA/ECC與足夠位元長度,安全隨機產生並妥善封存。
  • A詳: 原理:使用CSPRNG生成RSA 2048/3072或ECC P-256/P-384金鑰對。流程:選演算法→產生金鑰→設定用途→封存(TPM/HSM或憑證庫)→備援與存取控管。核心組件:CNG/BCrypt、OpenSSL/.NET RSA/ECDsa、KSP/CSP。選擇取決於相容性、效能與合規要求。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q3, A-Q4, C-Q1, C-Q3

Q3: 授權碼產生器的執行流程如何設計?

  • A簡: 收集授權參數→序列化→雜湊→私鑰簽章→輸出檔/字串並紀錄審計。
  • A詳: 原理:資料不可否認與完整性。步驟:1. 驗證輸入(功能、期限、綁定ID)2. 序列化為穩定格式(JSON/CBOR)3. SHA-256雜湊4. 私鑰簽章5. 封裝簽章與公鑰資訊/憑證鏈6. 審計與版控。核心:金鑰存取層、序列化器、簽章服務、審計記錄與密鑰輪替支援。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q1, B-Q11, C-Q4, D-Q1

Q4: 客戶端授權驗證流程是什麼?

  • A簡: 解析授權→載入公鑰/憑證→驗章→檢核條件→決定啟用與功能範圍。
  • A詳: 原理:最小信任面。步驟:1. 讀取授權碼並解析2. 取得公鑰(內嵌/CA/伺服器)3. 驗章與摘要比對4. 驗憑證鏈與有效期5. 檢核授權條件(期限、裝置、版本)6. 緩存與定期重驗。核心:驗證器、憑證驗證邏輯、授權策略引擎、記錄與告警。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q5, A-Q9, C-Q2, C-Q5

Q5: 公開金鑰掉包攻擊的機制與路徑?

  • A簡: 以假公鑰替換分發來源,配合同私鑰簽之假碼,在客端取得假信任。
  • A詳: 原理:信任錨被替換。路徑:安裝包被改、設定檔被換、更新渠道遭劫持、協力商故意替換。步驟:攻擊者產生金鑰→散布假公鑰→發放假授權→客端驗章通過。核心:供應鏈完整性、憑證固定、CA鏈驗、連回原廠比對與稽核可阻斷。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q6, B-Q7, C-Q6, D-Q2

Q6: CA信任鏈與驗證機制如何運作?

  • A簡: 以根CA為信任錨,逐層驗上游簽章與政策,確立公鑰真實性。
  • A詳: 原理:鏈上每張憑證由上層簽章,最上層為受信根CA。步驟:構建鏈→驗簽→檢查有效期與用途→撤銷狀態(OCSP/CRL)→策略評估。核心:根存放區、路徑建構器、策略引擎。結果確立發行者身分與公鑰來源可信。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q8, A-Q13, B-Q10, D-Q3

Q7: 憑證固定(Pinning)技術如何運作?

  • A簡: 在程式內內嵌公鑰或憑證指紋,驗證時僅接受預期的憑證/公鑰。
  • A詳: 原理:將信任錨移至應用內。步驟:嵌入公鑰/SPKI指紋→驗證連線或授權時比對→不符則拒絕。核心:嵌入資料、比對邏輯、更新機制(多把Key、過渡期)。提升抗掉包能力,但需妥善設計輪替與回退。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, B-Q11, C-Q6, D-Q2

Q8: TPM/硬體金鑰保護機制原理?

  • A簡: 私鑰在硬體邊界內產生與使用,僅暴露運算介面,不可匯出密鑰。
  • A詳: 原理:安全晶片提供隔離的金鑰產生與簽章運算。步驟:使用KSP/PKCS#11產生鍵→設定不可匯出→由應用呼叫簽章API→審計與防竄。核心:TPM/HSM、KSP/CSP、受信啟動。大幅降低私鑰外洩與惡意存取風險。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q10, C-Q1, C-Q3, D-Q5

Q9: 「連回原廠」驗證的架構與流程?

  • A簡: 客端週期性與伺服器交換證明,伺服器評估授權狀態並回傳決策。
  • A詳: 原理:線上授權租約。步驟:客端提交裝置指紋與授權摘要→TLS+Pinning→伺服器驗章與風險評分→回傳租期/黑名單狀態→客端更新本地權杖。核心:心跳API、風險引擎、租約緩存、重試與離線寬限策略。可偵測掉包與異常使用。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q9, A-Q12, C-Q7, D-Q8

Q10: 憑證撤銷(CRL/OCSP)驗證機制?

  • A簡: 透過CRL清單或OCSP即時查詢,判定憑證是否被撤銷。
  • A詳: 原理:被撤銷之憑證序號列於CRL,或由OCSP回應狀態。步驟:抓取CRL/查詢OCSP→驗上游簽章→檢查新鮮度→套用失效政策(Soft/Hard-fail)。核心:撤銷端點、快取策略、失敗處理。確保掉包或漏控時可快速阻斷。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q8, A-Q13, D-Q4, C-Q5

Q11: 金鑰輪替的設計原理?

  • A簡: 提前發佈新公鑰並支援雙簽過渡,最小化停機與相容性風險。
  • A詳: 原理:避免單點失效與長期暴露。步驟:發布含新公鑰的版本→授權同時以新舊私鑰雙簽→客端驗證支援兩把公鑰→觀察期後撤舊。核心:Key版本控管、信任集合、到期計畫、Fallback策略。可從內嵌到CA平滑過渡。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q7, B-Q7, C-Q9, D-Q10

Q12: 授權碼的序列化與簽章封裝機制?

  • A簡: 以穩定格式序列化,再簽章與封裝簽章值與憑證鏈,確保跨平台驗證。
  • A詳: 原理:避免因格式差異導致驗章失敗。步驟:排序欄位、固定編碼(UTF-8)、無多餘空白→雜湊→簽章→封裝(原文、簽章、演算法、憑證鏈)。核心:規範化序列化器、演算法識別(alg)、版本欄位。保證可重現的驗證結果。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q1, C-Q4, D-Q1, D-Q9

Q13: 離線驗證的安全機制與限制?

  • A簡: 以內嵌公鑰與嚴格簽章驗證達成離線啟用,但無法即時撤銷與控管。
  • A詳: 原理:本地信任錨與驗章即可決策。步驟:內嵌鍵/指紋→本地驗章→套政策。限制:無法即時撤銷、偵測濫用或黑名單。緩解:縮短有效期、定期心跳、更新包強制驗證、公鑰輪替機制。核心:策略平衡與風險接受度。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, B-Q9, C-Q10, D-Q8

Q14: 強制更新與授權驗證的技術架構?

  • A簡: 更新流程前置授權驗證,無有效公鑰或授權則中止安裝與回報。
  • A詳: 原理:把授權驗證納入更新信任鏈。步驟:更新包簽章→客端驗章與授權檢核→不符即拒裝並回報。核心:更新器、授權服務、簽章校驗、日誌與告警。可逼出掉包環境並降低長期未回報風險。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q9, C-Q10, D-Q1, D-Q2

Q15: 攻擊模型:內部人員與外部攻擊者差異?

  • A簡: 內部人熟流程可掉包與濫權;外部者多攻供應鏈與傳輸面,防禦各異。
  • A詳: 內部:知悉細節,可能掉包公鑰、誤用簽章服務、擅產授權。外部:竄改更新、MITM、逆向禁用驗證。防禦:職責分離、HSM與審計、簽章服務隔離、Pinning、CA信任鏈、完整性檢查與反逆向。多層控管降低風險。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q6, B-Q5, C-Q6, D-Q5

Q&A 類別 C: 實作應用類

Q1: 如何在.NET產生RSA金鑰並安全保存?

  • A簡: 使用RSA.Create產生金鑰,私鑰存入Windows憑證庫或KSP,禁止匯出並限權。
  • A詳: 步驟:1) RSA.Create(2048) 2) 產生憑證/匯入KSP 3) 設定KeyStorageFlags與ACL僅允許服務帳號存取。程式碼: using var rsa=RSA.Create(2048); var priv=rsa.ExportRSAPrivateKey(); //避免,改存KSP 注意:優先用X509Store與RSACng/KSP,不匯出私鑰;在伺服器上啟用審計、定期備援與輪替計畫。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q2, B-Q8, D-Q5, C-Q3

Q2: 如何在C#內嵌公開金鑰並驗證簽章?

  • A簡: 以常數嵌入公鑰或SPKI指紋,用RSAPKCS1/ECDsa驗證授權碼簽章。
  • A詳: 步驟:1) 將公鑰PEM或SHA-256指紋嵌入程式 2) 載入授權原文與簽章 3) 使用RSA/ECDsa.VerifyData驗證。程式碼: var pub=RSA.Create(); pub.ImportFromPem(pubPem); bool ok=pub.VerifyData(data,sig,HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1); 注意:支援多把Key以利輪替;避免從可被改動的設定檔讀公鑰;加入偵測失敗的告警。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, B-Q1, B-Q7, C-Q9

Q3: 如何使用Windows憑證存放區與RSACng載入金鑰?

  • A簡: 將私鑰裝入機器存放區的X509憑證,使用RSACng/RSACertificateExtensions存取。
  • A詳: 步驟:1) 匯入憑證至LocalMachine\My,含不可匯出私鑰 2) 以X509Store尋找憑證 3) 使用cert.GetRSAPrivateKey()/GetRSAPublicKey()。程式碼: using var store=new X509Store(StoreName.My,StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var cert=store.Certificates.Find(…)[0]; using var rsa=cert.GetRSAPrivateKey(); 注意:限制權限帳號、啟用審計、備援;避免將PFX與密碼留在原始碼。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, B-Q8, D-Q3, D-Q5

Q4: 如何建立授權碼產生器CLI(.NET)?

  • A簡: 建立CLI接收參數,序列化授權資料,使用私鑰簽章並輸出JSON+簽章。
  • A詳: 步驟:1) dotnet new console 2) 定義授權DTO 3) 序列化為排序JSON 4) 從憑證庫取私鑰 5) 簽章並輸出檔。程式碼: var json=JsonSerializer.Serialize(dto,opt); var sig=rsa.SignData(Encoding.UTF8.GetBytes(json),HashAlgorithmName.SHA256,RSASignaturePadding.Pkcs1); 注意:輸入驗證、審計日誌、版本欄位、KeyId與演算法標識;禁用私鑰匯出。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q3, B-Q12, D-Q1, C-Q1

Q5: 如何導入CA發出的憑證進行授權驗證?

  • A簡: 以X509Chain驗憑證鏈與撤銷狀態,再取公鑰驗章授權原文。
  • A詳: 步驟:1) 從授權包取出簽發者憑證 2) 建立X509Chain,設定鏈建構與OCSP/CRL 3) 驗簽章與用途EKU 4) 驗授權條件。程式碼: var chain=new X509Chain{ChainPolicy={RevocationMode=Online}}; bool ok=chain.Build(cert); 注意:處理離線快取與失敗政策;固定期望發行者;記錄鏈與錯誤便於診斷。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q8, B-Q6, B-Q10, D-Q3

Q6: 如何在.NET實作憑證固定(Pinning)?

  • A簡: 內嵌期望的公鑰指紋,驗證連線或授權前比對SPKI或整張憑證。
  • A詳: 步驟:1) 計算與內嵌SHA-256 SPKI指紋 2) 建立HttpClientHandler.ServerCertificateCustomValidationCallback比對 3) 對授權驗章亦比對指紋。程式碼: handler.ServerCertificateCustomValidationCallback=(m,cert,chain,err)=> Hash(cert)==expected; 注意:配置多把指紋支援輪替;落地告警;避免只比對CN而忽略指紋。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q7, B-Q11, D-Q2, C-Q2

Q7: 如何實作「連回原廠」的心跳驗證?

  • A簡: 設計心跳API,客端送裝置指紋+授權摘要,伺服器回租期與黑名單結果。
  • A詳: 步驟:1) 定義/heartbeat API(TLS+Pinning)2) 客端定期POST裝置信息(匿名化)與授權Hash 3) 伺服端驗章、偵測異常 4) 回傳租約與操作(禁用/警示)5) 客端緩存與退避重試。注意:隱私合規、失敗寬限、離線策略、API金鑰管理與速率限制。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q9, A-Q12, D-Q8, C-Q10

Q8: 如何佈署企業內部CA(AD CS)以支援授權?

  • A簡: 以AD CS架設根與發行CA,發布憑證模板,客端信任內部根CA進行驗證。
  • A詳: 步驟:1) 建離線根CA、線上發行CA 2) 發布CRL/OCSP 3) 建立代碼簽章/文件簽章模板 4) 以GPO散佈根憑證 5) 監控撤銷與更新。注意:根CA隔離與備援、權限分離、審計;對外場景仍建議公用CA或雙軌策略。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q14, B-Q6, B-Q10, D-Q3

Q9: 如何實作金鑰輪替與雙簽過渡?

  • A簡: 同時發布新舊公鑰,授權以雙簽輸出,客端允許兩把鑰一段時間。
  • A詳: 步驟:1) 新Key生成並發布到客端(更新內嵌或憑證)2) 產生器同時用舊/新私鑰簽章 3) 客端驗章允許任一通過 4) 觀察後移除舊Key 5) 完成後僅用新Key。注意:明確KeyId與到期、監測舊Key使用率、預留回退管道。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q11, C-Q2, D-Q10, A-Q9

Q10: 如何實作「需有效授權才允許更新」機制?

  • A簡: 在更新器加入授權驗證前置檢查,失敗則拒裝並提示回原廠檢測。
  • A詳: 步驟:1) 更新包與更新器皆簽章 2) 啟動時先驗授權簽章與期限 3) 無效則中止並引導心跳驗證 4) 記錄與回報異常 5) 透過策略控制寬限。注意:避免誤傷合法客戶(時鐘/網路問題)、提供離線臨時碼、確保更新器自動更新能力。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q14, B-Q13, D-Q1, D-Q2

Q&A 類別 D: 問題解決類

Q1: 驗證簽章失敗怎麼辦?

  • A簡: 檢查序列化一致性、雜湊與演算法、金鑰來源與資料是否被改動。
  • A詳: 症狀:VerifyData回傳false。原因:原文被改、編碼差異、使用錯誤演算法/填充、金鑰不匹配。解法:確保規範化序列化(排序/編碼)、確認Hash與Padding、比對KeyId與憑證鏈、重取原始授權。預防:固定序列化規則、加版本欄位、內建公鑰或CA驗證。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q1, B-Q12, C-Q2, C-Q4

Q2: 如何檢測公開金鑰被掉包並處理?

  • A簡: 以釘選與雙通道比對、連回原廠校驗、檢視憑證鏈與發行者異常。
  • A詳: 症狀:本地驗章通過但原廠校驗失敗、發行者指紋不符。原因:協力商替換公鑰、更新通道被竄改。解法:比對內嵌指紋、向原廠API取期望指紋、稽核部署來源;重建正確公鑰並封鎖異常端。預防:憑證固定、多把Key輪替、更新前置授權驗證。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q6, B-Q5, B-Q7, C-Q6

Q3: 憑證鏈不受信任錯誤如何排查?

  • A簡: 檢查根憑證是否信任、鏈是否完整、用途與有效期、撤銷狀態與策略。
  • A詳: 症狀:X509Chain.Build失敗,錯誤UntrustedRoot/PartialChain。原因:缺中繼憑證、根未安裝、用途不符、過期。解法:安裝正確根/中繼、確認EKU、校時、線上取CRL/OCSP。預防:在安裝包內捆綁中繼、用GPO散佈根、監控到期。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q6, B-Q10, C-Q5, C-Q8

Q4: 無法連到CRL/OCSP導致驗證失敗怎麼處理?

  • A簡: 設定撤銷查詢快取與逾時策略,離線時採Soft-fail並記錄與重試。
  • A詳: 症狀:鏈驗證因撤銷查詢逾時失敗。原因:防火牆阻擋、端點故障、離線環境。解法:調整ChainPolicy,啟用快取,允許短期Soft-fail;提供離線CRL。預防:部署前測試連通、運維監控OCSP/CRL、在關鍵節點鏡像端點。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q10, A-Q13, C-Q5, D-Q8

Q5: 私鑰外洩的事故該如何應對與預防?

  • A簡: 立刻撤銷並輪替金鑰,通報客戶更新公鑰/憑證,強化硬體與流程控管。
  • A詳: 症狀:出現未知有效授權或私鑰外流證據。原因:主機入侵、操作失誤、匯出私鑰。解法:停用舊Key、發布新Key與雙簽過渡、撤銷憑證、通報與更新客戶端、調查源頭。預防:HSM/TPM、不匯出私鑰、職責分離、審計與定期演練。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: A-Q4, B-Q8, B-Q11, C-Q9

Q6: 大量驗證效能不佳的原因與優化?

  • A簡: 雜湊/驗章成本、憑證鏈與撤銷查詢開銷,需快取、批次與非同步化。
  • A詳: 症狀:高併發驗證延遲高。原因:RSA驗章昂貴、鏈建構重覆、OCSP延遲。解法:快取鏈與撤銷狀態、批次驗證、改用ECC、硬體加速、非同步與連線池。預防:壓測容量規劃、指標監控、合理有效期與重驗間隔。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q1, B-Q10, C-Q5, C-Q7

Q7: 時間相關問題導致誤判過期怎麼辦?

  • A簡: 校時與時區一致、使用UTC記錄、加入寬限與伺服器校驗授權期間。
  • A詳: 症狀:合法授權被判過期。原因:系統時鐘不準、時區錯誤、夏令時。解法:強制NTP校時、使用UTC、在心跳時回校有效期、加入合理寬限。預防:安裝流程檢查時鐘、監控偏差、在授權包含簽發與到期UTC時間。
  • 難度: 初級
  • 學習階段: 基礎
  • 關聯概念: B-Q9, C-Q7, C-Q10, A-Q12

Q8: 離線環境無法與CA或原廠驗證怎麼處理?

  • A簡: 採內嵌公鑰離線驗章,配短期授權與定期人工或批次同步憑證。
  • A詳: 症狀:無法完成鏈驗或心跳。原因:無網路或隔離網段。解法:切換離線策略:內嵌Key、縮短有效期、提供離線CRL快取、人工更新包;必要時建立內部CA。預防:設計雙模式、明確SLA、週期性維護視窗進行同步。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: A-Q7, A-Q13, B-Q13, C-Q8

Q9: 如何診斷授權碼被竄改?

  • A簡: 驗章失敗、原文與摘要不符、簽章欄位異常,對照發行端審計記錄。
  • A詳: 症狀:單一或多客戶授權突然失效。原因:傳輸或儲存遭改、惡意篡改。解法:重新取得原始授權、比對欄位與雜湊、核對發行端審計、檢查序列化一致性。預防:完整性保護(簽章/封裝)、只讀儲存、更新路徑簽章驗證。
  • 難度: 中級
  • 學習階段: 核心
  • 關聯概念: B-Q12, C-Q4, D-Q1, A-Q15

Q10: 從內嵌公鑰遷移到CA模式常見問題?

  • A簡: 鍵輪替與相容、鏈與撤銷查詢失敗、部署根憑證與中繼缺漏。
  • A詳: 症狀:更新後客端驗證失敗或不穩。原因:舊版不支援鏈、缺中繼、OCSP阻擋。解法:先發新版支援雙模式與雙簽、打包中繼、配置撤銷策略與快取、分批釋出。預防:灰度發布、指紋釘選多把Key、清晰回退機制。
  • 難度: 高級
  • 學習階段: 進階
  • 關聯概念: B-Q11, B-Q6, C-Q5, C-Q9

學習路徑索引

  • 初學者:建議先學習哪 15 題
    • A-Q1: 什麼是「授權碼」?
    • A-Q2: 什麼是數位簽章?與授權碼有何關係?
    • A-Q3: 什麼是「公開金鑰/私密金鑰」金鑰對?
    • A-Q4: 為什麼需要妥善保護私鑰?
    • A-Q5: 公開金鑰在驗證中的角色是什麼?
    • A-Q11: 為何「安全取決於金鑰管理,而非程式碼」?
    • B-Q1: 授權碼的數位簽章驗證如何運作?
    • B-Q4: 客戶端授權驗證流程是什麼?
    • A-Q6: 什麼是「公開金鑰掉包」風險?
    • A-Q7: 為何要將公開金鑰預先內建於系統?
    • A-Q8: 什麼是CA(憑證機構)?為何透過CA發行公鑰?
    • A-Q9: 內嵌公鑰、使用CA、強制連回原廠三者差異?
    • C-Q2: 如何在C#內嵌公開金鑰並驗證簽章?
    • C-Q4: 如何建立授權碼產生器CLI(.NET)?
    • D-Q1: 驗證簽章失敗怎麼辦?
  • 中級者:建議學習哪 20 題
    • B-Q2: 金鑰生成與長度選擇的原理與流程?
    • B-Q3: 授權碼產生器的執行流程如何設計?
    • B-Q6: CA信任鏈與驗證機制如何運作?
    • B-Q7: 憑證固定(Pinning)技術如何運作?
    • B-Q10: 憑證撤銷(CRL/OCSP)驗證機制?
    • B-Q12: 授權碼序列化與簽章封裝機制?
    • B-Q13: 離線驗證的安全機制與限制?
    • C-Q1: 如何在.NET產生RSA金鑰並安全保存?
    • C-Q3: 如何使用Windows憑證存放區與RSACng載入金鑰?
    • C-Q5: 如何導入CA發出的憑證進行授權驗證?
    • C-Q6: 如何在.NET實作憑證固定(Pinning)?
    • C-Q7: 如何實作「連回原廠」的心跳驗證?
    • C-Q10: 如何實作「需有效授權才允許更新」機制?
    • D-Q2: 如何檢測公開金鑰被掉包並處理?
    • D-Q3: 憑證鏈不受信任錯誤如何排查?
    • D-Q4: 無法連到CRL/OCSP導致驗證失敗怎麼處理?
    • D-Q6: 大量驗證效能不佳的原因與優化?
    • D-Q7: 時間相關問題導致誤判過期怎麼辦?
    • A-Q12: 什麼是KMS?與授權驗證有何啟示?
    • A-Q13: 憑證包含哪些資訊?與金鑰有何關聯?
  • 高級者:建議關注哪 15 題
    • B-Q5: 公開金鑰掉包攻擊的機制與路徑?
    • B-Q8: TPM/硬體金鑰保護機制原理?
    • B-Q9: 「連回原廠」驗證的架構與流程?
    • B-Q11: 金鑰輪替的設計原理?
    • B-Q14: 強制更新與授權驗證的技術架構?
    • B-Q15: 攻擊模型:內部人員與外部攻擊者差異?
    • C-Q8: 如何佈署企業內部CA(AD CS)以支援授權?
    • C-Q9: 如何實作金鑰輪替與雙簽過渡?
    • D-Q5: 私鑰外洩的事故該如何應對與預防?
    • D-Q8: 離線環境無法與CA或原廠驗證怎麼處理?
    • D-Q9: 如何診斷授權碼被竄改?
    • D-Q10: 從內嵌公鑰遷移到CA模式常見問題?
    • A-Q14: 何時自建CA,何時採用公用CA?
    • A-Q9: 內嵌公鑰、使用CA、強制連回原廠三者有何差異?
    • A-Q15: 數位簽章在授權管理的核心價值是什麼?





Facebook Pages

AI Synthesis Contents

Edit Post (Pull Request)

Post Directory