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

以 Kerberos 保障 J2ME 應用程式安全:第 3 部分 (下) — 安全通訊上下文建立與加密傳輸

     編輯:Java 相關知識

承接 上半部,本文完成 安全上下文建立、應用層加密訊息收發 並整合完整 行動銀行 MIDlet 範例,實現端到端安全通訊。

建立安全通訊上下文

取得服務票據與子會話金鑰後,客戶端需向業務邏輯伺服器發起 GSS-API InitialContextToken 請求。createKerberosSession() 流程:

  1. 產生「無網路綁定」Checksum:getNoNetworkBindings() 回傳硬編碼「無綁定」結構 (bindingLength=16, bindingContent=16-byte零, contextFlags=0x3E000000),經 getChecksumBytes() 包裝 (cksumtype=0x8003=GSS_C_NO_BINDINGS)。
  2. 呼叫 getAuthenticationHeader() (seqNum > 0) 產生含 subkey/seq-number 的 KRB_AP_REQ (App Tag 14),以子會話金鑰加密 Authenticator。
  3. 前綴 GSS 標頭 OID (1.2.840.113554.1.2.2 = Kerberos V5),整體包裝於 Application Tag 0。
  4. 透過 Socket DataOutputStream 發送 (長度前綴 + Token),接收回應。
  5. 解析回應 Token:檢查 KRB_AP_REP (msg-type=15, Tag 0x02) 確認上下文建立成功,回傳 true。

應用層安全訊息收發

上下文建立後,雙方使用子會話金鑰進行 GSS-Kerberos 安全訊息 (MIC/Wrap) 交換。sendSecureMessage() 產生 Token 格式 (App Tag 0):

[GSS Header][Token Header: 02 01 00 00 00 00 FF FF][Encrypted SeqNum][Encrypted Checksum][Encrypted Message]
  1. 訊息填充至 8-byte 倍數 (getPaddedData)。
  2. 產生 8-byte confounder,前綴於填充訊息。
  3. Token Header + confounder+訊息 → 計算 MD5 (16-byte)。
  4. 以子會話金鑰 DES-CBC (IV=0) 加密 MD5,取最後 8-byte 為 Encrypted Checksum。
  5. SeqNum (4-byte) 以子會話金鑰 + 上一步 IV 加密 → Encrypted SeqNum。
  6. confounder+訊息 以 Context Key (子會話金鑰 XOR 0xF0) DES-CBC (IV=0) 加密 → Encrypted Message。
  7. 串接五段,包裝 App Tag 0,經 Socket 發送並接收回應。

decodeSecureMessage() 反向驗證:分離欄位 → 以 Context Key 解密訊息 → 重算 MD5 → DES-CBC 加密比對 Checksum → 通過則去除 confounder 回傳明文。

完整行動銀行 MIDlet 整合範例

J2MEClientMIDlet 示範完整七階段流程:

  1. 背景執行緒建立 Datagram (KDC) 與 Socket (業務伺服器) 連線。
  2. 用戶輸入帳號、密碼、金額、收款人,按下「Pay」。
  3. TGT 請求/回應 → getTicketAndKey() 取得 TGT + 會話金鑰。
  4. 服務票據請求/回應 → getTicketAndKey() 取得服務票據 + 子會話金鑰。
  5. 建立安全上下文 → createKerberosSession() 回傳 true。
  6. 發送交易指令 → sendSecureMessage() 加密傳輸「Transaction of Amount:... From:... To:...」。
  7. 解碼回應 → decodeSecureMessage() 驗證並顯示結果。

介面包含輸入表單 (Username/Password/Amount/Pay to) 與結果顯示畫面。程式碼已處理 MIDP 2.0 禁止主執行緒開啟網路連線的限制。

部署與擴充說明

  • 原始碼包含 GSS 伺服器端參考實作與 readme.txt 執行指南。
  • KDC 參數 (realm、位址、埠)、業務伺服器參數於 MIDlet 內硬編碼,實際部署應外部化設定。
  • KerberosClient 為純安全框架,應用層協定 (如 XML 交易指令) 可自行設計。

系列總結

三部曲完整呈現:

  1. Kerberos 訊息格式、ASN.1 編碼、交換流程理論基礎。
  2. J2ME 端 ASN.1 建構、密碼轉金鑰、TGT 請求產生實作。
  3. KDC 回應解析、服務票據請求、GSS 安全上下文建立、應用層加密通訊、完整 MIDlet 整合。

證明了在資源受限的 J2ME 裝置上實作完整 Kerberos 客戶端的可行性,為行動金融應用提供工業級安全基礎設施。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved