日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字签名是什么

發布時間:2023/12/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字签名是什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數字簽名是什么?

作者: 阮一峰

今天,我讀到一篇好文章。

它用圖片通俗易懂地解釋了,"數字簽名"(digital signature)和"數字證書"(digital certificate)到底是什么。

我對這些問題的理解,一直是模模糊糊的,很多細節搞不清楚。讀完這篇文章后,發現思路一下子就理清了。為了加深記憶,我把文字和圖片都翻譯出來了。

文中涉及的密碼學基本知識,可以參見我以前的筆記。

====================================================

數字簽名是什么?

作者:David Youd

翻譯:阮一峰

原文網址:http://www.youdzone.com/signature.html

1.

鮑勃有兩把鑰匙,一把是公鑰,另一把是私鑰。

2.

鮑勃把公鑰送給他的朋友們----帕蒂、道格、蘇珊----每人一把。

3.

蘇珊要給鮑勃寫一封保密的信。她寫完后用鮑勃的公鑰加密,就可以達到保密的效果。

4.

鮑勃收信后,用私鑰解密,就看到了信件內容。這里要強調的是,只要鮑勃的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。

5.

鮑勃給蘇珊回信,決定采用"數字簽名"。他寫完后先用Hash函數,生成信件的摘要(digest)。

6.

然后,鮑勃使用私鑰,對這個摘要加密,生成"數字簽名"(signature)。

7.

鮑勃將這個簽名,附在信件下面,一起發給蘇珊。

8.

蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

9.

蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。

10.

復雜的情況出現了。道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。此時,蘇珊實際擁有的是道格的公鑰,但是還以為這是鮑勃的公鑰。因此,道格就可以冒充鮑勃,用自己的私鑰做成"數字簽名",寫信給蘇珊,讓蘇珊用假的鮑勃公鑰進行解密。

11.

后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。

12.

鮑勃拿到數字證書以后,就可以放心了。以后再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。

13.

蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。

14.

下面,我們看一個應用"數字證書"的實例:https協議。這個協議主要用于網頁加密。

15.

首先,客戶端向服務器發出加密請求。

16.

服務器用自己的私鑰加密網頁以后,連同本身的數字證書,一起發送給客戶端。

17.

客戶端(瀏覽器)的"證書管理器",有"受信任的根證書頒發機構"列表。客戶端會根據這張列表,查看解開數字證書的公鑰是否在列表之內。

18.

如果數字證書記載的網址,與你正在瀏覽的網址不一致,就說明這張證書可能被冒用,瀏覽器會發出警告。

19.

如果這張數字證書不是由受信任的機構頒發的,瀏覽器會發出另一種警告。

20.

如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。

(完)

文檔信息

  • 版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)
  • 發表日期: 2011年8月 9日
  • 更多內容: 檔案 ? 理解計算機
  • 付費支持: 購買文集
  • 社交媒體: twitter, weibo
  • Feed訂閱:

相關文章

  • 2014.07.04: 數據庫的最簡單實現 所有應用軟件之中,數據庫可能是最復雜的。
  • 2013.11.29: Stack的三種含義 學習編程的時候,經常會看到stack這個詞,它的中文名字叫做"棧"。
  • 2013.10.14: 為什么寄存器比內存快? 計算機的存儲層次(memory hierarchy)之中,寄存器(register)最快,內存其次,最慢的是硬盤。
  • 2013.08.17: Linux 的啟動流程 半年前,我寫了《計算機是如何啟動的?》,探討BIOS和主引導記錄的作用。

太棒了,真的,非常有幫助,謝謝!!!

2011年8月 9日 20:51 | 檔案 | 引用

加上圖片以后確實清晰了很多,這個真的很好。

2011年8月 9日 22:14 | 檔案 | 引用

說實話,還是有點迷糊

2011年8月 9日 22:16 | 檔案 | 引用

還是有點模糊!沒太明白!

2011年8月 9日 22:29 | 檔案 | 引用

道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。因此,他就可以冒充鮑勃,寫信給蘇珊。
-----------
有鮑勃的公鑰就可以冒充鮑勃?
道格自己不也有鮑勃的公鑰么?“每人一把”。

2011年8月 9日 23:01 | 檔案 | 引用

引用Xtrats的發言:

有鮑勃的公鑰就可以冒充鮑勃?
道格自己不也有鮑勃的公鑰么?“每人一把”。

只有有了鮑勃的私鑰,才能冒充鮑勃。

道格沒有鮑勃的私鑰,只好偽造鮑勃的公鑰。

2011年8月 9日 23:22 | 檔案 | 引用

還是有些模糊,需要慢慢理解。

有一個問題,公鑰和私鑰的算法是一樣的嗎?為什么私鑰加密可以用公鑰解密?

2011年8月10日 01:36 | 檔案 | 引用

11.
"證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。"
13.
"蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。"

有個疑問,鮑勃的證書中鮑勃的公鑰有沒有被加密?

1. 如果加密了,則蘇珊必須能從某個地方獲取CA的公鑰方能和鮑勃通信,這CA公鑰要么隨證書附送,要么預先存放在蘇珊的電腦中。
2. 如果鮑勃的公鑰被加密,同時CA的公鑰也在證書中附送,那加密鮑勃公鑰有什么意義?
3. 如果鮑勃的公鑰被加密,且CA的公鑰只是預先存放在蘇珊的電腦中,那么經過其他未授權CA頒發的無效證書不能被解開,從而無法得到鮑勃的公鑰,但這似乎不合理,舉個例子,瀏覽器能夠在HTTPS證書不在證書列表的情況下繼續通信。

2011年8月10日 02:37 | 檔案 | 引用

  CNNIC也有根證書了,不過我把它屏蔽了。

2011年8月10日 02:40 | 檔案 | 引用

引用Xtrats的發言:

有鮑勃的公鑰就可以冒充鮑勃?
道格自己不也有鮑勃的公鑰么?“每人一把”。

道格用自己的私鑰加密發給蘇珊的信件,蘇珊收到信件后用道格的公鑰自然能正常解密該信件,但是蘇珊以為她收到的是鮑勃的信件,并且認為是用鮑勃的公鑰來解密的,自然認為發信的就是鮑勃,所以道格就達到了偽造鮑勃與蘇珊通訊的目的。

2011年8月10日 08:36 | 檔案 | 引用

其實我覺得把三個人名換成中文名,會更容易理解一點,不然容易記不住,哈哈
大學的時候學過這玩意,當時也是一知半解,現在全明白了,太有用了

2011年8月10日 08:43 | 檔案 | 引用

絕對的好文章,通俗易懂。分享了...謝謝

2011年8月10日 09:33 | 檔案 | 引用

既然道格可以替換鮑勃的公鑰,為什么不能故技重施,偽造CA的公鑰,然后用自己的私鑰偽造成CA的數字證書,從而達到欺騙蘇珊的目的呢?

2011年8月10日 09:50 | 檔案 | 引用

