資安常識(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是什麼,就像是瞭解水龍頭流出來水怎麼來。
希望這篇文章對剛入門的人有所幫助,看完的人都能夠略知一二。
尾語
最近工作上需要,所以不得不補完這方面相關知識,網路上有很多資訊過於專業,或是不太清楚。
我在查資料補完知識的時候也順便在這邊做個記錄,避免日後忘記。當然也一定會有疏漏或是不詳細的地方,如果有看到覺得有問題的地方,再請你留言通知我!
若需要轉載請註明網址,謝謝 😊