2007年12月2日 星期日

[心得] 淺談公鑰私鑰、數位簽章、憑證

最近除了比較硬的東西之外(Linux Kernel Code = =a)
沒什麼東西好寫的~
就來談一下數位簽章憑證這些東西吧!

說到數位簽章、憑證,
就必須要先說說 Public-Key Cryptography,
也就是公鑰密碼學

傳統的對稱密碼學的想法很簡單:
用同一組 key,將原來的資訊加密之後,把 key藏好,
需要解密時,把 key拿出來就可以解密了!
但是這有一些問題,
當需把資訊傳遞給別人的時候,對方要如何解密?
傳 key過去,傳送途中有危險性
也無法確認是不是本人發送的資訊。
如果面對面告知,耗費的成本又很高。

這時候就是公鑰密碼學派上用場的時候了!
所謂公鑰,就是可以公開的鑰匙。
既然有可以公開的鑰匙,那當然有另一把可以對應的私鑰!
用公鑰加密的文件,可以用私鑰解開
反之,用私鑰加密的文件,可以用公鑰解開

比較簡單的作法就是,所有人都把自己的公鑰放到網路上,
當 A要把訊息傳給 B時,就找到 [公鑰B],用此公鑰加密,
傳給 B之後, B自然有 [私鑰B] 可以解密。
更安全一些的作法則是多使用自己的 [私鑰A] 加密,
對方解密時也就多使用 [公鑰A] 解密,如 圖一
(圖一)
(圖中紅色X是該使用者所沒有的密鑰)

這方法固然安全性提昇了,
但由於耗費的成本太高(耗時、耗系統資源),
所以通常只用在傳送密鑰、簽章、憑證,這些方面!


以上都能稍微理解的話,就可以稍微說明簽章跟憑證了。


數位簽章跟憑證是不同的東西!
我們可以把 [數位簽章] 想像成 [蓋章] 一樣的東西,
在一份資料上面蓋了章,證明這份資料確實是某人發出的,
也就不會有事後賴帳不承認這事實的情況!
而 [憑證] 則可以想像成 [公鑰的保證書],
以此為憑來驗證拿到的公鑰真的是某人的公鑰。

接下來可能要配合圖片比較好說明,
圖二 為 A傳送資訊給 B,
圖三 為 B接收到資訊之後。

兩人可能已經事先透過圖一的方式,交換了傳統密碼學的密碼了
而這密碼會用在傳遞的文件上
(前面有說,公鑰密碼學耗資源,所以用於交換密碼而沒有用來傳輸整份資料)

(圖二)
A把 [公鑰A] 交給可信任的 Certificate Authority(CA)簽發憑證,
之後 CA 會用 [私鑰CA] 加密,成為 [憑證] 送還給 A。
而要送出去的資訊(可能已加密過),
則經過 hash後,成為一組字串,
把這組字串,用 [私鑰A] 加密,成為 [數位簽章]。
最後則把 [憑證]、[公鑰A]、[資訊]、[數位簽章] 一同發送給 B。


(圖三)
B收到 A送來的 [憑證]、[公鑰A]、[資訊]、[數位簽章] 之後,
(圖中用紅色框起來的部份)
就向 CA詢問 [公鑰CA],以此解開憑證,並確認跟 [公鑰A] 一不一樣!
確認 [公鑰A] 正確之後,
就可以用 [公鑰A] 來解密 [數位簽章],得到一份字串,
再將送來的 [資訊] hash看看出來的字串一不一樣。

因為透過了可信任的 CA,
這樣的作法就可以確認資訊有沒有中途經過竄改或更動,
同時也能確認發送者。

希望這簡單的說明能讓大家知道數位簽章跟憑證是什麼,
同時讓大家上網看到 xxx憑證 之類的訊息時不會慌張,呵 ^^


(以上是簡單的說明,如果有誤也歡迎來信告知。)

16 則留言:

Unknown 提到...

您好
首先謝謝您這篇文章讓我更加了解這些理論
看完文章後還是有點不了解
文章中提到

比較簡單的作法就是,所有人都把自己的公鑰放到網路上,
.........

請問是放在網路上的哪裡?
當 A要把訊息傳給 B時,就找到 [公鑰B],用此公鑰加密,
請問要如何在網路上找到公鑰B?

這方面可能是自己笨看的不是很懂
可否煩請您再一次更詳細的敘述一下
再次的謝謝您

Unknown 提到...

通常公鑰會存放在 CA Server 上
而 CA 一般都是公正、權威、可信賴的第三方組織
所以可能是任何組織或單位

舉例來說
內政部自然人憑證管理中心
就存放了所有登記的自然人憑證

Unknown 提到...

感謝您親切的回答
終於弄懂這幾個東西了
謝謝您喔

liyon 提到...

感謝你的講解

Unknown 提到...

不會,
只是之前閒來無事分享一下心得筆記 ^^

魔法設計的藝術 提到...

你弄錯囉,私鑰的用途不是加密來給公鑰解開....因為公鑰你公開出去,那私鑰把文件加密就沒有意義了,因為人人都可以看到你加密的文件(那何必加密呢?)。

非對稱式金鑰的加密機制是:
1.公鑰加密,私鑰解密:

A要把重要私密文件交給B,就拿B公開的公鑰把文件加密。結果,只有有B私鑰的B自己能解密,看到A傳來的重要文件,[b]其他人不行[/b]。

2.私鑰簽章,公鑰驗證:

B要[b]向全世界不特定的多數人[/b]發布自己寫的一個了不起的程式作品,就把自己的私鑰"sign"了自己的程式,然後任何人,可以透過CA的信任圈取得B的公鑰來核對下載來的程式是不是真的B寫的。

Unknown 提到...

To 魔法設計師,
我說得跟您說的是一樣的喔!
「當 A要把訊息傳給 B時,就找到 [公鑰B],用此公鑰加密,傳給 B之後, B自然有 [私鑰B] 可以解密。」

至於圖一是拿自己的私鑰跟對方的公鑰進行雙重加密 ^^

至於簽章跟驗證的步驟圖二、圖三應該大致沒錯!?
:P

真的叫無名 提到...

圖二中,只少了A要傳送出去的"資料"沒經過[B公鑰]加密

Unknown 提到...

To 真的叫無名:
好久的文章了,感謝補充 ^^

匿名 提到...

to Askeing Yen :

感謝你的詳細解說,讓我對於Mac上的公用密鑰與私有密鑰有更深一層的了解,非常期待你的新文章~

Unknown 提到...

說明的太好了,一目了然,感謝贴文。

Unknown 提到...
作者已經移除這則留言。
Unknown 提到...

非常感謝!深入淺出的講解,終於弄懂這些名詞。

免費a片下載 提到...

動畫卡通中文字幕
動畫卡通中文字幕
免費色情視訊
動畫卡通中文字幕
免費成人聊天妹視訊
成人聊天影音
免費a片卡通觀看
情色影音美女
無碼h動漫

Admin 提到...

nice info sir good work samsung B310e flash file latest



Admin 提到...

nice good work admin Jio F220b Flash File