1(前提是有權威的CA認證蘇珊,保證確實是蘇珊為鮑勃創造了數字證書)得先用蘇珊自己的公鑰檢查鮑勃的數字證書,目的是為了證明蘇珊創造了鮑勃的數字證書。

2在解密這個數字證書后,再檢查是否鮑勃的數字證書由創造它的CA認證以及在創造鮑勃的數字證書時提供的關于鮑勃的相關信息是否發生了改變。

3帕特用通過解密數字證書得到的公匙(這個公匙蘇珊為鮑勃創造數字證書所用的鮑勃的公匙)來檢查鮑勃的簽名,如果這個公匙確實能成功解密簽名,證明確實這個簽名是由鮑勃的私匙所創造,當然也證明了道格沒有修改文檔,因為MD沒有變化。

道格確實有鮑勃的公匙,不過他用的是鮑勃的電腦和郵件,而且發給蘇珊的是自己用鮑勃的姓名生成的key pair。

2011年8月10日 10:01 | 檔案 | 引用

xiongbo027 說:

既然道格可以替換鮑勃的公鑰,為什么不能故技重施,偽造CA的公鑰,然后用自己的私鑰偽造成CA的數字證書,從而達到欺騙蘇珊的目的呢?

==============================

其實我也有同上的問題,既然CA的公鑰是公開的,那么有什么辦法能保證別人無法替換掉CA的公鑰呢

2011年8月10日 10:10 | 檔案 | 引用

公鑰不需加密。

CA公鑰無法偽造,因為CA公鑰是可查的,比如在MSDN里可以查到微軟用于簽名driver的公鑰(Base64碼)。

2011年8月10日 10:17 | 檔案 | 引用

引用CK的發言:

既然CA的公鑰是公開的,那么有什么辦法能保證別人無法替換掉CA的公鑰呢

CA都是一些可靠的大機構,它們的公鑰在自己網站上提供下載,所以無法偽造。

2011年8月10日 10:27 | 檔案 | 引用

引用febird的發言:

有個疑問,鮑勃的證書中鮑勃的公鑰有沒有被加密?

1. 如果加密了,則蘇珊必須能從某個地方獲取CA的公鑰方能和鮑勃通信,這CA公鑰要么隨證書附送,要么預先存放在蘇珊的電腦中。

2. 如果鮑勃的公鑰被加密,同時CA的公鑰也在證書中附送,那加密鮑勃公鑰有什么意義?

3. 如果鮑勃的公鑰被加密,且CA的公鑰只是預先存放在蘇珊的電腦中,那么經過其他未授權CA頒發的無效證書不能被解開,從而無法得到鮑勃的公鑰,但這似乎不合理,舉個例子,瀏覽器能夠在HTTPS證書不在證書列表的情況下繼續通信。

我看到有的資料說,公鑰被加密打包后,做成證書。

1. CA的公鑰網上可以取得,瀏覽器中也有預存。

2. 證書必須用CA的私鑰加密,如果能用CA的公鑰打開,就證明確實是CA頒發的。

3. 我對HTTPS的一些實現細節不熟悉,但是我的理解是,如果HTTPS公鑰不在瀏覽器列表內,瀏覽器可以從網上取得。

2011年8月10日 10:40 | 檔案 | 引用

引用阮一峰的發言:

CA都是一些可靠的大機構,它們的公鑰在自己網站上提供下載,所以無法偽造。

那么在下載到本地后,如何避免被替換的問題呢?感覺跟道格用自己的公鑰替換鮑勃的公鑰一樣啊,假若蘇珊每次也是重新下載鮑勃的公鑰豈不是同樣可以避免公鑰被替換的問題,那么還要數字證書干什么?

2011年8月10日 10:46 | 檔案 | 引用

引用玉沭林灃的發言:

那么在下載到本地后,如何避免被替換的問題呢?感覺跟道格用自己的公鑰替換鮑勃的公鑰一樣啊,假若蘇珊每次也是重新下載鮑勃的公鑰豈不是同樣可以避免公鑰被替換的問題,那么還要數字證書干什么?



無法避免。

蘇珊必須自己保證自己計算機的物理安全。如果別人已經可以直接控制你的計算機,修改根證書列表,那什么證書安全也救不了你。

2011年8月10日 11:13 | 檔案 | 引用

樓主把數據完整性和數據加密放在一起講,會讓人糊涂。

實際上,數字簽名是保證數據完整性的,但它不保證數據加密,不保證數據傳輸途中無人嗅探竊聽。

好比一輛敞篷大貨車從A開到B,中途沒有灑落任何東西,完整性得到了保證。但是車上有什么東西也被路人看光光。

數據加密是從A到B建了一條虛擬隧道,貨車在里面開,路人誰也不知道是什么東西。

車子到了B后,送貨的人給出自己的身份證,證明自己的確是從A來的。收貨的人可以選擇相信這個身份證。也可以把身份證放到自己的身份證校驗儀查詢,看看是不是公安部發的真的身份證。

如果你的身份證校驗儀(CA)已經是假的了,那就啥都別說了,重裝系統吧。

2011年8月10日 11:26 | 檔案 | 引用

“如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。”

這里似乎有點問題。通常公開鑰算法用于相互驗證,之后會建立session key(比如128位AES key)。后續交互的信息都是用session key和對稱加密算法(比如AES)來加解密的,已經與證書本身和公鑰密鑰無關。因為公開密鑰算法比對稱密鑰算法開銷大很多。不過HTTPS不了解,不敢定論。

2011年8月10日 11:33 | 檔案 | 引用

8.蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。
9.蘇珊再對信件本身使用Hash函數,將得到的結果,與上一步得到的摘要進行對比。如果兩者一致,就證明這封信未被修改過。
--------------
8 的說法有問題,只此一步,是無法確定信由鮑勃發出的。
必須 8 9 兩步都完成了,才能確定:信由鮑勃發出,信未修改。

20.如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。
-------------
Ciger 的說法是正確的。

為了速度起見,https 連接只在建立連接時,使用服務器的公鑰加密,這個階段是為了交換一個共享密鑰。接下來的過程使用的是對稱算法。

2011年8月10日 13:18 | 檔案 | 引用

引用Ciger的發言:

通常公開鑰算法用于相互驗證,之后會建立session key(比如128位AES key)。后續交互的信息都是用session key和對稱加密算法(比如AES)來加解密的,已經與證書本身和公鑰密鑰無關。因為公開密鑰算法比對稱密鑰算法開銷大很多。不過HTTPS不了解,不敢定論。

你說的對,就是這樣的。

2011年8月10日 13:55 | 檔案 | 引用

引用goool的發言:

8 的說法有問題,只此一步,是無法確定信由鮑勃發出的。

必須 8 9 兩步都完成了,才能確定:信由鮑勃發出,信未修改。


20.如果數字證書是可靠的,客戶端就可以使用證書中的服務器公鑰,對信息進行加密,然后與服務器交換加密信息。

