486 字
2 分鐘
介紹篇(1–9) HiPKI Local Server 數位簽章 API | 深入淺出自然人憑證
2024-01-01
無標籤

前一篇數位簽章的說明了解後,就可以來實際操作 HiPKI Local Server 的數位簽章 API。


數位簽章 Demo#

內政部提供的 HiPKI Local Server範例PKCS#1 簽章範例PKCS#7 簽章範例RAW 簽章範例。可以先試試看簽章的效果,簽章完後,會產生簽章值。接著來說明 API 的用法。


HiPKI Local Server 簽章功能#

http://localhost:61161/sign 為 HiPKI Local Server 簽章用的 API,輸入原文、PIN、Hash 演算法後,可以輸出簽章值、卡號、公鑰等資訊。


PKCS#1、PKCS#7、RAW 的差別#

上述官方範例提供了三種簽章方式,具體來說差別是什麼?測試下來會發現,PKCS#1 簽章完的內容只包含了用私鑰簽章後的簽章值;而 PKCS#7 加密後的簽章值則可以包含憑證鏈、多個數位簽章、原始資料、時間戳記等。所以同一串 tbs ,PKCS#1 每次簽章完的簽章值結果會相同,但 PKCS#7 包含了時間戳記,每次簽章完的簽章值會不同。

至於驗簽的方式,PKCS#1 需要有公鑰與原文才能進行驗簽,PKCS#7 的簽章值包含了公鑰、憑證鏈、時間、卡號、原文,可以直接用簽章值驗簽。

而 RAW 本身也是用 PKCS#1 進行簽章,不支援 PKCS#7。差別在於不是把「原文、Hash 演算法」丟到 API,而是把「Hash 後的原文」丟到 API。由於自然人憑證運算力不強,若是原文太大,可能無法在卡內進行 Hash 運算。因此先在卡外算好「Hash 後的原文」,再到卡片做 PKCS#1 簽章。如果不希望 HiPKI Local Server 取得原文,也可以透過 RAW 方式處理。同一個原文,在 PKCS#1 與 RAW 算出來的結果簽章值會相同。


結語#

先了解數位簽章 API 的功能,接著來說明如何使用 API。

▶ 閱讀更多:深入淺出自然人憑證