在使用政府憑證卡(自然人憑證、工商憑證等)或HiPKI憑證卡登入政府網站、簽署電子文件,或企業系統透過智慧卡進行身分驗證時,背後其實是一套複雜的通訊機制。今天就讓我們透過下圖,來理解「應用程式、驅動程式、卡片」之間是如何溝通的。
---
這張圖展示了兩條常見的應用路徑:
雖然最終目的都是與「憑證卡」互動,但溝通方式與封裝層級卻有所不同。
--
一般的桌面應用或系統軟體(例如報稅軟體、簽章工具),會透過 PKCS#11 函式庫 介面與中介軟體(middleware)進行通訊。
PKCS#11 是一種標準化的「加密模組介面規範」,讓應用程式不必關心卡片廠牌與硬體細節,就能操作金鑰與簽章。
中華電信提供免費的函式庫Hisecure,支援C、Java,讓開發者不需要了解PKCS11,就能輕鬆操作憑證卡。它本身也透過 PKCS#11 與底層驅動程式溝通。
這層負責與智慧卡讀卡機溝通,使用 APDU 指令(Application Protocol Data Unit) 傳遞命令,例如讀取憑證、進行簽章、PIN 驗證等。
實際存放私鑰與憑證的晶片卡。所有簽章操作都在卡片內完成,私鑰永遠不會離開卡片,確保安全性。
隨著瀏覽器不支援直接呼叫 PKCS#11 的方式已不可行。是以下這條新路徑
使用者在網頁上執行登入或簽章操作時,JavaScript 程式會透過本地端 API localhost:61161
呼叫服務。
這是由 Hiscure 提供的前端 JS 函式庫,用來與本地服務通訊。
它通常會發送請求到 localhost:61161
,這是 HiPKI Local Server 預設監聽的埠號。
這是一個安裝在使用者電腦上的背景程式,並監聽在 localhost:61161
,負責接收網頁傳來的請求(例如簽章、驗證 PIN),再轉換成 PKCS#11 呼叫與卡片溝通。
它就像是「網頁與憑證卡之間的翻譯官」。
最後依舊透過驅動程式將指令轉換為 APDU,實際在卡片中完成加解密與簽章。
整個架構的核心是**「私鑰永不離卡」**。
即使應用程式或網頁取得簽章結果,也無法直接存取私鑰,這能有效防止惡意程式竊取使用者的身分金鑰。
同時,使用 APDU 指令通訊的卡片需要輸入 PIN 碼才能啟用私鑰,確保操作人為使用者本人。
這家滷肉飯魯的超級入味,雖然有點油,不過口味不錯