8的說法沒有問題,就這一步就可以保證信由Bob發出的。因為消息是由Bob的私鑰簽名的,只有Bob本人才有他的私鑰,所以能用Bob的公鑰解密的,一定是Bob發出的。
8實現了抗否認性,9實現的是完整性。這是兩個不同的概念。

2011年8月10日 14:03 | 檔案 | 引用

引用Michael.Z的發言:

公鑰和私鑰的算法是一樣的嗎?為什么私鑰加密可以用公鑰解密?

私鑰和公鑰在算法上是等價的,只不過一個是private,一個是public。這個應該是由密鑰生成算法保證的。

2011年8月10日 14:08 | 檔案 | 引用

引用febird的發言:

有個疑問,鮑勃的證書中鮑勃的公鑰有沒有被加密?

2. 如果鮑勃的公鑰被加密,同時CA的公鑰也在證書中附送,那加密鮑勃公鑰有什么意義?

確實是被加密的(被CA的私鑰加密),但這里的意義不在加密(數據的保密性),而是保證證書是由CA簽發的。

2. Bob的公鑰被用于后續的會話密鑰(session key)交換時的加密傳輸。

2011年8月10日 14:14 | 檔案 | 引用

用RSA加密解密的數學原理說明這一過程,可能更容易理解。

2011年8月10日 14:22 | 檔案 | 引用

引用Yonny的發言:

蘇珊必須自己保證自己計算機的物理安全。如果別人已經可以直接控制你的計算機,修改根證書列表,那什么證書安全也救不了你。

您說的有道理,我是想確認一下數字證書和數字簽名它們各自的作用是什么,因為從阮一峰這篇文章里看到的信息貌似是數字證書是為了確保數字簽名的真實性而產生的,但實際情況可能不是這樣。

2011年8月10日 14:30 | 檔案 | 引用

http://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

維基百科上的說明,比較容易理解。

假設兩個用戶A,B進行通信,公鑰為c,私鑰為d,明文為x.

A用公鑰對明文進行加密形成密文c(x),然后傳輸密文;
B收到密文,用私鑰對密文進行解密d(c(x)),得到要通信的明文x。


補充:
如果是 A 同時和 B, C 通信,如果C的私鑰為e
C收到密文,用私鑰對密文進行解密e(c(x)),得到要通信的明文x。

c 是公鑰, d、e 是私鑰。用不同的私鑰解密,能得到同樣的結果。
這個過程通過很巧妙的數學來實現。

2011年8月10日 14:30 | 檔案 | 引用

@mazhechao 原文的 5 6 7 8 9 是一個完整的簽名場景,請在這個場景下重新考慮一遍。然后重新看一下 8 的表述:


8.蘇珊收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

實際上 Bob 的 “數字簽名” 可以用任何人的公鑰解密,得到一個 hash 值。如果不加上第 9 步(比對原文的 hash值)。這個第 8 步得不到任何有價值的信息。

2011年8月10日 14:46 | 檔案 | 引用

我也覺的這篇文章翻譯失準了。

2011年8月10日 15:12 | 檔案 | 引用

有ca也沒用,cnnic現在在ca里了

cnnic可以偽造別人的ca然后利用竊取的公鑰對信解密


公鑰也可以被竊取,竊取了不就可以解開信了

把身份授權給ca也沒用,只有法治國家才行

2011年8月10日 16:01 | 檔案 | 引用

只要操作系統有后門,什么簽名也沒用

操作系統的后門可以作為進入一個國家市場的籌碼

你以為微軟是可以相信的嗎

2011年8月10日 16:06 | 檔案 | 引用

13.
蘇珊收信后,用CA的公鑰解開數字證書,就可以拿到鮑勃真實的公鑰了,然后就能證明"數字簽名"是否真的是鮑勃簽的。
----------------------------
在這里,CA的公鑰會不會被道格用假的CA公鑰替換掉?如果可以,那么道格就可以像[10]中那樣向蘇珊發送假的數字證書,達到冒充鮑勃的目的。

2011年8月10日 16:51 | 檔案 | 引用

引用goool的發言:

實際上 Bob 的 “數字簽名” 可以用任何人的公鑰解密,得到一個 hash 值。如果不加上第 9 步(比對原文的 hash值)。這個第 8 步得不到任何有價值的信息。

Bob的簽名怎么會可以用任何人的公鑰解密?Bob是用他的私鑰簽的啊,當然只有用Bob的公鑰才能解密。再次強調,對比Hash值是為了驗證數據的完整性。Yonny兄弟說的有道理。

2011年8月10日 17:11 | 檔案 | 引用

引用goool的發言:

實際上 Bob 的 “數字簽名” 可以用任何人的公鑰解密,得到一個 hash 值。如果不加上第 9 步(比對原文的 hash值)。這個第 8 步得不到任何有價值的信息。

我不這么認為,我認為第8步的價值就在于,蘇珊能確定這封信是鮑勃發出的(雖然不確定信的內容是否被竄改過),因為如果不是使用鮑勃的私鑰加密,蘇珊使用鮑勃的公鑰不可能解密成功。

2011年8月10日 17:17 | 檔案 | 引用

真不錯。后面那個HTTPS的例子是譯者加的吧?原文中沒有。

2011年8月10日 17:45 | 檔案 | 引用

引用mazhechao的發言: Bob的簽名怎么會可以用任何人的公鑰解密?Bob是用他的私鑰簽的啊,當然只有用Bob的公鑰才能解密。

在原文第 8 步的場景里,所謂的“解密”只是一次數學運算(典型算法RSA)。輸入是 signature 和 某個人的公鑰,輸出是一個 hash 值。重申一次,得到的這個 hash 沒有任何價值。因為可以用任何人的公鑰參與這次運算。

以上可以簡單歸結為:沒有原文的數字簽名是沒有價值的。

2011年8月10日 17:50 | 檔案 | 引用

@goool:

價值就在于我能解開這個簽名,能夠解開這個簽名本身就是有意義的——消息是Bob發出的,Bob不能否認消息是他發的,不是Bob的人也不能說是他自己發的,即實現了數據的抗否認性。至于hash值不hash值的,其意義體現在第9步,實現的是數據的完整性。這是兩個完全不同的概念。原文分兩步闡述,沒有任何問題。

2011年8月10日 18:52 | 檔案 | 引用

@mazhechao

我不知道你所說的“解開簽名”是什么意義,它只是一步數學計算而已。

讓我們更細致地看一下“驗簽”的過程:
1: 輸入簽名和公鑰,算出 hash 值 h1;
2: 輸入原文,算出 hash 值 h2;
3: 比較 h1 和 h2,發現 h1 和 h2 相等。在這一步上,我們開始推理,得出原文是 bob 發出且沒有修改過。也就是你說的抗抵賴和數據完整。

請注意,這兩個有價值的結論都是第三步得出的。

原文第 8 步和你都認為:經過第 8 步的計算,即可以得出原文由 bob 發出的結論。這是錯誤的,實際上1 2 兩步只是可以交換順序的兩個計算步驟,它們不是任何有價值結論的充分條件,連必要條件也不是。

2011年8月10日 21:07 | 檔案 | 引用

