承接 上半部,本文完成 安全上下文建立、應用層加密訊息收發 並整合完整 行動銀行 MIDlet 範例,實現端到端安全通訊。
取得服務票據與子會話金鑰後,客戶端需向業務邏輯伺服器發起 GSS-API InitialContextToken 請求。createKerberosSession() 流程:
getNoNetworkBindings() 回傳硬編碼「無綁定」結構 (bindingLength=16, bindingContent=16-byte零, contextFlags=0x3E000000),經 getChecksumBytes() 包裝 (cksumtype=0x8003=GSS_C_NO_BINDINGS)。getAuthenticationHeader() (seqNum > 0) 產生含 subkey/seq-number 的 KRB_AP_REQ (App Tag 14),以子會話金鑰加密 Authenticator。DataOutputStream 發送 (長度前綴 + 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]
getPaddedData)。decodeSecureMessage() 反向驗證:分離欄位 → 以 Context Key 解密訊息 → 重算 MD5 → DES-CBC 加密比對 Checksum → 通過則去除 confounder 回傳明文。
J2MEClientMIDlet 示範完整七階段流程:
getTicketAndKey() 取得 TGT + 會話金鑰。getTicketAndKey() 取得服務票據 + 子會話金鑰。createKerberosSession() 回傳 true。sendSecureMessage() 加密傳輸「Transaction of Amount:... From:... To:...」。decodeSecureMessage() 驗證並顯示結果。介面包含輸入表單 (Username/Password/Amount/Pay to) 與結果顯示畫面。程式碼已處理 MIDP 2.0 禁止主執行緒開啟網路連線的限制。
readme.txt 執行指南。KerberosClient 為純安全框架,應用層協定 (如 XML 交易指令) 可自行設計。三部曲完整呈現:
證明了在資源受限的 J2ME 裝置上實作完整 Kerberos 客戶端的可行性,為行動金融應用提供工業級安全基礎設施。