Encryption

明文究竟是如何變成密文的?

  • September 1, 2016

我很難找出 PlainText 如何變成 Ciphertext。我了解我執行以下操作:PlainText -> RSA/AES/Whatever -> Ciphertext

有人可以告訴我這是怎麼發生的嗎,我不確定在使用 RSA 時數據(更具體地說是文本)是如何變成這樣的,它使用素數從以下位置生成以下輸出Test

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2

hIwDHM1PjJSQd3UBA/91V6HzAJ8E5a3nWttSS1/XDTtE12h9T+4u0kyBHEIunqTr
eoA7aHJla8BxDrxXeJ0z8qR3oA2SIVIWw8XDoBxoNqt34wNO2bATcOXNGmIha06n
vhtFvkdHQANMt1n2wjr88y5mHMpiBYTKOSUdAIgItBDLYA5EIe7tW1o97kHrPtLA
LAGxS4ZwSw2+sHIi8p4CVmyJO/2oIVgYqmp+hDGqs8yNikf0fPpdqLYq5cxOV51s
wzzjZABB4vbrcGsxSt7m/dEyzCLG8wGtzGfYqnNvJxq1rPb6q0zPvum4G5CcSUvo
Dd9vVjNO6+BqGD7ZawGOqa1SfSubIoMJefPZCF1lgLz3qm/vqv1UYnwvZkVFbcAE
WbpqVA1G/Ol6ym2/m9OsqTjLMHViZ7lQfDMOI2x9d5NhBrgCkzCu6wLStO82G9ov
9rQFKzIyyOYu30lU3cO/BQ2Blzqwm+vp0XqlLmJi7lr61DfFaKh8+iWp0J74
=IaiN
-----END PGP MESSAGE-----

以及如何Test像下面的簽名消息那樣簽名?我知道它使用 SHA256,但它會用你的私鑰對雜湊進行簽名嗎?

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Test
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iJwEAQEIAAYFAlfHNb4ACgkQnCfhDHW4n/i7JgP+LB4DDKDcAbPOLHd0LCnVNy5S
08snokVv3+3o35KHJApBU2YzX8ZcRxT8AjpUTVfVW6dpOdiTQtTA47ZdJ5mLUvsQ
ftFsz+UrclJ+xqSeNbKln9MebHsfQetrZ7VvG6fD3vAvO+6IwYw+4K5I1XUUNZzb
VY0D+Cs5T820ddStLTM=
=UE3G
-----END PGP SIGNATURE-----

您在問一個非常籠統的問題:明文如何變成密文。好吧,明文用作加密函式的輸入,通常定義為 $ C = E(K, M) $ 或者 $ C = E_K(M) $ 在哪裡 $ E $ 是加密函式, $ K $ 是關鍵, $ M $ 是消息或明文,並且 $ C $ 當然是密文。所以密文是加密函式輸出的任何東西(除非輸出是 $ \perp $ ,即輸入不符合要求)。

您已將字元串定義"Test"為輸入,但現代密碼對字節進行操作。這意味著"Test"首先必須將其編碼為字節數組。這是使用字元編碼(例如 UTF-8)執行的。

然而,PGP 定義了一個完整的協議容器格式。它不只是輸出密文本身,它定義了一個基於數據包的容器格式,它指定了使用的密鑰和算法等。這個協議和容器格式在RFC 4880: OpenPGP Message Format中指定。這還包括簽名的容器以及如何計算它。

OpenPGP 可以使用不同的密碼。通常,儘管它使用混合密碼系統,其中非對稱密碼的公鑰(例如 RSA)對對稱密碼的密鑰進行加密。然後,該密鑰又用於加密實際數據。

請注意,簽名不稱為密文,該術語特定於加密/解密。

直接從關於 RSA 的維基百科文章中提取:

加密

假設 Bob 想向 Alice 發送消息 M。

他首先將 M 轉換為整數 m,使得 0 ≤ m < n 並且 gcd(m, n) = 1(即 m 和 n 是互質整數),通過使用被稱為填充方案的商定的可逆協議。然後,他使用 Alice 的公鑰 e 計算密文 c,對應於

$ {\displaystyle c\equiv m^{e}{\pmod {n}}} $

這可以有效地完成,即使對於 500 位數字,使用模冪運算也是如此。然後 Bob 將 c 傳輸給 Alice。

解密

Alice 可以通過計算使用她的私鑰指數 d 從 c 中恢復 m

$ {\displaystyle c^{d}\equiv (m^{e})^{d}\equiv m{\pmod {n}}} {\displaystyle c^{d}\equiv > (m^{e})^{d}\equiv m{\pmod {n}}} $

給定 m,她可以通過反轉填充方案來恢復原始消息 M。

簡單地說:

  • 將消息編碼為數字
  • 將數字提高到冪
  • 通過將其除以 RSA 模數並取餘數來減少以這種方式獲得的較大數字

就實際的加密行為而言,就是這樣。

基於模數的結構,您可以通過利用一些數學關係來恢復您提高和減少的原始數字。形成模數的人通常不與其他任何人共享結構,因此將是唯一可以將密文反轉回原始消息的人。此外,這意味著您不能簡單地使用任意模數來執行此技巧,它必須滿足某些標準。

請注意,這只是 RSA 加密的工作方式,並且與 AES 等對稱算法的功能完全無關,應該在單獨的問題中提出。您關於 RSA 簽名的問題似乎在這裡已經有了答案

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