http: the definitive guide 有一章是專門講 https 原理的,比較透徹。

2011年8月10日 22:41 | 檔案 | 引用

總的來說這篇文章是很有價值的,但是翻譯的還不讓人滿意,首先化名用的那幾個中文名字不容易區分,容易混淆,鮑勃和道格還是諧音! 讀著費勁! 兩外最后相關背景沒有交代清楚,以及某些語句沒有把邏輯關系表達得足夠清晰(“道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。”起初理解為道格把鮑勃手上的公鑰換走了,亂亂的,仔細琢磨語句,才明白意思是:道格用自己的公鑰換走了鮑勃送給蘇珊的公鑰……) 總之我覺得這篇文章如果要讓更多的人收益,傳播的更“遠”,還需要好好“返修”一下! 完。

2011年8月11日 00:56 | 檔案 | 引用

引用ncsglz的發言:

其實我覺得把三個人名換成中文名,會更容易理解一點,不然容易記不住,哈哈
大學的時候學過這玩意,當時也是一知半解,現在全明白了,太有用了

同意同意如果用張三李四的名字會更容易繞得清。

2011年8月11日 04:50 | 檔案 | 引用

最后一段HTTPS的講解和http://blog.leezhong.com/tech/2011/02/19/https-workflow.html 上的講解有出入,無網不剩的講解HTTPS是用非對稱來加密對稱密鑰,然后拿對稱密鑰對網頁加密(這樣解密速度快),我相信他的解釋是正確的,博主能解釋一下嗎?

2011年8月11日 10:16 | 檔案 | 引用

鮑勃會給蘇珊的信?不加密?明文?第七步只是把signature附上了 原文呢?不做任何操作????

2011年8月11日 10:59 | 檔案 | 引用

好文章,需要一點時間來理解

2011年8月11日 17:29 | 檔案 | 引用

@goool:

看了你的1,2步和前幾個回復(實際上 Bob 的 “數字簽名” 可以用任何人的公鑰解密,得到一個 hash 值。如果不加上第 9 步(比對原文的 hash值)。這個第 8 步得不到任何有價值的信息。 特別是這個),好象你不懂公鑰和私鑰的原理吧,公鑰和私鑰是一對的,某個私鑰加密的內容只有這個私鑰所對應的公鑰才能解開,其他的公鑰是解不開的,反之亦然
不然怎么叫密碼學呢

2011年8月11日 17:30 | 檔案 | 引用

去年有幸上過臺灣的信息安全老師講的數字簽名這塊的課,是學校搞的什么和臺灣學校聯合課程。用的是志明和春嬌的做為例子。
內容講的更為詳盡,課件應該還在。不過是專門面向密碼學研究的內容。

2011年8月11日 17:47 | 檔案 | 引用

看來不止一個人誤會了“解得開”“解不開”的問題。

設想一個簽名場景,我們叫“理想中的簽名”:Bob 直接用自己的私鑰對原文加密,把結果發送給 Alice,Alice 用 Bob 的公鑰去解密,得出原文。在這種情況下,的確存在一個“解開”或“解不開”的問題。如果 Alice 用別的什么人的公鑰去解密,這次計算仍然能得出一串符號,但是結果沒什么意義,這就是你說的“解不開”。

但實際中為了效率起見,被廣泛應用的簽名是這樣的:Bob 對原文做一次 hash,然后用私鑰對 hash 值加密,加密得到的結果我們稱之為“簽名”,然后把原文與“簽名”發給 Alice。

Alice 首先作的計算(也就是原文的第 8 步)是用 Bob 的公鑰對“簽名”作一次解密,從而得出一個有待于與第 9 步得出的結果相比較的一串符號。

這串符號有什么意義么?
沒有。
與原文有什么關系么?
看不出來。
通過這次計算,Alice 能不能斷定“簽名”是 Bob 發出的呢?
不能。因為**如果用別的什么人的公鑰參與這次計算,同樣能得到一個符號串,也同樣看不出什么意義**。

所以,這一步計算沒有所謂的“解得開”“解不開”的問題。

這就是為什么原文第 8 步是錯誤的,原文說:

收信后,取下數字簽名,用鮑勃的公鑰解密,得到信件的摘要。由此證明,這封信確實是鮑勃發出的。

Alice 的確得到了一個被暫時當作是原文 hash 值的符號串,但這個符號串還有待接下來的比對。這句話里的因果關系是不成立的。

2011年8月11日 18:33 | 檔案 | 引用

@goool:

汗,第八步如果用別人的密鑰解密的話會報錯,一報錯就知道你用的密鑰不對了。。。。你真的先看看密碼學原理吧。。。。別人已經說的很詳細了,8,9有著分別不同的意義

2011年8月12日 11:10 | 檔案 | 引用

@goool:

貼個wiki百科上的說明,這就是文章說的第九步,你自己好好理解一下。。。一個是解密得到的值(也就是第八步的值),一個是自己計算得到的值,再說一邊,第八步如果用別人的密鑰解密的話是會報錯的,也就是得不到結果,而不是你所說的能得到一個hash值,至于加密解密的原理,wiki百科上也有,你可以看一下

簽名消息

RSA也可以用來為一個消息署名。假如甲想給乙傳遞一個署名的消息的話,那么她可以為她的消息計算一個散列值(Message digest),然后用她的密鑰(private key)加密這個散列值并將這個“署名”加在消息的后面。這個消息只有用她的公鑰才能被解密。乙獲得這個消息后可以用甲的公鑰解密這個散列值,然后將這個數據與他自己為這個消息計算的散列值相比較。假如兩者相符的話,那么他就可以知道發信人持有甲的密鑰,以及這個消息在傳播路徑上沒有被篡改過。

2011年8月12日 11:26 | 檔案 | 引用

第八步如果用別人的密鑰解密的話是會報錯的,也就是得不到結果

以 RSA 算法為例。

拿其它人的公鑰去解 Bob 的簽名會發生什么,與 RSA 的原理無關,與具體的算法實現有關。從 RSA 的原理來說,所謂“公鑰”“私鑰”在數學上沒有區別,所謂的“加密”、“解密”、“簽名”、“驗簽”本質上是一回事,只是一個乘方和一個取模運算。

報錯,報什么錯,為什么報錯?因為標準實現下,Bob 要對他的信息進行編碼和填充。用別的人的公鑰解密,會因為填充的字節不對而無法繼續計算,或無法從計算結果提取出字符,或與 hash 串規則不符,大多數實現會在此處返回錯誤或拋出異常。

但是,RSA 從原理上并沒有保證這一點,因為它只是三個數字參與的計算而已:把一個數與另一個數作乘方運算,然后除以第三個數,得到余數。

我們完全可以采用另一套字符編碼規則、字節補齊規則、以及另外的 hash 算法,讓其他人的公鑰參與這次計算,也能得到一個符合規則的 hash 值。

所以從邏輯上,Alice 不能作出這樣的推理:用 Bob 的公鑰對簽名作了一次計算,就斷定簽名是 Bob 發過來的。

