資安常識(1) - 公鑰基礎建設(PKI)概念
前言
網路世界如何保障資訊安全,在資安的課本中常常會提到PKI
那麼,什麼是PKI?🤷♀️
內容
什麼是PKI?
PKI是英文Public key infrastructure
的縮寫,中文名稱是公鑰基礎建設
。
根據維基百科的說明
PKI是一組由軟硬體、參與者、管理政策與流程組成的基礎架構,其目的在於創造、管理、分配、使用及儲存憑證。
那麼,這個東西是幹嘛的?🤔
在資安中,有四個大特性是一定要嚴格遵守,這樣才能保證網路上的安全。
PKI就是前人經過各種考驗後,最後濃縮精簡出來的安全架構,而它就能夠來確保這四大特性。
所有定義都被放在製作網路安全程式時,必看的規格聖經RFC
中。
那麼,四大特性分別是什麼?
身份識別(Authentication):確保資料傳送者與接收者的身分可以唯一被識別。
- 舉例:沒有
身份識別
,每個人都可以僞造彼此的身份,如網路銀行來說,大家不用識別都可以去幫別人提款。
- 舉例:沒有
隱密性(Confidentiality):確保資料經過加密後無法被直接辨識。
- 舉例:沒有
隱密性
的話,我們就可以直接辨讀機密資料,也就沒辦法避免密碼以明文方式外泄的狀況。
- 舉例:沒有
完整性(Integrity):確保資料在傳輸過程的完整與正確性,必須避免未授權的更改或僞造。
- 舉例:沒有
完整性
的話,我們可以直接更改資料,如我們可以直接更改匯款金額。
- 舉例:沒有
不可否認性(Non-Repudiation):確保傳送者無法否認之前傳送過某訊息;相反,也可以防止接收的人否認曾經接收過訊息。
- 舉例:沒有
不可否認性
的話,我們就可以在網路證券下單,然後在局勢不對的狀況改口跟券商說我剛剛其實沒做這筆交易。
- 舉例:沒有
也就是說,在網路上,這四大特性缺一不可,如果少一個都會出現每一項例子上的資安風險。
PKI內的角色職責
爲了維護剛剛說的四大特性,必須要有以下這些狠角色(狠是我隨便加的
認證機構(Certificate Authority, CA)
負責產生、發放、註銷、更新憑證的單位。註冊中心(Register Authority, RA)
負責證書註冊的審核單位。驗證中心(Validation Authority, VA)
確認驗章和憑證是否有效的單位。儲存庫(Directory Authority, DA)
存放目前發放憑證及已註銷憑證(CRL)的倉庫。信賴夥伴(Relying Party, RP)
信賴PKI架構的服務提供者。終端實體(End Entity, EE)
申請使用憑證的單位。
看到這一定會有一堆問題,像我第一次看的時候,我就想說爲啥名稱這麼中二炫砲
然後這個解釋爲啥只是解釋字面的上意思,感覺沒什麼更深的含義
這樣想就錯了,太苦了,它們的含義可多了,但教科書不一定會跟你說
首先,我們先把可能會產生的疑問再分別列出來湊字數(不
認證機構(Certificate Authority, CA)
負責產生、發放、註銷、更新憑證的單位。什麼是憑證?
憑證
可以想成網路上用來識別個人身份的資料卡,上面會有個人資訊、個人的公鑰以及誰認可這張資料卡的證明(也就是簽章)。然後,這個說明可能會產生更多問題,像是什麼是公鑰、什麼是簽章或是爲什麼有人可以去認可別人的資料卡等等
但是,遇到問題總要解決嘛
公鑰
密碼學上有個東西叫做加密,它確保了四大特性的其中一項隱密性
。
一般來說,加密分爲對稱
與非對稱
兩種。
在非對稱加密中,根據不同的算法生成鑰匙的時候,事前會產生兩把鑰匙,分別是公私鑰(有一個非常有名的加密方式叫做RSA加密算法)。那麼公鑰就可以想成是一把公開的鑰匙;私鑰則是只能自己擁有的鑰匙。其中,鑰匙成對的意思就是一把加密,我們可以用另一把解密。
我如果用私鑰加密,對方能用我的公鑰解開的話,不就能證明是我是私鑰的唯一擁有者了嗎?這個就是底下簽章的概念。這邊可能又會有問題說,對稱我知道了,但什麼是對稱?公私鑰的定義又是什麼?問題先打住,這些內容,我在之後會針對
對稱加密
與非對稱加密
說明。簽章
簽章就是指剛剛提到的,確保了四大特性的其中一項身份鑑別性
。
我們拿私鑰去對文件加密就是簽章。但問題是爲什麼用私鑰,不用公鑰?因爲簽章就是要證明你認可這份文件,所以得拿
只有你有
的東西來證明,公鑰大家都可以用,私鑰只有你有,所以簽章用私鑰。
再來,文件很長很肥很大,真的是這樣做嗎?
又是那招,問題先打住,我在之後會有文章針對簽驗章方法
再說明。如何認可別人的資料卡
這題答案也就是這個角色的定義,CA是頒發憑證的權威機構,所以他必須是能夠被信任
的單位,如果一個能夠被信任的單位去認可你的資料卡,那就代表你的資料卡能夠被信任。
那麼,如果我的資料卡被認可後,我又再認可別人會怎麼樣?這樣你就變成一種中介,形成一整個信任鏈。
可是,信任的過程有這麼簡單嗎?當然沒有。
舉例來說,今天有一個故事是這樣的你中午出門吃飯,找到一間小吃店,很自然的坐下來點了一碗陽春麵,並且等餐點來了之後,拿起旁邊的筷子直接開吃。吃完之後,拿出鈔票跟老闆結了帳,慢慢走出小吃店並且感受到陽光,今天真是樸實無華的一天。
我們來檢視一下這個故事,或許能看到一些信任的問題
- 你爲什麼敢出門?有沒有可能一出門就被炸死?
- 爲什麼看到小吃店就敢走進去?
- 你怎麼相信椅子是安全的?
- 餐點來了怎麼敢吃?裏面沒被下毒嗎?
- 爲什麼你能相信旁邊的筷子沒有用過?
- 爲什麼鈔票能拿來用?
從這些問題我們就能看出來,其實這世界並沒有那麼可信
像我之前就在蛋花湯裏面不小心吃到釘書針😥
只是我們依然選擇相信,爲什麼呢?
不是人很正向,充滿正能量,而是因爲經由很多事蹟或是證據來證明相對可信,我們就能夠選擇相信
以把錢存到銀行來說的話,我們相信銀行能幫我們保管錢也是因爲除了政府認可外,從各種方面得知銀行的來頭不小以及受到銀行的行銷,甚至是街坊鄰居朋友們都推薦,我們才敢把錢放進銀行。
讓我們回到原本的話題,認證機構就是這樣的一個存在,它們透過一些方法來證明自己相對可信並且廣爲人知(我是不知道是不是大家都認得每一間認證機構啦),因此能夠作爲頒發證書的一個單位。
不過,講到憑證,有些人會突然想到
SSL憑證
,這又是另外一回事了。
憑證怎麼產生、發放、註銷、更新?
這個問題,我在底下PKI運作流程
會提到。
註冊中心(Register Authority, RA)
負責證書註冊的審核單位。證書跟憑證一樣嗎?
沒錯,兩個是一樣的,只是用語不同,但指的是同一個東西,都是Certificate。審核是什麼意思?
審核就是使用者想要申請憑證的時候,總該有個人出面來確認申請人的資訊是否有正確填寫,就是這樣的意思。
驗證中心(Validation Authority, VA)
確認驗章和憑證是否有效的單位。怎麼跑出驗章這種鬼東西?這三小?
我在之後會有文章針對簽驗章方法
再說明。驗憑證要怎麼驗?
剛剛有提到,憑證可以想成是一個可信任單位去認可你的資料卡。
可是問題是說,認可是什麼?我要怎麼認可?難道我用個喇叭開廣跟世界頻道說我認可這張卡,就等於認可了嗎?
認可的實際方法就是用只有你有
的東西來去綁定,也就是能證明這東西是你認可的。
那麼,我們剛剛有提到什麼東西是只有你有
的嗎?
對了,就是那個,那個,那個,私鑰
!
我用私鑰
對資料卡進行加密,就代表我認可這個資料卡這時候就有新的問題,爲什麼加密可以代表我認可?
這邊就扯到非對稱加密的精髓,也就是一把鑰匙加密,我們只能用另一把解密
所以說,私鑰只有你有,你用只有你有的東西加密,那不就代表你認可了嗎?
那我能夠用公鑰解密出可被識別的資訊
(也就是解密成功),就代表這兩個鑰匙是一對的,也證明這是你認可的資訊了。
儲存庫(Directory Authority, DA)
存放目前發放憑證及已註銷憑證(CRL)的倉庫。憑證發很多張不會塞爆嗎?
這邊該考慮的不是放很多張不會塞爆這樣的問題,而是目前流通的有效憑證,會不會導致倉庫存取的時候阻塞?這邊最後就會牽扯到存有大量資料的資料庫存取的問題,我們就不在此討論。
那麼,每張憑證都有有效期限
,每當這個期限過了之後,這張憑證就會失效,所以正常流通的有效
憑證,也不會有很多張。註銷憑證是怎樣?怎樣做才會被註銷?
根據不同CA頒佈的憑證實務準則(CPS),裏面會寫道怎樣會被註銷。
常見的原因會是違反當初約定使用的原則、法律因素、使用者覺得憑證有安全疑慮而提出註銷或是使用者不存在了(像是往生或是單位解散等等狀況)
而成功註銷的話,CA也會在CRL中註明原因。
信賴夥伴(Relying Party, RP)
信賴PKI架構的服務提供者。- 信賴我是懂啦,畢竟要信任才會使用,可是服務提供者是怎麼回事?
這邊我們可以舉例,像是證券商就是信賴夥伴,他們認爲並相信PKI架構能夠爲交易提供安全。那麼,券商再以PKI爲基礎提供證券戶來進行證券交易,這也就是提供者的身份了。
- 信賴我是懂啦,畢竟要信任才會使用,可是服務提供者是怎麼回事?
終端實體(End Entity, EE)
申請使用憑證的單位。- 剛剛有個提供者,這邊怎麼又申請了?這些角色是有病嗎?
這個終端實體,名稱聽起來超級炫砲,但其實就是一般使用者,我們在上一個信賴夥伴有提到的證券戶就是一種終端實體,白話就是憑證的使用者。
- 剛剛有個提供者,這邊怎麼又申請了?這些角色是有病嗎?
從上面這些角色的基本介紹來看,我們可以知道這東西超級複雜,但也因爲如此才能保障我們網路上交易的安全。
PKI運作流程
這邊我們以PKI中的憑證申請跟憑證驗證來說
憑證申請
在憑證申請中,我們舉出一個實例來看
有一天,我們心血來潮想要辦個申請個證券線上交易用的憑證,要怎麼做?
首先,你必須要有證券戶,然而如何擁有證券戶呢?
常用管道爲臨櫃申請或線上申請
我們以臨櫃申請爲例子,這邊會出現的角色有EE
、RA
以及CA
EE透過臨櫃與RA約定帳號與取得密碼單
通常臨櫃的時候,對方會查看你的雙證件,甚至拍照記錄你的身份,所以約定後,就等於達成信任關係。EE透過手機APP進行線上證券帳號的登入,並向RA送出憑證申請
等一下!等一下!怎麼直接送出憑證申請?
這邊其實有更詳細的內容!
手機的APP會幫你產生公私鑰對,並且把你的資訊及公鑰做成憑證申請請求(CSR)的格式送出給RA,那麼這個格式定義在RFC中的PKCS#10
這邊就產生了一個問題,什麼是PKCS#10?
PKCS就是有一個公司叫RSA資訊安全公司(對!就是那個RSA),定義了網路上大家如何使用這些密碼跟資訊的標準,也就是公鑰密碼標準(Public Key Cryptography Standards)。可以想成是把這些接口做一個規格化以方便溝通的方法。
那麼,什麼是#10?是編號嗎?能吃嗎?
我們來看看維基百科的公鑰密碼標準頁面,上面有寫道參見RFC 2986。規範了向憑證中心申請憑證之CSR(certificate signing request)的格式。
也就是說,這就是標準中編號十的內容,主要是定義CSR格式。
除此之外,還有許多不同的編號分別定義了各種密碼標準在通訊上的格式。RA將資訊審核,通過後轉送給CA進行簽章變成憑證
這邊產生一個問題是,CA如何信任這個RA?
一樣的程序再走一次,RA本身也需要跟CA申請憑證才能擔任RA這個角色。
那麼,RA要怎麼申請這個擔任審核角色的憑證?
根據不同CA有制定不同等級的方法去接受RA這個角色的憑證申請,但脫不了關係都是會去查驗申請RA身份的人是誰(有沒有這個人或公司,身份證或是相關的工商登記及詢問申請這個的用途等等)。
RA只要能夠用當初申請憑證時能對應到的私鑰去對這個申請進行簽章,然後CA驗章成功就代表這個RA是曾經申請過這個憑證並且是我CA能夠信任的RA。CA簽章完後,將憑證轉送回RA,再轉送回EE存放
經過這些步驟,一個憑證的申請過程就完成。
以上就是憑證的產生與發放過程,看起來很複雜,的確很複雜。
之前我都沒想過手機上按下一個按鈕,背後發生的事情這麼麻煩。
另外,剛剛有說到憑證註銷與更新
憑證註銷
通常都是因故被吊銷,有些例子是違反使用原則,就像是駕照被吊銷一樣。
舉個例子來說,使用者EE覺得自己的私鑰有流出疑慮,決定申請憑證註銷,那麼會經過哪些流程呢?- EE臨櫃申請註銷或是透過線上申請(要永遠記得私鑰簽章可以代表自己認可)
- RA審核資訊,確認沒有問題後轉送給CA
- CA將註銷的憑證與原因更新到DA,並於下次CRL發佈時間公開
CRL全名是憑證註銷清單(Certificate Revocation List),是一種黑名單的概念,上面出現的憑證都是被註銷導致失效的。這個清單由CA定時公告,VA會取得這份清單來驗憑證有效性。
憑證更新
憑證總是會失效,不外乎到期。但在到期前(通常是一個月前),RA會通知EE是否要更新憑證。
那麼,憑證是如何被更新?- RA通知EE憑證快要到期
- EE產生新的公私鑰對並向RA發出憑證更新請求
這邊要注意這個請求還是會使用舊的私鑰去簽章(不然RA不認識你)。 - RA收到請求後,審核通過將資訊轉送給CA簽章變成憑證
- 最後CA將憑證轉送RA再交給EE,憑證更新成功
憑證驗證
我們有憑證了!接下來呢?
憑證總是需要使用的,要如何用呢?
我們接着上面的例子,以網路下單的憑證使用爲例
這邊出現的角色有EE
、RP
、VA
、RA
及CA
(哇靠這不是幾乎全員到齊)
EE使用憑證對交易資料產生簽章值
等等!簽章值?!怎麼突然又有新名詞!
簡單來說,簽章值是就是用私鑰對雜湊值加密。
那麼,雜湊(hash)是透過數學轉換跟運算產生一定長度的資料(產生的資料稱爲摘要,重複性很低,也就是低碰撞性),並且用私鑰加密代表的是我認可這段資料。
整個意思就是,我用私鑰認可這個足以代表整筆交易的一定長度資料。
從這邊,我們可以看出來雜湊值既然是一定長度的資料,又可以代表不同長度的資料(當初覺得跟UUID超像),不就可以確保完整性
了嗎?既然完整性代表資料沒被修改過,又被私鑰加密,若能解密成功代表EE認可並同意本次交易內容。也就是本次交易沒辦法反悔或任意修改交易內容,以此也可以達成
不可否認性
。EE將交易資料、簽章值與憑證交給RP來進行交易
RP將剛剛收到的資訊轉交給VA來進行檢驗
VA檢驗簽章正確性
這邊會在之後的簽驗章方法
進行說明。VA檢驗憑證有效性
憑證怎樣算有效?
剛剛有提到,在時間內
以及不在註銷清單內
都算有效,可是問題來了!
時間內還好說,憑證上就有寫,但是要如何知道不在註銷清單內?有兩種正規的方法可以知道憑證是否被註銷,一種是VA定期向CA取得CRL清單,另一種是直接線上向CA查詢憑證狀態,也就是OCSP(Online Certificate Status Protocol)。
VA驗章驗證完成後,通知RP結果
RP根據結果決定是否提供EE服務
這邊我們一直都沒有提到DA
這個角色,不是因爲它不重要,而是因爲它的概念純粹只是一個存放憑證的資料庫。
雖然PKI的角色互動中會常碰到DA
,但在各個狠角色交互過程中就顯得沒那麼耀眼,所以我就不討論它了。
另外,有些問題剛剛可能沒有想過,就是它們分別是誰?
在驗證的時候,RP是券商、CA是CA、EE是證券戶(也就是使用者)。
RA根據申請憑證的時候,我們是向RA申請,所以可以猜到RA是券商!
那麼,VA是誰?
VA可以是券商,也可以是驗證服務的第三方提供者。
在實務上,它就僅僅只是個驗證程式,定期取得註銷清單,然後收各種驗證請求,吐出回傳值。
如果說,VA是券商的話,且我們剛剛知道RA是券商,那麼在驗證上,VA也可以透過旁門左道直接向RA詢問憑證狀態來節省時間。
以上,就是憑證使用的驗證流程,我覺得也是超複雜的。
結論
我們可以從PKI的構成來得知它博大精深,而且觸角延伸到我們生活中使用網路的各個角落。
在看這些東西之前,我對它根本沒有瞭解。使用這些東西的時候,就跟水龍頭打開就有水一樣自然。
但是現在大概瞭解PKI是什麼,就像是瞭解水龍頭流出來水怎麼來。
希望這篇文章對剛入門的人有所幫助,看完的人都能夠略知一二。
尾語
最近工作上需要,所以不得不補完這方面相關知識,網路上有很多資訊過於專業,或是不太清楚。
我在查資料補完知識的時候也順便在這邊做個記錄,避免日後忘記。當然也一定會有疏漏或是不詳細的地方,如果有看到覺得有問題的地方,再請你留言通知我!
若需要轉載請註明網址,謝謝 😊