Rsa

我真的需要在 RSA 中使用相同的私鑰/公鑰對嗎?

  • July 22, 2016

所以我正在製作一個 Android 應用程序,我需要我的應用程序只能掃描我自己生成的二維碼,並且我想確保沒有其他人可以生成假的二維碼。

數據不敏感,任何人都可以閱讀,甚至是明文。

問題來了,我需要驗證二維碼的來源,有人建議我對其進行數字簽名,因此,我有我的私鑰,我用公鑰發送我的應用程序,然後應用程序使用檢查二維碼的公鑰

我沒有得到的一些東西:

  • 我是否使用私鑰加密了**整個消息?**或者我只是在我的消息旁邊生成一些單獨的簽名?
  • 據我所知,以 RSA 為例,每次我加密消息時,都會生成一個新的私鑰和公鑰,對吧?那麼如果公鑰在每個二維碼中不斷變化,應用程序將如何驗證/解密消息呢?

簡單地說:

我的二維碼數據是這樣的:

{"a": 1, "b": 2, "c": 3}

我希望我的應用程序確保這些數據來自授權來源,而不是由其他任何人生成。

有人建議我對其進行數字簽名,因此,我有我的私鑰,我使用公鑰發送我的應用程序,然後應用程序使用公鑰檢查 QR 碼

只要您能夠滿足 RSA(簽名大小、計算)的要求,這聽起來就是一個絕妙的主意。

我是否使用私鑰加密了整個消息?或者我只是在我的消息旁邊生成一些單獨的簽名?

您正在生成一些單獨的簽名,位於您的消息旁邊。也就是說,RSA 簽名算法(您執行的)獲取消息(和私鑰),並吐出一個“簽名”。然後,RSA 驗證算法(在手機上執行)獲取消息、簽名和 RSA 公鑰,然後輸出“簽名有效”或“無效”。

您將在二維碼中輸入您的消息和簽名。

據我所知,以 RSA 為例,每次我加密消息時,都會生成一個新的私鑰和公鑰,對吧?

沒有。有些東西被稱為“一次性簽名”,其中公鑰/私鑰只能使用一次,但 RSA 不是其中之一。相反,單個 RSA 私鑰可以簽署任意數量的消息。

引用自:https://crypto.stackexchange.com/questions/37886