2011年8月12日 16:16 | 檔案 | 引用

不錯的科普文,只是感覺還不夠通俗易懂。。。。

2011年8月12日 17:35 | 檔案 | 引用

引用goool的發言:

……

你試一下就知道了啊,用別人的密鑰試試看啊,看看會不會報錯,你說說的那些什么取模比較數值都在解密也就是第八步里面包含了。。。

2011年8月12日 17:53 | 檔案 | 引用

不錯不錯,很形象~ 菜鳥們稍微了解下就好了。
對于 CA 證書的偽造問題……無可避免,誰知道會不會有木馬把證書改掉呢。

2011年8月12日 18:37 | 檔案 | 引用

我怎么覺得我開始有點理解goool的意思了。。。

2011年8月12日 22:46 | 檔案 | 引用

引用mazhechao的發言: 我怎么覺得我開始有點理解goool的意思了。。。

什么意思啊?

2011年8月12日 22:57 | 檔案 | 引用

引用阿迪的發言:

什么意思啊?

他的意思就是把8,9步誤解成解密的過程,其實第八步解密已經包含取模比較等步驟了

2011年8月15日 09:27 | 檔案 | 引用

引用阿迪的發言:

什么意思啊?

應該是說,用Alice用隨便什么公鑰解密,也會有一點點幾率解密成功。所以不能認為解密成功,就100%確定簽名的正確,有可能中彩票

2011年8月15日 17:43 | 檔案 | 引用

引用peeekkk的發言:

應該是說,用Alice用隨便什么公鑰解密,也會有一點點幾率解密成功。所以不能認為解密成功,就100%確定簽名的正確,有可能中彩票

那到是,只要那個質數被猜到就行了,雖然希望很渺茫。。。

2011年8月16日 10:37 | 檔案 | 引用

第八那里,我提一點異議。。蘇珊收到信后,用公鑰檢驗數字簽名,用鮑勃的公鑰解密摘要。不是由此可以驗證這封信是由鮑勃發出的。。而是可以由此驗證這封信的數字簽名是有效的。。這封信,可能是由鮑勃發給A。然后A冒充鮑勃發給B。

第十一文字部分大概也有錯誤。。鮑勃提交自己的公鑰和個人信息給CA(數字證書認證中心),并不需要提供蘇珊的私鑰。

然后我想問問,網頁要是使用https加密瀏覽是不是,速度會比http慢很多。

要是文章后面能夠總結一下公鑰和私鑰、數字簽名、CA、數字證書的作用那就好了、、、、

2011年8月16日 17:39 | 檔案 | 引用

我也寫了篇理解密碼學的公鑰和私鑰的文章,以ssh免密碼登陸作為載體 http://www.lovemaple.info/blog/2011/08/ssh-remote-sever-without-password/

2011年8月18日 18:10 | 檔案 | 引用

如果鮑勃是親手通過U盤把他的公鑰交給蘇珊的,那上面的討論就不需要了;但如果是通過網絡介質來傳輸,就存在著兩個問題:1該公鑰是鮑勃自己發的,還是有人冒充鮑勃發的,這是身份確認的問題,2該公鑰是不是被人掉包或修改,這是公鑰完整性的問題。(PGP軟件中公鑰的生物屬性就很好地解決了上面的問題,通過電話用一些單詞來與鮑勃核對公鑰的完整性,其實是核對該公鑰的指紋。)基于上面的原因要引入根證書。如果蘇珊的電腦是盜版(她電腦中受信任的根證書已被惡意調換),或者她的電腦中受信任的根證書的已被黑客修改,也不排除CNNIC使壞的可能,再加上網頁劫持,那蘇珊個人電腦的https://……就有很大的風險。

2011年8月20日 10:07 | 檔案 | 引用

引用Xtrats的發言:

有鮑勃的公鑰就可以冒充鮑勃?

道格自己不也有鮑勃的公鑰么?“每人一把”。

注意這里所說的“用自己的公鑰”,不是鮑勃給道格的那支,而是道格自己偽造的另一支

2011年8月20日 14:19 | 檔案 | 引用

我竟然看懂了!!!

2011年8月21日 21:12 | 檔案 | 引用

引用Mr Wind的發言:

如果鮑勃是親手通過U盤把他的公鑰交給蘇珊的,那上面的討論就不需要了;……

Mr Wind的評論好精彩啊。。我學過幾個星期網絡安全,對公鑰密鑰這塊看的很有趣味。Mr Wind 盜版系統根證書被修改的例子很意思!!
繼續關注文章的評論。。

2011年8月23日 00:35 | 檔案 | 引用

solidot有個類似的劫持證書的案例 http://internet.solidot.org/article.pl?sid=11/08/31/078252

2011年9月 8日 04:04 | 檔案 | 引用

引用Michael.Z的發言:

公鑰和私鑰的算法是一樣的嗎?為什么私鑰加密可以用公鑰解密?

這叫“非對稱加密”

2011年9月16日 10:33 | 檔案 | 引用

只是,常見的在線郵箱缺少對 s/mime 的支持啊

2011年9月16日 10:41 | 檔案 | 引用

讀了這篇文章,獲益匪淺。
也非常同意gool的觀點,如果數據完整性得不到保證,怎么保證不可否認性?也就是數據被修改了,還能說是本人發出的嗎?

2011年10月13日 22:44 | 檔案 | 引用

bob給他們每人一把的公鑰是不是是一樣的?如果是,那么信件被道格截取到,是不是就同樣被解密了!

2011年10月17日 16:01 | 檔案 | 引用

呵呵,這個我之前也不是很懂。但是,如果你從證書的用途上去理解,比如私鑰的目的是什么,公鑰的目的是什么,這樣的話會理解的很快

2011年10月24日 16:06 | 檔案 | 引用

銀行的u盾屬于私鑰還是公鑰,要是公鑰每個u盾的內容是不是一樣的呢

2011年11月 3日 09:35 | 檔案 | 引用

引用Xtrats的發言:

道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。因此,他就可以冒充鮑勃,寫信給蘇珊。
-----------
有鮑勃的公鑰就可以冒充鮑勃?
道格自己不也有鮑勃的公鑰么?“每人一把”。

其實是道格用自己的公鑰(不是鮑勃給他的,是他自己的公鑰)替換了蘇珊的鮑勃公鑰(注意是替換,原文翻譯成換走可能對你理解產生了誤導)。之后道格用自己的密鑰加密信件發給蘇珊,蘇珊用假的鮑勃公鑰(實際上是道格公鑰)解密信件,發現信息正確,便以為是鮑勃發來的信件,于是道格實現了偽裝成鮑勃欺騙蘇珊的目的

2011年11月 4日 20:43 | 檔案 | 引用

想這個過程的時候,如果略掉生成摘要的Hash函數貌似會更清晰些。

1 alice使用私鑰對一份合同生成簽名,同時把合同和簽名發給bob。
2 bob收到后,使用公鑰對簽名解密生成一段文本。對應步驟8。
3 bob對比收到的合同和解碼生成的文本。如果相同,則確定是來自alice。對應步驟9。

