AI 金融系統如何確保「不可否認性」?
某銀行計劃將 AI 詐欺偵測模組整合至核心交易系統,主管機關要求全流程必須符合金融監管對「不可否認性(Non-repudiation)」的資訊安全規範,以確保日後能進行法務追蹤與稽核。下列哪一項措施最能確保此要求的落實?
一家銀行要把「AI 詐欺偵測」接進核心交易系統。金融主管機關要求:必須符合「不可否認性(Non-repudiation)」的資訊安全規範,也就是說,每一筆 AI 判斷必須有據可查,未來可以追蹤、可以稽核,沒有人可以事後說「那筆判斷不是我做的」或「結果被改過了」。
問你:哪一項措施最能確保「不可否認性」的落實?
一句話總結
要落實「不可否認性(Non-repudiation)」:為每筆 AI 推論的輸入和輸出計算加密雜湊值(Hash),再加上數位簽章,讓這筆記錄事後任何人都無法否認它發生過、也無法竄改它。這是資訊安全的法律可追蹤性要求,跟系統效能或備援無關。
先感受問題:一筆詐欺判斷引發的法律糾紛
假設「富嶼銀行」的 AI 詐欺偵測系統在某一天,把客戶王先生的一筆 50 萬元轉帳判斷為「疑似詐欺」並自動攔截。
王先生事後提出申訴,說這筆轉帳是合法的,他損失了商機。
銀行的法務部門要查:
「AI 輸出的判斷是什麼?(詐欺機率幾%?閾值是多少?)」
「這個結果是當時真實跑出來的,還是後來有人改過的?」
「是哪一版本的模型做的判斷?」
如果沒有「不可否認性」機制,銀行的工程師可以說「我沒改過」,也可以說「那個輸入不是這樣的」,甚至有人在事後偷偷改了 log,法務追蹤就成了各說各話。
「不可否認性」就是要讓每一筆 AI 判斷都有「鐵一樣的證據」:發生了就是發生了,誰都不能否認。
單純記 log 為什麼不夠
很多系統只是把推論結果寫進 log 檔案,這有五個漏洞:
- log 可以被改:有資料庫寫入權限的人,可以事後修改 log,讓輸入或輸出看起來不同。沒有數位簽章,根本無法證明記錄沒被動過。
- log 可以被刪:伺服器磁碟清理、備份策略,都可能讓特定時段的 log 消失。沒有不可竄改的儲存,記錄可以被選擇性刪除。
- 無法證明「是哪一版模型」:只記結果,沒記模型版本和參數 hash,事後無法重現或驗證「當時的判斷邏輯」。
- 無法識別「誰」做了這個判斷:log 沒有數位簽章,無法確認這個推論記錄確實是由官方系統產生的,而不是有人捏造的。
- 不符合金融法規要求:金管會對金融機構的稽核要求,不只是「有記錄」,而是「記錄可信且不可否認」,普通 log 不達標。
加密雜湊 + 數位簽章,怎麼解
回到富嶼銀行。導入不可否認性機制後:
每次 AI 推論發生時:
輸出:{詐欺機率: 0.89, 動作: BLOCK, 模型版本: v2.3.1}
1. 計算加密雜湊值(Hash):把輸入和輸出合在一起,算出一個固定長度的「指紋」(例如 SHA-256)。任何一個字元被改動,指紋就會完全不同。
2. 用銀行的私鑰對這個指紋做數位簽章(Digital Signature):只有銀行持有這把私鑰,所以只有銀行的官方系統能產生這個簽章。
3. 把 {輸入、輸出、雜湊值、簽章} 一起存進不可竄改的稽核日誌(例如區塊鏈或 WORM 儲存)。
未來法務追蹤時,只需要用銀行的公鑰驗證簽章,就能確認:這筆記錄是真實的、沒有被修改、確實由官方系統產生。王先生和銀行都沒辦法否認這個記錄。
這就是選項 A 講的:為每筆 AI 模型推論記錄其輸入與輸出結果的加密雜湊值(Hash),並簽署數位簽章以確保不可竄改性。
技術版:Hash 與數位簽章的實際運作
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
import hashlib
import json
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from datetime import datetime
# 模擬一次 AI 推論記錄
inference_record = {
"timestamp": datetime.utcnow().isoformat() + "Z",
"model_version": "fraud_detector_v2.3.1",
"input": {
"account_id": "A123456",
"amount": 500000,
"recipient": "B789012",
"location": "台北"
},
"output": {
"fraud_probability": 0.89,
"action": "BLOCK",
"threshold": 0.80
}
}
# Step 1: 計算 SHA-256 雜湊值
record_bytes = json.dumps(inference_record, sort_keys=True).encode()
record_hash = hashlib.sha256(record_bytes).hexdigest()
print(f"SHA-256 Hash: {record_hash}")
# Step 2: 用私鑰簽章(實務上私鑰由 HSM 保管)
# private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
# signature = private_key.sign(record_bytes, padding.PKCS1v15(), hashes.SHA256())
# Step 3: 驗證(任何人用公鑰都可以驗)
# public_key.verify(signature, record_bytes, padding.PKCS1v15(), hashes.SHA256())
# 驗證通過 = 記錄未被竄改,且確實由持有私鑰的系統產生
- AI 推論完成後,把「輸入 + 輸出」視為一份文件
- 計算這份文件的「指紋」(SHA-256 Hash),任何改動都會讓指紋完全不同
- 用銀行的「私章」(私鑰)在指紋上蓋章(數位簽章)
- 把文件、指紋、章一起封存,任何人都能用銀行的「公章」(公鑰)驗真偽
| 故事 | 程式碼 |
|---|---|
| 把輸入輸出序列化成 bytes | json.dumps(record, sort_keys=True).encode() |
| 計算 SHA-256 指紋 | hashlib.sha256(bytes).hexdigest() |
| 用私鑰簽章 | private_key.sign(bytes, padding, hashes.SHA256()) |
| 用公鑰驗章 | public_key.verify(signature, bytes, ...) |
- SHA-256(Secure Hash Algorithm 256-bit)
- 把任意長度的資料轉成固定 256 位元(64 個十六進位字元)的「指紋」。同樣的輸入永遠得到同樣的輸出;改動哪怕一個 bit,輸出就完全不同。
- Private Key(私鑰)
- 只有系統持有的秘密。用私鑰簽章,就相當於「這是我(官方系統)做的,我簽名擔保」。
- Public Key(公鑰)
- 可以公開給所有人。用公鑰驗簽,任何人都能確認「這個簽章確實是持有對應私鑰的系統做的」。
- Non-repudiation(不可否認性)
- 資訊安全 CIA 三要素之外的第四個特性。確保動作發生後,行為者無法否認它曾發生。簽章是技術實現手段。
數位簽章的基本數學原理(RSA 簡化版):
# 簽章:用私鑰對 hash 做運算
Signature = hash(message) ^ d mod N
# d = 私鑰,N = 模數
# 驗章:用公鑰反向驗算
Verified_hash = Signature ^ e mod N
# e = 公鑰指數,N = 模數
# 如果 Verified_hash == hash(message),簽章有效
中級考試不需要算這個,但理解「私鑰簽、公鑰驗」的非對稱結構就夠了。
蓋住程式碼,說出不可否認性的 4 個步驟:
- 把推論的輸入和輸出合在一起
- 計算 SHA-256 雜湊值(指紋)
- 用系統私鑰對指紋做數位簽章
- 把原始記錄 + 指紋 + 簽章封存,用公鑰可驗真偽
為什麼其他選項是錯的
B優化模型效能以降低平均推論延遲至 100ms 以下,提升使用者體驗
讓 AI 模型推論更快,每次判斷在 0.1 秒以內完成,讓交易不會卡太久。
這是「效能優化」(Performance Optimization),跟「不可否認性」完全是兩個維度的需求。推論快 1 秒還是 0.1 秒,都不影響這筆記錄能不能被事後稽核、能不能防止竄改。好比說:把一份文件打字速度從 1 分鐘縮短到 10 秒,並不代表這份文件的法律效力提升了。
看到「AI 系統」就聯想到「效能」的考生,誤以為所有問題都可以用效能優化解決。記住:不可否認性是「法律可追蹤性」問題,屬於資訊安全領域,跟速度無關。
C增加主機備援數量,以確保系統在故障時持續可用
多買幾台伺服器,一台壞了另一台頂上,讓系統不會因為單台故障而中斷服務。
這是「高可用性」(High Availability)和「容錯」(Fault Tolerance)的做法,對應的是 CIA 三要素中的「可用性(Availability)」,不是「不可否認性」。備援機器再多,也不能防止有人事後篡改推論記錄,或者否認某筆判斷的存在。
把「資訊安全規範」理解成「系統要穩定不能斷線」的考生。金融監管對不可否認性的要求不是「系統要持續運作」,而是「每一筆交易記錄要有法律效力且不可竄改」。
D將模型推論請求導入負載平衡器,避免單點壅塞導致服務延遲
在 AI 推論服務前面加一個負載平衡器(Load Balancer),把大量請求分散到多台伺服器,避免一台被打爆。
負載平衡是系統架構的「效能和可用性」設計,解決的是「請求量太大時怎麼不崩潰」的問題,跟不可否認性沒有任何關係。就算請求被平均分配到 100 台伺服器,如果每台伺服器的推論記錄都沒有雜湊和簽章,稽核時還是無法證明記錄沒被竄改。
有系統架構背景的考生,看到「AI 整合至核心交易系統」就想到「高流量、要做負載平衡」,誤解了題目的資訊安全需求方向。題目的核心詞是「不可否認性」和「法務追蹤與稽核」,這兩個都指向密碼學機制,不是架構擴展能力。
同個考點下次怎麼變形
如果只做 Hash 但不做數位簽章,不可否認性還成立嗎?
Hash 本身不是已經能驗證記錄沒被改了嗎?
不夠。如果有人修改了推論記錄,可以同時重新計算 Hash,讓新 Hash 和修改後的記錄一致,看起來就像沒改過。數位簽章的作用是:只有持有私鑰的人才能產生有效簽章,所以如果記錄被改、Hash 被重新算,新 Hash 無法通過原始私鑰簽章的驗證,竄改就會被偵測到。Hash + 簽章才是完整的不可否認性方案,只有 Hash 不行。
如果私鑰洩漏,不可否認性會失效嗎?
私鑰洩漏了,不就有人可以偽造簽章了?
是的,這是非對稱加密體系最大的風險。解決方法:1. 用硬體安全模組(Hardware Security Module,HSM)保管私鑰,私鑰永遠不離開硬體;2. 定期輪換金鑰對(Key Rotation);3. 建立金鑰撤銷機制(Certificate Revocation),一旦私鑰洩漏立即讓舊簽章失效並通知稽核方。私鑰管理是密碼系統的命脈。
區塊鏈(Blockchain)能不能替代數位簽章做不可否認性?
區塊鏈也是不可竄改的,應該也能達到不可否認性?
可以,而且兩者常常結合使用。區塊鏈的特性是:寫進去的資料所有節點都有副本,要改就要同時改多數節點,實際上不可能。但區塊鏈本身不提供「是誰寫的」的認證,要加上數位簽章才能確認「是哪個系統寫的」。在金融稽核場景裡,把 {推論記錄、Hash、數位簽章} 一起寫進許可鏈(Permissioned Blockchain,例如 Hyperledger Fabric)是業界正在探索的完整方案。
醫療 AI(例如 AI 輔助診斷)也需要不可否認性嗎?
金融是因為有法規要求,醫療也有類似需求嗎?
是的,而且更嚴格。如果 AI 輔助診斷系統建議「這個腫瘤不需要手術」,後來發現判斷錯誤,醫院、AI 廠商、醫師都可能被追究責任。不可否認性機制能回答:「當時 AI 給的建議是什麼、置信度多少、模型版本是哪一個、醫師有沒有看到這個建議」,這對醫療糾紛舉證至關重要。台灣和歐盟的醫療 AI 法規也逐漸往這個方向規範。
怎麼評估一個不可否認性機制是否「真的有效」?
建好了 Hash 和簽章,怎麼確認它真的防得住竄改和否認?
幾個評估維度:1. 滲透測試:模擬攻擊者嘗試竄改記錄後,驗證機制能否偵測;2. 稽核演練(Audit Drill):模擬法務追蹤場景,實際走完「發現問題 → 取出記錄 → 驗章 → 重現推論」的完整流程,確認可操作性;3. 合規認證:由第三方稽核機構(例如 ISO 27001 審核員)檢查機制是否符合法規;4. 可驗證率:抽樣過去記錄,確認 100% 的簽章都能通過公鑰驗證。
想再往下看,這 5 個
- 詐欺偵測(Fraud Detection)本題銀行 AI 模組的應用場景,金融詐欺偵測因涉及法律追訴,對推論記錄的不可否認性要求特別嚴格。
- 可解釋人工智慧(Explainable AI)AI 決策需要可以向監管機關解釋和稽核,不可否認性確保記錄無法竄改,可解釋性確保決策邏輯可被理解,兩者共同構成金融 AI 合規基礎。
- 資料血緣追蹤(Data Lineage)記錄資料從來源到推論輸出的完整流向,與稽核軌跡結合,確保每筆 AI 判斷的輸入資料來源都可追溯。
- AI治理(AI Governance)金融監管對不可否認性的要求屬於 AI 治理框架的一部分,涵蓋資料治理、模型問責、稽核機制等系統性合規要求。
- 模型監控(Model Monitoring)本題選項 B、C、D 的推論延遲優化、備援和負載平衡屬於模型監控與可用性範疇,與不可否認性是不同的合規維度。