資安常識(1) - 公鑰基礎建設(PKI)概念

前言


網路世界如何保障資訊安全,在資安的課本中常常會提到PKI

那麼,什麼是PKI?🤷‍♀️

內容


什麼是PKI?


PKI是英文Public key infrastructure的縮寫,中文名稱是公鑰基礎建設

根據維基百科的說明

PKI是一組由軟硬體、參與者、管理政策與流程組成的基礎架構,其目的在於創造、管理、分配、使用及儲存憑證。

那麼,這個東西是幹嘛的?🤔

在資安中,有四個大特性是一定要嚴格遵守,這樣才能保證網路上的安全。

PKI就是前人經過各種考驗後,最後濃縮精簡出來的安全架構,而它就能夠來確保這四大特性。

所有定義都被放在製作網路安全程式時,必看的規格聖經RFC中。

那麼,四大特性分別是什麼?

  1. 身份識別(Authentication):確保資料傳送者與接收者的身分可以唯一被識別。

    • 舉例:沒有身份識別,每個人都可以僞造彼此的身份,如網路銀行來說,大家不用識別都可以去幫別人提款。
  2. 隱密性(Confidentiality):確保資料經過加密後無法被直接辨識。

    • 舉例:沒有隱密性的話,我們就可以直接辨讀機密資料,也就沒辦法避免密碼以明文方式外泄的狀況。
  3. 完整性(Integrity):確保資料在傳輸過程的完整與正確性,必須避免未授權的更改或僞造。

    • 舉例:沒有完整性的話,我們可以直接更改資料,如我們可以直接更改匯款金額。
  4. 不可否認性(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中的憑證申請跟憑證驗證來說

憑證申請


在憑證申請中,我們舉出一個實例來看

有一天,我們心血來潮想要辦個申請個證券線上交易用的憑證,要怎麼做?

首先,你必須要有證券戶,然而如何擁有證券戶呢?

常用管道爲臨櫃申請或線上申請

我們以臨櫃申請爲例子,這邊會出現的角色有EERA以及CA

  1. EE透過臨櫃與RA約定帳號與取得密碼單
    通常臨櫃的時候,對方會查看你的雙證件,甚至拍照記錄你的身份,所以約定後,就等於達成信任關係。

  2. 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格式。
    除此之外,還有許多不同的編號分別定義了各種密碼標準在通訊上的格式。

  3. RA將資訊審核,通過後轉送給CA進行簽章變成憑證
    這邊產生一個問題是,CA如何信任這個RA?
    一樣的程序再走一次,RA本身也需要跟CA申請憑證才能擔任RA這個角色。
    那麼,RA要怎麼申請這個擔任審核角色的憑證?
    根據不同CA有制定不同等級的方法去接受RA這個角色的憑證申請,但脫不了關係都是會去查驗申請RA身份的人是誰(有沒有這個人或公司,身份證或是相關的工商登記及詢問申請這個的用途等等)。
    RA只要能夠用當初申請憑證時能對應到的私鑰去對這個申請進行簽章,然後CA驗章成功就代表這個RA是曾經申請過這個憑證並且是我CA能夠信任的RA。

  4. CA簽章完後,將憑證轉送回RA,再轉送回EE存放

經過這些步驟,一個憑證的申請過程就完成。

以上就是憑證的產生與發放過程,看起來很複雜,的確很複雜。

之前我都沒想過手機上按下一個按鈕,背後發生的事情這麼麻煩。

另外,剛剛有說到憑證註銷與更新

  • 憑證註銷
    通常都是因故被吊銷,有些例子是違反使用原則,就像是駕照被吊銷一樣。
    舉個例子來說,使用者EE覺得自己的私鑰有流出疑慮,決定申請憑證註銷,那麼會經過哪些流程呢?

    1. EE臨櫃申請註銷或是透過線上申請(要永遠記得私鑰簽章可以代表自己認可)
    2. RA審核資訊,確認沒有問題後轉送給CA
    3. CA將註銷的憑證與原因更新到DA,並於下次CRL發佈時間公開
      CRL全名是憑證註銷清單(Certificate Revocation List),是一種黑名單的概念,上面出現的憑證都是被註銷導致失效的。這個清單由CA定時公告,VA會取得這份清單來驗憑證有效性。
  • 憑證更新
    憑證總是會失效,不外乎到期。但在到期前(通常是一個月前),RA會通知EE是否要更新憑證。
    那麼,憑證是如何被更新?

    1. RA通知EE憑證快要到期
    2. EE產生新的公私鑰對並向RA發出憑證更新請求
      這邊要注意這個請求還是會使用舊的私鑰去簽章(不然RA不認識你)。
    3. RA收到請求後,審核通過將資訊轉送給CA簽章變成憑證
    4. 最後CA將憑證轉送RA再交給EE,憑證更新成功

憑證驗證


我們有憑證了!接下來呢?

憑證總是需要使用的,要如何用呢?

我們接着上面的例子,以網路下單的憑證使用爲例

這邊出現的角色有EERPVARACA(哇靠這不是幾乎全員到齊)

  1. EE使用憑證對交易資料產生簽章值
    等等!簽章值?!怎麼突然又有新名詞!
    簡單來說,簽章值是就是用私鑰對雜湊值加密。
    那麼,雜湊(hash)是透過數學轉換跟運算產生一定長度的資料(產生的資料稱爲摘要,重複性很低,也就是低碰撞性),並且用私鑰加密代表的是我認可這段資料。
    整個意思就是,我用私鑰認可這個足以代表整筆交易的一定長度資料。
    從這邊,我們可以看出來雜湊值既然是一定長度的資料,又可以代表不同長度的資料(當初覺得跟UUID超像),不就可以確保完整性了嗎?

    既然完整性代表資料沒被修改過,又被私鑰加密,若能解密成功代表EE認可並同意本次交易內容。也就是本次交易沒辦法反悔或任意修改交易內容,以此也可以達成不可否認性

  2. EE將交易資料、簽章值與憑證交給RP來進行交易

  3. RP將剛剛收到的資訊轉交給VA來進行檢驗

  4. VA檢驗簽章正確性
    這邊會在之後的簽驗章方法進行說明。

  5. VA檢驗憑證有效性
    憑證怎樣算有效?
    剛剛有提到,在時間內以及不在註銷清單內都算有效,可是問題來了!
    時間內還好說,憑證上就有寫,但是要如何知道不在註銷清單內?

    有兩種正規的方法可以知道憑證是否被註銷,一種是VA定期向CA取得CRL清單,另一種是直接線上向CA查詢憑證狀態,也就是OCSP(Online Certificate Status Protocol)。

  6. VA驗章驗證完成後,通知RP結果

  7. RP根據結果決定是否提供EE服務

這邊我們一直都沒有提到DA這個角色,不是因爲它不重要,而是因爲它的概念純粹只是一個存放憑證的資料庫。

雖然PKI的角色互動中會常碰到DA,但在各個狠角色交互過程中就顯得沒那麼耀眼,所以我就不討論它了。

另外,有些問題剛剛可能沒有想過,就是它們分別是誰?

在驗證的時候,RP是券商、CA是CA、EE是證券戶(也就是使用者)。

RA根據申請憑證的時候,我們是向RA申請,所以可以猜到RA是券商!

那麼,VA是誰?

VA可以是券商,也可以是驗證服務的第三方提供者。

在實務上,它就僅僅只是個驗證程式,定期取得註銷清單,然後收各種驗證請求,吐出回傳值。

如果說,VA是券商的話,且我們剛剛知道RA是券商,那麼在驗證上,VA也可以透過旁門左道直接向RA詢問憑證狀態來節省時間。

以上,就是憑證使用的驗證流程,我覺得也是超複雜的。

結論


我們可以從PKI的構成來得知它博大精深,而且觸角延伸到我們生活中使用網路的各個角落。

在看這些東西之前,我對它根本沒有瞭解。使用這些東西的時候,就跟水龍頭打開就有水一樣自然。

但是現在大概瞭解PKI是什麼,就像是瞭解水龍頭流出來水怎麼來。

希望這篇文章對剛入門的人有所幫助,看完的人都能夠略知一二。

尾語


最近工作上需要,所以不得不補完這方面相關知識,網路上有很多資訊過於專業,或是不太清楚。

我在查資料補完知識的時候也順便在這邊做個記錄,避免日後忘記。當然也一定會有疏漏或是不詳細的地方,如果有看到覺得有問題的地方,再請你留言通知我!

若需要轉載請註明網址,謝謝 😊