這里不能完全通過是否能解碼成功來判斷數據是否來自alice。
假設我使用自己的密鑰對一段數據生成簽名,發送給bob。bob使用alice的公鑰解碼,結果碰巧能解開,解開的數據有可能是亂碼,無法閱讀,但如果再碰巧看起來像一份合同。所以必須同時和收到的數據進行比較。

2011年11月17日 18:16 | 檔案 | 引用

如果道格在網絡上截取了BOB給蘇珊的信,是不是就可以得到其中的內容?

2011年12月 1日 20:49 | 檔案 | 引用

如果第三方冒充發送方發出了一個文件,因為接收方在對數字簽名進行驗證時使用的事發送方的公開密鑰,只要第三方不知道發送方的私有密鑰,解密出來的數字簽名和經過計算的數字簽名必然是不相同的,這酒提供了一個確認發送方身份的方法。

2011年12月 2日 23:13 | 檔案 | 引用

作者對公鑰,私鑰誰加密誰解密的解釋似乎是有點問題的:
“Public-key cryptography refers to a cryptographic system requiring two separate keys, one to lock or encrypt the plaintext, and one to unlock or decrypt the cyphertext. Neither key will do both functions.”

參考鏈接在這里:
http://en.wikipedia.org/wiki/Asymmetric_encryption

2011年12月21日 21:28 | 檔案 | 引用

有個地方不明白,既然蘇珊可以用鮑勃的公鑰進行解密,看到鮑勃的信件內容,那道格他也有鮑勃的公鑰呀,那他也可以看到鮑勃寫給蘇珊的信件內容羅。

2011年12月22日 13:15 | 檔案 | 引用

圖形并茂,講的真是太好了,o(∩_∩)o 哈哈

2012年3月25日 15:26 | 檔案 | 引用

看了這么多評論,我發現很多人沒有搞清楚加密和認證的區別:

加密:公鑰加密、私鑰解密

認證:私鑰加密、公鑰解密

首先要搞清楚一個操作的目的是什么,目的是加密數據還是認證作者。

2012年3月26日 13:23 | 檔案 | 引用

引用Xtrats的發言:

道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。因此,他就可以冒充鮑勃,寫信給蘇珊。
-----------
有鮑勃的公鑰就可以冒充鮑勃?
道格自己不也有鮑勃的公鑰么?“每人一把”。

我的理解,道格給蘇珊的是自己私鑰生成的公鑰,但因為蘇珊不知道這是道格的公鑰,就以為是在跟鮑勃通信。而且因為是道格私鑰生成的公鑰,所以道格可以正常的加密解密消息

2012年5月 8日 11:29 | 檔案 | 引用

文章很好,很容易理解。但我對圖11有一些看法。
就你所說
"后來,蘇珊感覺不對勁,發現自己無法確定公鑰是否真的屬于鮑勃。她想到了一個辦法,要求鮑勃去找"證書中心"(certificate authority,簡稱CA),為公鑰做認證。證書中心用自己的私鑰,對鮑勃的公鑰和一些相關信息一起加密,生成"數字證書"(Digital Certificate)。"

認證中心對所有的信息進行了加密,那我所理解的數字證書將是一個密文串,那當得到這個密文串證書,我根本就不能知道是哪個ca對用戶信息進行的加密,認證時也不知道用誰的公鑰對證書進行解密。
我理解的證書是可以公布開的,所以用戶的所有信息是不必要加密的。ca所需要做的工作只是對整個用戶明文信息進行認證,也就是取摘要,再對摘要就行私鑰加密。
沒有找到相關的資料,不知道對不對,還請作答,謝謝。

2012年5月14日 11:38 | 檔案 | 引用

是篇好文章,但是,覺得文章并沒有作者一開頭說的那樣好啊。

2012年8月19日 00:59 | 檔案 | 引用

引用goool的發言:

Alice 不能作出這樣的推理:用 Bob 的公鑰對簽名作了一次計算,就斷定簽名是 Bob 發過來的。

但Alice已經知道采用哪種公鑰密鑰算法了,因此如果使用Bob的公鑰無法解密,那么可以推定消息不是Bob所發

2012年10月 1日 23:08 | 檔案 | 引用

引用lich的發言:

假設我使用自己的密鑰對一段數據生成簽名,發送給bob。bob使用alice的公鑰解碼,結果碰巧能解開,解開的數據有可能是亂碼,無法閱讀,但如果再碰巧看起來像一份合同。所以必須同時和收到的數據進行比較。

當"我"給Bob發信的時候,我的信是公開的,未被加密的,因為加密也沒有意思啊,原因就是很多人有我的公鑰.
但關鍵是,怎么才能讓Bob看見我的信是原版,未經刪減的.所以需要對原文Hash一下得到Y.
當Bob收到信后,用"我"的公鑰解開簽名,得到Y.然后Bob需要對原文Hash一下,得到M,
這個時候,對比Y與M.才能確保數據是安全的.

這里的安全包括:是由"我"發出去的,并且中途未被修改.

2012年10月14日 01:48 | 檔案 | 引用

引用shanshan的發言:

有個地方不明白,既然蘇珊可以用鮑勃的公鑰進行解密,看到鮑勃的信件內容,那道格他也有鮑勃的公鑰呀,那他也可以看到鮑勃寫給蘇珊的信件內容羅。

這樣的啊.本來就這個樣子的.全是道格看不見蘇珊給鮑勃的信.
對應到計算機上就是:Server 發給 Client 的數據是可以被截獲的.

2012年10月14日 01:51 | 檔案 | 引用

引用愛國者的發言:

但Alice已經知道采用哪種公鑰密鑰算法了,因此如果使用Bob的公鑰無法解密,那么可以推定消息不是Bob所發


在第8步上,goool 說法是正確的.
譬如說,我們可以想像一下這個情況:Bob寫了封信(包括原文和簽名)給Lily,然后Lily對原文做了些修改,再把這封信轉發給了Alice. Alice當然是可以對這個簽名解密的.因為他有Bob的公鑰啊.但是我們不能說,這封信是由Bob發給Alice的,因為這封信的直接受體應該是Lily.

2012年10月14日 01:56 | 檔案 | 引用

非常贊,學到了好多東西,您的博客我非常喜歡看,請問是否可以做一個Android版的應用呢?這樣,我們隨時隨地都可以看了。
如果有需要,我可以做這個android應用。

2012年10月16日 13:13 | 檔案 | 引用

我非常統一goool的看法。對于解密來說不存在“解密失敗”這種說法。一般來講的“解密失敗”是指解密后的明文(不管是用對稱密碼還是非對稱密碼)仍然是無意義的文章,但是對于數字簽名來說,不管解密后的hash是否正確,它都是一串無意義的hash值,單就這步來說根本看不出來是不是“解密失敗”了。

再強調一遍,根本不存在“解密失敗”這種說法。

2012年11月 4日 01:05 | 檔案 | 引用

