今天的重點是把前面學到的對稱加密 (AES / Fernet),套用在一個「醫療JSON資料」的實際案例中。
一、理論重點
醫療資料通常以 JSON / XML 傳輸(FHIR 標準也是基於 JSON)。
如果沒有加密,傳輸過程中一旦被攔截,就可能造成敏感資訊外洩。
速度快 → 適合大量病歷資料。
單一金鑰 → 加密與解密使用同一把金鑰。
面臨的挑戰:金鑰必須安全保護,否則就失去安全性。
二、案例分享
2020 年杜塞道夫大學醫院勒索病毒事件
德國杜塞道夫大學醫院因勒索病毒攻擊導致主要系統停擺,醫療數據無法即時存取。由於沒有快速的資料備份與災難復原計畫,院方花費數週才逐步恢復系統。這段期間,部分急診患者需要轉院,甚至傳出因延誤而造成死亡的爭議。
後續調查顯示,該院的備份策略存在問題:
備份資料與主要系統存放在同一網路環境,被病毒同時加密。
缺乏異地備援,導致資料還原困難。
災難復原演練不足,緊急應對延遲。
而應對這些問題的方法為
備份需多層策略:本地備份 + 雲端備份 + 異地實體備份。
定期演練:光有備份不夠,需要定期進行復原測試,確保災難發生時可用。
最小化影響:確保備份與復原過程不影響日常醫療服務。
三、簡單程式示範
以下示範將一筆病人 JSON 資料用 AES (Fernet) 加密 / 解密:
import json
from cryptography.fernet import Fernet
# 產生 AES 金鑰
key = Fernet.generate_key()
cipher = Fernet(key)
# 模擬病人 JSON 醫療資料
patient_record = {
"patient_id": "P001",
"name": "王小明",
"age": 45,
"diagnosis": "高血壓",
"medications": ["Amlodipine", "Aspirin"]
}
# 轉成 JSON 字串
record_json = json.dumps(patient_record, ensure_ascii=False)
# 加密
encrypted_data = cipher.encrypt(record_json.encode())
print("加密後資料:", encrypted_data)
# 解密
decrypted_data = cipher.decrypt(encrypted_data).decode()
print("解密後資料:", decrypted_data)
# 將解密後字串轉回 JSON
decrypted_record = json.loads(decrypted_data)
print("病人姓名:", decrypted_record["name"])
print("診斷:", decrypted_record["diagnosis"])
程式運作流程:建立病人 JSON 資料(含姓名、病歷、藥物)-> 用 AES (Fernet) 金鑰加密成亂碼,模擬傳輸過程 -> 醫師或授權人員用金鑰解密後,還原成 JSON,正常讀取資料。執行結果如下圖
四、醫療場景案例
病患透過 IoT 醫療裝置(血壓計 / 血糖機)上傳測量結果 → 系統自動加密 JSON。
醫師登入系統 → 使用金鑰解密,查看完整病歷。
避免駭客攔截後能直接讀取病人隱私。