明文究竟是如何變成密文的?
我很難找出 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 簽名的問題似乎在這裡已經有了答案