我覺得之所以第8步有些問題,是因為Bob在制作數字簽名那一步沒加上一些更詳細的說明,比如,第6、7步制作簽名時,同時把Bob的個人信息和信件摘要并到一起再用私鑰加密的話,在第8步蘇珊用公鑰解密后,就確實能知道此信件是由Bob發出的了,然后第9步通過hash函數也可以驗證信件是否被修改過。而且根據第8和第9步所做的事情來看,我覺得作者的原意非??赡芫褪沁@樣的,他只不過在第6 7步時漏掉了把Bob的個人信息也一起加入數字簽名中。

2012年11月10日 16:07 | 檔案 | 引用

銀行專業版 usb key里面存儲的是什么信息,是客戶端私鑰,和客戶端證書,還是服務器端證書.怎么和銀行的服務端通訊的,我怎么都沒想清楚?

2012年12月21日 17:36 | 檔案 | 引用

引用雨下路人的發言:

某些語句沒有把邏輯關系表達得足夠清晰(“道格想欺騙蘇珊,他偷偷使用了蘇珊的電腦,用自己的公鑰換走了鮑勃的公鑰。”起初理解為道格把鮑勃手上的公鑰換走了,亂亂的,仔細琢磨語句,才明白意思是:道格用自己的公鑰換走了鮑勃送給蘇珊的公鑰……)

道格的公鑰和蘇珊的公鑰不都是 鮑勃送的嗎,不是一樣的嗎

2012年12月21日 17:40 | 檔案 | 引用

之所以會覺得第8步有問題,是因為翻譯的時候有一句重要的話沒有翻譯出來,原文是這樣的:
Pat's software decrypts the signature (using Bob's public key) changing it back into a message digest. If this worked, then it proves that Bob signed the document, because only Bob has his private key.

2013年3月 8日 10:35 | 檔案 | 引用

引用小乖的發言:

道格的公鑰和蘇珊的公鑰不都是 鮑勃送的嗎,不是一樣的嗎


“道格用自己的公鑰換走了鮑勃送給蘇珊的公鑰” 是指 道格用道格的公鑰(不是鮑勃給道格的公鑰) 替換掉了鮑勃送給蘇珊的公鑰。

2013年3月16日 21:41 | 檔案 | 引用

好文章~

2013年3月20日 19:08 | 檔案 | 引用

峰哥的文章寫的非常好,通俗易懂!

2013年3月27日 13:26 | 檔案 | 引用

第8步確實有問題,僅由簽名解密得到的結果是沒法判斷簽名者身份的。

舉個例子:(假設不考慮對明文的加密)

Alice 發送一串附帶簽名的明文給 Bob,格式如下:

TEXT SIG1
明文 簽名

現在 Eve 截獲了這段信息,并偽造為:

TEXT SIG2
明文 簽名

Bob 收到信息,拋棄明文不看,對 SIG2 使用 Alice 的公鑰解密,得到了 DIG2。

但他并不知道正確的 HASH(TEXT) 是什么,也就不知道得到的 DIG2 到底對不對,那么怎么判斷發送者的身份呢。


不可抵賴性的實現是 依賴 TEXT 和 SIG 共同實現的。

假設 Eve 想篡改 Alice 的信息為:

TEXT2 SIG2
明文 簽名

SIG2 應= RSA (Alice的私鑰, HASH(TEXT2))

這樣才能騙過 Bob 以為這封信息來自 Alice。

但 Alice 的私鑰 Eve 并沒有,因此他偽造不出簽名。
因此當 Bob 驗證過簽名(相對明文)正確后,就認為這封信是 Alice 發送的。而不與明文相對是不成立的。


至于使用 Alice 的公鑰去解密 Eve 偽造的簽名會不會報錯,則一定意義上依賴于加密算法。起碼 RSA 這種冪乘和取模運算是不會有任何報錯的。

2013年5月 8日 21:33 | 檔案 | 引用

引用阮一峰的發言:

只有有了鮑勃的私鑰,才能冒充鮑勃。

道格沒有鮑勃的私鑰,只好偽造鮑勃的公鑰。

鮑勃給沒人的公鑰難道不是他們幾個共有的?給的這個和鮑勃的公鑰不一樣?不共有?

2013年7月 7日 10:46 | 檔案 | 引用

第5點,Bod決定采用 數字簽名。

為什么Bod要用數字簽名,應該說明下,這里Bod是為了證明自己是Bod,即這是認證過程 而非 加密過程

2013年11月11日 22:04 | 檔案 | 引用

引用blue gene的發言:

道格用自己的私鑰加密發給蘇珊的信件,蘇珊收到信件后用道格的公鑰自然能正常解密該信件,但是蘇珊以為她收到的是鮑勃的信件,并且認為是用鮑勃的公鑰來解密的,自然認為發信的就是鮑勃,所以道格就達到了偽造鮑勃與蘇珊通訊的目的。

我也正好有這個疑問,如果蘇珊收到信件后能用道格的公鑰解密,這豈不是每個擁有道格公鑰的人都能對信件解密?都能看到信件的內容?這樣的話通信就不安全了.

2013年11月16日 07:42 | 檔案 | 引用

引用mazhechao的發言:

私鑰和公鑰在算法上是等價的,只不過一個是private,一個是public。這個應該是由密鑰生成算法保證的。

如果是這樣的話那通信就不安全了.就比如Bob將信息用自己的私鑰加密發給suzan,但是很多人都有Bob的公鑰,那豈不是有Bob公鑰的人都可以解密看到信息?

2013年11月16日 07:55 | 檔案 | 引用

引用goool的發言:

@mazhechao

我不知道你所說的“解開簽名”是什么意義,它只是一步數學計算而已。

讓我們更細致地看一下“驗簽”的過程:
1: 輸入簽名和公鑰,算出 hash 值 h1;
2: 輸入原文,算出 hash 值 h2;
3: 比較 h1 和 h2,發現 h1 和 h2 相等。在這一步上,我們開始推理,得出原文是 bob 發出且沒有修改過。也就是你說的抗抵賴和數據完整。

請注意,這兩個有價值的結論都是第三步得出的。

原文第 8 步和你都認為:經過第 8 步的計算,即可以得出原文由 bob 發出的結論。這是錯誤的,實際上1 2 兩步只是可以交換順序的兩個計算步驟,它們不是任何有價值結論的充分條件,連必要條件也不是。

轉牛角了。同意m

2014年1月14日 15:58 | 檔案 | 引用

引用SelfMedicated的發言:

轉牛角了。同意m

好吧,我忽然又懂goool的意思了,但我覺得這其實是具體實現的問題(當用不匹配的公鑰去解密的時候會不會有“明顯信息提示”的問題),可是這完全不是這篇文章的關鍵點啊,大不了是樓主翻譯表述不嚴謹,可是不嚴謹又不是只有這一個地方,所以還是覺得鉆牛角了...

2014年1月14日 16:17 | 檔案 | 引用

引用goool的發言:

以 RSA 算法為例。

