2017-09-13 107 views
0

我的理解是簽名用私鑰

  1. 加密:我用我的接收者的公鑰來加密我的信息。他將使用他的私人密鑰來閱讀我的消息(只有他可以這樣做)=>確定那個

  2. 簽名︰我使用我的私人密鑰(因爲沒有人擁有它,它證明了我的身份)。但是如果我的收件人使用我的公鑰,每個人都可以做同樣的事情並閱讀我的信息!任何人都可以解釋嗎?

然後,我還以爲是我應該做的是

  1. 我籤我的消息,我的私人密鑰=>這證明我的身份

  2. 我ENCRYPT步驟1的結果使用我收件人的PUBLIC KEY =>以避免任何人閱讀它

  3. HE用他的私鑰解密=>只有他可以這樣做

  4. HE檢查我的身份與我的公鑰

是正確的嗎?

回答

0

你的第二個猜測並不壞。

通常的方式是簽名(不加密)以下:

  1. 計算哈希的消息(如SHA256),有要簽名。
  2. 簽署本哈希值(即使用RSA加密私鑰)

就是這樣。將簡單消息和簽名散列傳送給任何人。該郵件未加密,因此可供所有收件人閱讀。在公鑰的幫助下,每個人都可以解密哈希,計算他或她自己的哈希散列,只要哈希(自己計算的和簽名和解密的哈希)相等,簽名就是有效的,並且消息具有簽名後不會改變。

如果您的消息還需要加密以及您通常不使用RSA,因爲它對於較大的消息(這意味着比私鑰的模數大,例如2048位)要慢並且不靈活。

使用像AES CBC這樣的對稱算法來加密消息。巧合生成的加密密鑰可以使用收件人的公鑰進行加密,然後進行傳輸。

綜上所述使用RSA與SHA256(簽名)簽名和加密和AES CBC(加密): 1.計算SHA256哈希M. 和你的公鑰2.標記H您的留言H,即加密^ h用你的RSA私鑰。這是您的簽名S. 3.生成一個隨機密鑰K. 4.用AES CBC加密M以獲得加密消息M'。 5.用收件人的公鑰加密K得到K'。 6.將K',您的簽名S和M'發送給您的收件人。

只有收件人才能撤消所有步驟:

  1. 解密K」與接收者的私有密鑰來獲得K(RSA)。
  2. 解密M」與K(AES CBC)得到消息M.
  3. 解密S採用你的公鑰(RSA)獲得H.
  4. 計算M的SHA256哈希
  5. 比較計算步驟4與H的散列(來自步驟3)。如果兩者相同,則簽名被成功驗證。