自然人憑證登入
自然人憑證是台灣政府數位身份服務裡非常重要的一塊。
很多人第一次使用它,是在:
- 報稅。
- 申請戶籍謄本。
- 查詢政府資料。
- 線上申辦政府服務。
- 電子連署。
- 登入公部門系統。
使用者視角可能是:
插入自然人憑證 IC 卡
輸入 PIN 碼
完成登入或簽章但工程視角要看到更底層:
IC 卡裡有私鑰與憑證;
使用者輸入 PIN 解鎖私鑰使用;
系統驗證憑證鏈、有效性與簽章;
應用系統再建立自己的 session 或完成特定文件簽章。自然人憑證不是「卡號登入」。
它是一套以 PKI、憑證、私鑰、PIN、憑證鏈與官方憑證管理中心為基礎的身份驗證能力。
一、 一句話回答
如果面試官問:
自然人憑證登入的原理是什麼?
可以先回答:
自然人憑證是內政部憑證管理中心簽發給個人的憑證 IC 卡,核心是 PKI。使用者登入時,通常需要讀卡機、自然人憑證 IC 卡、用戶端元件或 HiCOS 工具,並輸入 PIN 碼解鎖卡片內的私鑰。系統會透過 challenge-response 或簽章流程確認使用者持有該憑證私鑰,並驗證憑證鏈、憑證有效期、撤銷狀態、用途與身份資料。驗證成功後,應用系統仍要建立自己的 session。自然人憑證和健保卡不同,它更接近公民數位身份與憑證簽章工具;但登入和對文件做數位簽章仍是不同安全語意,不能混為一談。
短一點可以說:
自然人憑證登入是用「憑證 IC 卡中的私鑰」證明本人控制該憑證,
再由系統驗證憑證鏈與簽章結果後建立登入狀態。二、 自然人憑證是什麼
自然人憑證由內政部憑證管理中心,也就是 MOICA,提供與管理。
它通常是一張 IC 卡,使用者需要:
- 自然人憑證 IC 卡。
- 讀卡機。
- PIN 碼。
- HiCOS 卡片管理工具或跨平台網頁元件,依服務與環境而定。
自然人憑證的價值在於:
政府憑證管理中心把某個憑證和某個自然人身份綁定。因此應用系統可以透過憑證驗證流程確認:
- 這張憑證是否由可信 CA 簽發。
- 憑證是否仍有效。
- 憑證是否被撤銷。
- 使用者是否持有對應私鑰。
- 使用者是否輸入 PIN 允許私鑰操作。
這比單純帳號密碼多了 PKI 信任基礎。
三、 PKI 模型
自然人憑證建立在 PKI,也就是 Public Key Infrastructure 上。
核心元件:
| 元件 | 說明 |
|---|---|
| CA | Certificate Authority,簽發憑證的憑證機構 |
| Certificate | 憑證,包含 public key 與身份資訊 |
| Private Key | 私鑰,保存在 IC 卡中 |
| Public Key | 公鑰,包含在憑證中 |
| PIN | 使用者解鎖卡片私鑰操作的密碼 |
| CRL / OCSP | 憑證撤銷狀態檢查 |
| Certificate Chain | 從使用者憑證到可信根憑證的鏈 |
登入時的核心不是:
使用者輸入了 PIN,所以登入成功。而是:
使用者能使用卡片內私鑰完成簽章或 challenge,
而這個私鑰對應的憑證通過憑證鏈與撤銷狀態檢查。PIN 只是保護私鑰使用的本機因素。
真正讓伺服器信任的是憑證與私鑰簽章結果。
四、 登入流程
概念流程如下:
不同政府服務實作細節可能不同,但信任模型大致是:
challenge -> 私鑰簽章 -> 憑證驗證 -> 本地 session五、 PIN 的角色
PIN 很容易被誤解。
PIN 不是直接送到你的網站後端比對的密碼。
比較正確的理解是:
PIN 用來授權卡片執行私鑰操作。使用者輸入 PIN 後,IC 卡才允許:
- 簽章。
- 解密,視憑證用途。
- 其他憑證操作。
因此:
- 應用系統不應保存 PIN。
- 不應把 PIN 當一般帳號密碼處理。
- PIN 錯誤多次可能鎖卡。
- 忘記 PIN 要走官方解鎖/重設流程。
內政部行動自然人憑證系統頁面也提示使用憑證登入時需要讀卡機、自然人憑證並輸入 PIN 碼進行驗證;相關線上作業頁也會要求插入 IC 卡並輸入 PIN。
六、 憑證驗證要驗什麼
如果你是應用系統或平台端,不能只拿到憑證就信任。
至少要驗:
| 驗證項目 | 說明 |
|---|---|
| 簽章 | challenge 簽章是否由憑證 public key 驗證通過 |
| 憑證鏈 | 是否能鏈到可信 CA |
| 有效期 | notBefore / notAfter 是否有效 |
| 撤銷狀態 | CRL / OCSP 是否顯示憑證被撤銷 |
| 憑證用途 | 是否符合登入或簽章用途 |
| subject | 身份識別資料是否符合預期 |
| challenge | 是否是本次登入產生的短效 challenge |
| replay | 同一簽章結果是否被重放 |
最重要的是:
challenge 必須由伺服器產生、短效、一次性。不要讓使用者拿舊簽章重放登入。
七、 登入和數位簽章不同
自然人憑證常同時被拿來登入與簽章,所以很容易混淆。
登入
登入回答:
這次操作的人是否能證明自己控制某張有效自然人憑證?登入成功後,你會建立 session。
數位簽章
簽章回答:
這個人是否對某份特定內容做了簽署?
內容之後是否可驗證未被竄改?簽章必須綁定具體文件或交易內容。
不能把:
使用者登入成功直接當成:
使用者簽署了這份文件這是完全不同的安全語意。
八、 與健保卡登入的差異
| 比較 | 自然人憑證 | 健保卡登入 |
|---|---|---|
| 核心 | PKI 憑證、私鑰、PIN | 健保卡、註冊密碼、健保署服務 |
| 常見用途 | 政府服務登入、報稅、簽章、線上申辦 | 健保服務、健康存摺、健保業務 |
| 是否涉及私鑰簽章 | 是 | 不應直接等同 |
| 讀卡機 | 常需要 | 常需要 |
| 身份語意 | 公民數位身份 / 憑證 | 健保身份與健保服務註冊 |
| 是否可用於文件簽章 | 可依服務與憑證用途 | 不是主要語意 |
健保卡登入偏健保服務場景。
自然人憑證則更偏政府通用數位身份與簽章能力。
九、 與行動自然人憑證 / TW FidO 的關係
行動自然人憑證是把自然人憑證能力延伸到行動裝置體驗的方向。
內政部行動自然人憑證系統頁面可看到:
- 憑證登入。
- 跨平台網頁元件。
- HiCOS 卡片管理工具。
- 使用自然人憑證與 PIN 驗證。
- 行動自然人憑證相關操作教學。
TW FidO 則是行動自然人憑證相關的無密碼/行動身份驗證服務。
可以先這樣分:
自然人憑證:實體 IC 卡 + PIN + PKI。
行動自然人憑證 / TW FidO:行動裝置上的高信任身份驗證體驗。後面會再獨立寫行動自然人憑證與 TW FidO。
十、 本地 Session 設計
自然人憑證登入成功後,應用系統仍要建立自己的 session。
例如:
type Session = {
userId: string
authenticatedBy: 'moica'
certificateSerialHash: string
authenticatedAt: Date
assuranceLevel: 'high'
expiresAt: Date
}不要每個 API 都要求使用者重新插卡簽章。
通常是:
自然人憑證完成一次登入
-> 應用系統建立短效 session
-> 敏感操作再要求重新憑證驗證或簽章高風險操作例如:
- 送出申請。
- 下載敏感資料。
- 修改核心身份資料。
- 簽署文件。
- 授權他人代理。
可以要求 fresh certificate authentication 或特定內容簽章。
十一、 資料模型
如果系統需要將自然人憑證和本地帳號綁定,不應把身分證字號或完整憑證資料到處明文保存。
概念表:
create table certificate_identities (
id uuid primary key,
user_id uuid not null references users(id),
provider text not null,
certificate_serial_hash text not null,
subject_hash text not null,
issuer text not null,
assurance_level text not null,
verified_at timestamp not null,
created_at timestamp not null,
unique (provider, certificate_serial_hash)
);
create table certificate_auth_events (
id uuid primary key,
user_id uuid,
certificate_identity_id uuid,
event_type text not null,
challenge_id uuid,
ip inet,
user_agent text,
created_at timestamp not null
);保存原則:
- 最小化保存。
- 身份識別資料 hash / tokenization。
- 敏感資料加密。
- 存取記錄 audit log。
- 明確資料保存期限。
- 不把 PIN、私鑰、完整簽章材料寫進 log。
十二、 元件與使用環境
自然人憑證常牽涉:
- 讀卡機。
- IC 卡。
- HiCOS 卡片管理工具。
- 跨平台網頁元件。
- 瀏覽器權限。
- 作業系統相容性。
內政部憑證管理中心提供自然人憑證跨平台網頁元件下載頁,相關服務頁也常提示第一次使用需安裝跨平台網頁元件。
所以產品設計要考慮:
- 使用者是否有讀卡機。
- 元件是否安裝。
- PIN 是否忘記或鎖卡。
- 憑證是否過期。
- 憑證是否撤銷。
- 瀏覽器是否阻擋元件。
- 公司電腦是否限制安裝。
錯誤處理不能只顯示:
登入失敗而要能區分:
- 沒插卡。
- 讀卡機讀不到。
- 元件未安裝。
- PIN 錯誤。
- 憑證過期。
- 憑證撤銷。
- challenge 過期。
- 官方服務暫時不可用。
十三、 安全風險
1. PIN 外洩
如果使用者把 PIN 寫在卡片旁邊,持卡者就可能使用憑證。
所以需要教育:
卡片和 PIN 要分開保管。2. 卡片遺失
卡片遺失應走官方掛失、停用、補發流程。
系統可提供:
- 最近登入紀錄。
- 憑證登入通知。
- 可撤銷已綁定憑證。
- 異常登入風險偵測。
3. 假網站與假元件
攻擊者可能誘導使用者到假網站安裝假元件或輸入 PIN。
使用者教育很重要:
- 只在官方或可信服務使用。
- 不安裝來路不明元件。
- 檢查網址。
- 警惕假內政部憑證管理中心郵件。
內政部憑證管理中心首頁也可看到反詐騙公告,提醒民眾注意假冒憑證管理中心電子郵件。
4. 過度授權
自然人憑證登入成功不代表應用可以做任何事。
仍要做:
- authorization。
- data minimization。
- audit log。
- sensitive action reauthentication。
- transaction signing,若涉及特定內容承諾。
十四、 常見錯誤
1. 把 PIN 當網站密碼
錯誤:
網站後端接收 PIN 並比對。正確:
PIN 用來解鎖卡片私鑰操作,後端驗的是簽章與憑證。2. 只看憑證 subject 不驗簽章
錯誤:
前端送憑證資料,後端看到姓名就登入。正確:
後端要驗 challenge 簽章、憑證鏈、有效期與撤銷狀態。3. 登入等同簽章
錯誤:
使用者登入過,所以視為簽署所有後續文件。正確:
簽章必須針對特定內容產生簽章結果。4. 長 session 不加驗
錯誤:
自然人憑證登入一次,整天都能做所有高風險操作。正確:
敏感操作要求 fresh certificate authentication 或 transaction signing。5. 過度保存身份資料
錯誤:
保存完整身分證字號、憑證資料與所有簽章材料。正確:
最小化保存,必要時 hash、加密、稽核與設定保存期限。十五、 面試追問題庫
Q1:自然人憑證登入和帳號密碼登入差在哪?
帳號密碼是使用者知道一組秘密;自然人憑證登入是使用者持有憑證 IC 卡,輸入 PIN 解鎖私鑰,並透過私鑰簽章證明持有對應憑證。後端驗證憑證鏈、簽章、有效期與撤銷狀態。
Q2:PIN 的作用是什麼?
PIN 用來授權卡片執行私鑰操作,不應被當成網站密碼傳給後端保存或比對。後端應驗證的是簽章結果與憑證有效性。
Q3:自然人憑證登入成功後,還需要 session 嗎?
需要。憑證登入完成一次身份驗證後,應用系統仍要建立自己的 session,並管理有效期、登出、撤銷、敏感操作重新驗證與 audit log。
Q4:自然人憑證可以做數位簽章嗎?
可以依服務與憑證用途做簽章,但登入和簽章不是同一件事。登入是證明身份並建立 session;簽章是對特定文件或交易內容產生可驗證簽章。
Q5:自然人憑證和健保卡登入差在哪?
自然人憑證以 PKI、憑證、私鑰、PIN 和憑證鏈為核心,常用於政府服務登入與簽章;健保卡登入偏健保服務與健保身份確認,信任模型和用途不同。
Q6:應用系統要驗哪些東西?
至少要驗 challenge 簽章、憑證鏈、有效期、撤銷狀態、用途、subject、challenge 是否短效一次性,以及簽章是否被重放。
Q7:自然人憑證最大的工程挑戰是什麼?
不只是密碼學驗證,還有讀卡機、元件、瀏覽器、作業系統相容性、PIN 錯誤/鎖卡、憑證過期/撤銷、使用者支援、個資最小化與簽章語意設計。
十六、 實作題
題目一:設計自然人憑證登入流程
請描述:
- 使用者點擊自然人憑證登入。
- 後端產生短效 challenge。
- 前端透過元件要求卡片簽署 challenge。
- 使用者輸入 PIN。
- 前端送回簽章與憑證。
- 後端驗簽、憑證鏈、有效期、撤銷狀態。
- 建立本地 user mapping。
- 建立 session。
- 寫 audit log。
題目二:設計文件簽章
情境:
使用者要送出一份線上申請書。好的流程應包含:
- 明確顯示要簽署的內容。
- 對內容做 canonicalization / digest。
- 使用自然人憑證私鑰簽署 digest。
- 後端保存簽章、憑證資訊、簽署時間。
- 後續可驗證內容未被竄改。
- 不能只用登入 session 代表簽署。
題目三:設計錯誤處理
請區分:
- 未插卡。
- 讀卡機不存在。
- 元件未安裝。
- PIN 錯誤。
- 鎖卡。
- 憑證過期。
- 憑證撤銷。
- challenge 過期。
- 憑證驗證服務失敗。
十七、 資深視角
1. 自然人憑證是 PKI 信任模型
不要只把它看成「插卡登入」。
真正重要的是:
誰簽發憑證?
憑證是否有效?
使用者是否控制私鑰?
這次簽章是否對應本次 challenge 或文件?2. 登入、授權、簽章要分層
自然人憑證可以完成高信任身份驗證。
但系統仍要分:
- Authentication:你是誰。
- Authorization:你能做什麼。
- Signature:你是否對特定內容做出可驗證承諾。
- Session:這次登入後的狀態。
混在一起會出現嚴重設計錯誤。
3. 密碼學正確不等於產品安全
就算憑證驗證做對,仍可能被:
- 弱 session。
- 弱客服流程。
- 過度授權。
- 不安全元件下載。
- 假網站詐騙。
- 個資過度保存。
整體流程才是安全邊界。
4. 政府身份服務要特別重視稽核
高信任身份通常對應高敏感操作。
應該記錄:
- 誰登入。
- 用哪張憑證。
- 何時登入。
- 從哪裡登入。
- 做了什麼操作。
- 是否完成簽章。
- 憑證狀態如何。
audit log 不是附加功能,而是事後追蹤與合規基礎。
總結
| 問題 | 回答重點 |
|---|---|
| 自然人憑證 | 內政部憑證管理中心簽發的個人憑證 |
| 核心模型 | PKI、憑證、私鑰、PIN、憑證鏈 |
| PIN | 解鎖卡片私鑰操作,不是網站密碼 |
| 登入 | challenge 簽章 + 憑證驗證 + 建立 session |
| 簽章 | 對特定文件或交易內容做可驗證簽署 |
| 與健保卡 | 自然人憑證偏 PKI / 簽章,健保卡偏健保服務身份 |
| 驗證重點 | 簽章、憑證鏈、有效期、撤銷狀態、challenge |
| 工程挑戰 | 元件、讀卡機、PIN、鎖卡、過期、相容性 |
一句完整的面試回答可以是:
自然人憑證登入是以 PKI 為核心的高信任身份驗證。使用者持有內政部憑證管理中心簽發的自然人憑證 IC 卡,透過讀卡機與元件,在輸入 PIN 後授權卡片使用私鑰簽署伺服器產生的短效 challenge。後端驗證簽章、憑證鏈、有效期、撤銷狀態與憑證用途,確認使用者控制該有效憑證後,再建立本地 session。PIN 不是網站密碼,憑證登入也不等同文件簽章;如果要對申請書或交易內容簽章,必須針對特定內容產生可驗證簽章。實作上還要處理讀卡機、HiCOS/跨平台元件、PIN 錯誤與鎖卡、憑證過期、個資最小化、audit log 與敏感操作重新驗證。