拿其它人的公鑰去解 Bob 的簽名會發生什么,與 RSA 的原理無關,與具體的算法實現有關。從 RSA 的原理來說,所謂“公鑰”“私鑰”在數學上沒有區別,所謂的“加密”、“解密”、“簽名”、“驗簽”本質上是一回事,只是一個乘方和一個取模運算。

報錯,報什么錯,為什么報錯?因為標準實現下,Bob 要對他的信息進行編碼和填充。用別的人的公鑰解密,會因為填充的字節不對而無法繼續計算,或無法從計算結果提取出字符,或與 hash 串規則不符,大多數實現會在此處返回錯誤或拋出異常。

但是,RSA 從原理上并沒有保證這一點,因為它只是三個數字參與的計算而已:把一個數與另一個數作乘方運算,然后除以第三個數,得到余數。

我們完全可以采用另一套字符編碼規則、字節補齊規則、以及另外的 hash 算法,讓其他人的公鑰參與這次計算,也能得到一個符合規則的 hash 值。

所以從邏輯上,Alice 不能作出這樣的推理:用 Bob 的公鑰對簽名作了一次計算,就斷定簽名是 Bob 發過來的。

大哥,假設私鑰為 (d, n), 公鑰為 (e, n), 那么通過前者加密后,若要解密,所用到的 e 就必須滿足 ed ≡ 1 (mod φ(n)) 公式了 。當然就幾乎只有原來那個公鑰 (e, n) 的 e 滿足其條件,所以不是任何公鑰都可以解的。畢竟如同其它前輩指出的,你拿別的公鑰去計算,就因為會滿足不了該條件而出錯。你可以再好好地通過阮一峰的《RSA 算法原理》補習下。

如果要找出同樣滿足該公式其它的 e 也不是不可以,但其算法復雜度就和用公鑰加密私鑰解密的情況一樣了。歸根結底,公私鑰的確可互換,且無法通過其中一個鑰匙能在可接受的成本下計算出另一個鑰匙,也難怪 RSA 深得『非對稱』的真諦了。

2014年2月 5日 21:35 | 檔案 | 引用

發現評論中有不少人被 goool 誤導了... 汗。

且不說這個,有人質疑既然也可以用私鑰加密用公鑰解密,那么因為公鑰是公開的,豈不是人人都可以解開被私鑰加密的數據了?

但是!誰告訴你用私鑰加密是為了不讓他人窺探明文數據了?這做法不是為了保密,而是在于『認證』!即驗證『我所使用的公鑰』與『對方加密時所使用的私鑰』是否構成一對符合 RSA 算法原理的公私鑰。如同我上一條評論指出的,試圖使用其它公鑰來解密就幾乎會出錯。

但是私鑰就只有對方一人知道了,就拿正文中例子來說。只要對方確確實實是鮑勃,從而私鑰的確也是鮑勃所使用的。于是只要『蘇珊所手上的公鑰能對對方發過來的數據進行有效解密』,那么就證明了這公鑰的確是與對方,即鮑勃使用的私鑰構成一對公私鑰。這就所謂的『認證』了。

但是,萬一對方偏偏不是鮑勃而是道格,且已經偷偷把蘇珊手上的公鑰換成道格的公鑰了呢?這個公鑰當然就與道格所有用的私鑰構成有效的一對公私鑰,于是道格的確就可以在蘇珊完全不知情的情況下,假裝成鮑勃并與她通訊。其實這問題就要通過 CA 來解決了,正文的后續當然也是圍繞此而展開的。

這地方阮一峰先生的確講的不夠好,沒明確好『加密』和『認證』的區別,仍未尚未徹底掌握 RSA 算法的同學的確很容易被弄糊涂甚至陷入誤區。

2014年2月 5日 21:56 | 檔案 | 引用

討論好激烈啊,其實這篇科普文非常不錯,非常明晰。但是想要真正理解還需要讀更專業的文章。有些同學連加密與認證這兩個基本過程都不懂,看了自然云里霧里。我覺得這篇文章主要說明的是簽名和數字證書的區別與關系。

另外,https傳輸內容是確實是對稱加密算法。還有,看這篇文章時務必先了解對稱加密算法與非對稱加密算法的基礎知識。

2014年2月26日 10:48 | 檔案 | 引用

引用御宅暴君的發言:

發現評論中有不少人被 goool 誤導了... 汗。

且不說這個,有人質疑既然也可以用私鑰加密用公鑰解密,那么因為公鑰是公開的,豈不是人人都可以解開被私鑰加密的數據了?

但是!誰告訴你用私鑰加密是為了不讓他人窺探明文數據了?這做法不是為了保密,而是在于『認證』!即驗證『我所使用的公鑰』與『對方加密時所使用的私鑰』是否構成一對符合 RSA 算法原理的公私鑰。如同我上一條評論指出的,試圖使用其它公鑰來解密就幾乎會出錯。

但是私鑰就只有對方一人知道了,就拿正文中例子來說。只要對方確確實實是鮑勃,從而私鑰的確也是鮑勃所使用的。于是只要『蘇珊所手上的公鑰能對對方發過來的數據進行有效解密』,那么就證明了這公鑰的確是與對方,即鮑勃使用的私鑰構成一對公私鑰。這就所謂的『認證』了。

但是,萬一對方偏偏不是鮑勃而是道格,且已經偷偷把蘇珊手上的公鑰換成道格的公鑰了呢?這個公鑰當然就與道格所有用的私鑰構成有效的一對公私鑰,于是道格的確就可以在蘇珊完全不知情的情況下,假裝成鮑勃并與她通訊。其實這問題就要通過 CA 來解決了,正文的后續當然也是圍繞此而展開的。

這地方阮一峰先生的確講的不夠好,沒明確好『加密』和『認證』的區別,仍未尚未徹底掌握 RSA 算法的同學的確很容易被弄糊涂甚至陷入誤區。

如果道格也去認證了自己的證書,并且用自己的公鑰換了bob的公鑰,每次通信的時候發自己的證書過去,結果就是一切驗證都沒有問題,但是蘇珊卻以為自己在跟bob通信,實際確實跟道格通信, 我的意思是如何辨別證書所有者跟你要通信的目標是同一個人呢?

2014年3月12日 14:40 | 檔案 | 引用

英文與中文在表達的邏輯上還是不同的,喜歡謹慎的接受概念和原理的人還是改天再看看原文吧~

2014年3月17日 02:19 | 檔案 | 引用

引用zhanlang的發言:

如果道格也去認證了自己的證書,并且用自己的公鑰換了bob的公鑰,每次通信的時候發自己的證書過去,結果就是一切驗證都沒有問題,但是蘇珊卻以為自己在跟bob通信,實際確實跟道格通信, 我的意思是如何辨別證書所有者跟你要通信的目標是同一個人呢?

門外漢猜測。CA認證是收費的,可能會保證不會被惡意替換。網站和證書是一一對應的。a.com - public1 b.com - public2 可能像hosts那樣的列表。

總結

以上是生活随笔為你收集整理的数字签名是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。