無線通信易遭竊聽,設備算力弱難支撐強加密;Web 服務運行於防火牆外,面臨多中間節點篡改風險。SSL/TLS 僅保護點對點鏈路,**XML 數字簽名 (XML-DSig) 保護訊息內容本身**,實現真正的端到端完整性與不可抵賴性。
| 算法 | 密鑰長度 | 驗證耗時 (Palm VII, 16MHz) | 工程可行性 |
|---|---|---|---|
| RSA | 1024-bit | ~1 分鐘 | **勉強可用**,需後台線程避免 UI 凍結 |
| DSA | 1024-bit | > 1 小時 | 不可接受 |
| ECDSA | 192-bit | > 1 小時 | 不可接受 |
**結論**:MIDP 設備上**僅 RSA 勉強可用**,且必須異步處理。DSA/ECDSA 純 Java 實現大整數運算太慢。未來需 JVM 原生優化或硬件加速支持。
// RSA 示例
SecureRandom sr = new SecureRandom();
RSAKeyGenerationParameters params = new RSAKeyGenerationParameters(
new BigInteger("11", 16), sr, 1024, 80); // 公鑰指數 0x11
RSAKeyPairGenerator gen = new RSAKeyPairGenerator();
gen.init(params);
AsymmetricCipherKeyPair pair = gen.generateKeyPair();
RSAPrivateCrtKeyParameters priv = (RSAPrivateCrtKeyParameters) pair.getPrivate();
RSAKeyParameters pub = (RSAKeyParameters) pair.getPublic();
// 提取參數:Modulus (N), PublicExponent (e)
// 摘要
SHA1Digest dig = new SHA1Digest();
dig.update(msgBytes, 0, msgBytes.length);
byte[] digest = new byte[dig.getDigestSize()];
dig.doFinal(digest, 0);
String digestB64 = Base64.encode(digest);
// 簽名 (PSS 填充)
RSAEngine rsaEng = new RSAEngine();
PSSSigner signer = new PSSSigner(rsaEng, dig, 64); // salt 長度 64
signer.init(true, priv);
byte[] sig = signer.generateSignature(msgBytes);
String sigB64 = Base64.encode(sig);
// 嵌入 XML 響應
Hello World
digestB64
sigB64
modB64
expB64
// 解析 XML (kXML/NanoXML) 取得:digestB64, sigB64, modB64, expB64
// 1. 重新計算明文摘要,比對 digestB64 → 不匹配直接拒絕
// 2. 重構公鑰
BigInteger modulus = new BigInteger(Base64.decode(modB64));
BigInteger exponent = new BigInteger(Base64.decode(expB64));
RSAKeyParameters pubKey = new RSAKeyParameters(false, modulus, exponent);
// 3. 驗證簽名
SHA1Digest dig = new SHA1Digest();
RSAEngine rsaEng = new RSAEngine();
PSSSigner verifier = new PSSSigner(rsaEng, dig, 64);
verifier.init(false, pubKey);
boolean valid = verifier.verifySignature(msgBytes, Base64.decode(sigB64));
參數提取/編碼/驗證流程與 RSA 同構,僅類名與參數集不同。
XML 數字簽名為無線 Web 服務提供了**內容級安全**,Bouncy Castle 使其在 MIDP 上成為可能。儘管當前硬件限制下**僅 RSA 勉強可用**,但隨著 JSR 177、JVM 優化落地,端到端簽名將成為移動商業應用標配。建議架構師提前佈局:抽象 `SignatureService` 接口,底層可熱插拔 RSA/國密/硬件加速實現,業務代碼零修改平滑升級。