iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Security

醫療數據的資安挑戰與創新解決方案系列 第 5

AES 加密 / 解密 JSON 醫療資料(Python 實作)

  • 分享至 

  • xImage
  •  

今天的重點是把前面學到的對稱加密 (AES / Fernet),套用在一個「醫療JSON資料」的實際案例中。

一、理論重點

  1. 為什麼要加密 JSON?
  • 醫療資料通常以 JSON / XML 傳輸(FHIR 標準也是基於 JSON)。

  • 如果沒有加密,傳輸過程中一旦被攔截,就可能造成敏感資訊外洩。

  1. AES 對稱加密特色
  • 速度快 → 適合大量病歷資料。

  • 單一金鑰 → 加密與解密使用同一把金鑰。

  • 面臨的挑戰:金鑰必須安全保護,否則就失去安全性。

二、案例分享

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,正常讀取資料。執行結果如下圖https://ithelp.ithome.com.tw/upload/images/20250912/20169331umOG8smMi1.png

四、醫療場景案例

  • 病患透過 IoT 醫療裝置(血壓計 / 血糖機)上傳測量結果 → 系統自動加密 JSON。

  • 醫師登入系統 → 使用金鑰解密,查看完整病歷。

  • 避免駭客攔截後能直接讀取病人隱私。


上一篇
存取控制與身分驗證機制
下一篇
醫療物聯網(IoMT)資安挑戰與防護
系列文
醫療數據的資安挑戰與創新解決方案6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言