首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

保護 J2ME/MIDP 應用:XML 數位簽名與 Bouncy Castle 實戰

     編輯:J2ME

無線 Web 服務安全挑戰

無線通訊易遭攔截,設備算力弱難支撐強加密;Web 服務跑在防火牆外用開放協議。傳統點對點加密 (SSL/TLS) 不適合多中繼拓撲,**必須保護內容本身而非連線**。XML 數位簽名 (W3C 標準) 成為端對端資料完整性的最佳選擇。

安全通訊四大要素

  • 認證:數位憑證驗證雙方身分。
  • 資料完整性:數位簽名防篡改(核心)。
  • 機密性:需額外加密(簽名不提供)。
  • 不可抵賴:私鑰簽名不可偽造。

XML 數位簽名封裝格式

將 Signature、DigestValue、KeyInfo 等安全元素與原始 XML 封裝成單一文件,採用 Enveloping Signature 格式,便於傳輸與驗證。

MIDP 端處理需求

  1. XML 讀寫:kXML 等輕量解析器。
  2. 簽名/驗證:需密碼 API,MIDP 1.0 無內建,須引入第三方庫。

Bouncy Castle Crypto API:唯一選擇

開源、輕量、支援 J2SE/J2ME/MIDP,提供 DSA、ECDSA、RSA 等演算法。缺點:文檔極少,需閱讀原始碼/測試案例上手。

完整流程:密鑰生成 → 簽名 → 驗證

  1. 伺服端產生金鑰對(離線完成,存於 KeyStore)。
  2. 計算訊息摘要 (SHA-1)。
  3. 私鑰簽名摘要 → 數位簽名。
  4. 將摘要、簽名、公鑰參數嵌入 XML 回應。
  5. 客戶端解析 XML 取出三要素。
  6. 客戶端重算摘要比對,若不符直接拒絕(防洪攻擊)。
  7. 重構公鑰,驗證簽名。

三種演算法代碼範例與效能對比

DSA

1024-bit 金鑰,DSASigner,名由 R, S 組成。驗證耗時 1+ 小時 (Palm VII),不可用。

ECDSA (橢圓曲線)

192-bit 金鑰,ECDSASigner,參數較多 (q,a,b,n,G,Q)。驗證同樣 1+ 小時,不可用。

RSA (PSS 簽名)

1024-bit,PSSSigner + SHA1Digest + RSAEngine。**驗證約 1 分多鐘 (16MHz Palm VII)**,勉強可接受,但必須在背景執行緒執行避免 UI 鎖死。

效能結論與未來展望

  • 純 Java 實作大整數運算極慢,JVM 需優化或利用底層 OS/硬體加速。
  • 現有 MIDP VM 已能以合理效能跑 HTTPS(利用原生協議),未來應將此優化開放給一般密碼操作。
  • 目前僅 RSA 勉強可用,且需弱化金鑰長度換取速度。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved