埃爾加馬爾從∗p從p∗mathbb Z^_p和GGg不是生成器從∗p從p∗mathbb Z^_p
讓 $ G $ 成為一個子群 $ \mathbb{Z}^*_p $ , $ p=23 $ . 的順序 $ G $ 是 $ |G|=11 $ . 讓 $ g=4 $ 成為 $ G $ . 考慮 ElGamal 加密方案的密鑰生成算法。假設密鑰是 $ x = 3 $ . 計算對應的公鑰 $ y $ ?
顯然解決方案如下:
對於 ElGamal 加密方案,我們有公鑰 $ y = g^x $ 在 $ G $ . 因此
$$ \begin{align} y&=g^x\bmod 23\ &=4^3\bmod23\ &=64\bmod23\ &=18 \end{align} $$
然而,這對我來說沒有意義。實際上,ElGamal 方案要求計算在 $ \mathbb{Z}^_p $ 而不是在 $ G $ 我們使用一個生成器 $ \mathbb{Z}^_p $ 而不是生成器 $ G $ . 所以我們可以寫 $ G $ 作為一些 $ \mathbb{Z}^*_q $ 然後我們計算模數 $ q $ 或者我們必須為 $ G $ .
我的推理是錯的還是對這個練習的糾正是錯誤的?
因為在練習 $ g $ is 不是 $ \mathbb Z^*_p $ ,在明確給出 ElGamal 加密定義的上下文中,該練習確實是不正確的
- 需要 $ g $ 成為消息所屬組的生成器,
- 並選擇消息 $ \mathbb Z^*_p $ , 這裡作為範圍內的整數 $ [1,22] $ .
否則,練習和它的(現在重新格式化)更正是可以的。
ElGamal 加密的通用定義(注: $ h $ 在問題使用的地方使用 $ y $ ) 有消息(代表) $ m’ $ 在有限循環群中 $ G $ 帶發電機 $ g $ . 在問題的範例中,消息將僅限於 $ G={1,2,3,4,6,8,9,12,13,16,18} $ . 這使鍛煉很好。
注意:我們不需要將該集合重寫為 $ \mathbb Z^_{11} $ ,並且不能在保持與 $ \mathbb Z^_{23} $ .
ElGamal 加密的另一種可能定義對 $ m’ $ , 允許它在任何有限交換群中取任何值(包括 $ \mathbb Z^*_p $ , 可能不限於素數 $ p $ ),並選擇一個元素 $ g $ 在那個不需要是整個組的生成器的組中(但需要生成一個大的循環子組,其中離散對數很難,並且其他屬性通常相關聯)。這仍然允許解密基組中的任何消息。在該定義中,問題的消息可以是范圍內的任何整數 $ [1,22] $ . 這也使練習保持一致。
然而,在第二個定義中,安全性受到了一些影響。當問題中的基組是 $ \mathbb Z^*_p $ 和 $ p $ 素數,和 $ g $ 生成子組 $ G $ 素數的 $ (p-1)/2 $ , 可以測試消息是否 $ m’ $ 屬於子群 $ G $ 由產生 $ g $ . 那是因為 ElGamal 的密文包括 $ c_2=m’\cdot g^z\bmod p $ 對於某個整數 $ z $ , 所以 $ m’ $ 屬於 $ G $ 當且僅當 $ c_2 $ 確實如此,我們可以通過檢查是否 $ c_2^{(p-1)/2}\bmod p,=1 $ . 這是關於消息的一位資訊洩漏 $ m’ $ 隨機挑選的 $ [1,22] $ . 這種資訊洩漏違反了密碼安全性的現代定義。我們可以:
- 忽略那個問題。這在範例中是合理的,因為它的安全問題要嚴重得多: $ p $ 足夠小,可以找到私鑰 $ x $ 從公鑰 $ g^x\bmod p $ 很容易,因此破譯很容易。 $ p $ 需要數百個十進制數字才能實現真正的安全性。
- 僅限於消息 $ m’ $ 屬於 $ G $ . 當順序 $ |G| $ 是素數 $ (p-1)/2 $ 如範例所示,這很容易。我們可以測試一下 $ m’ $ 屬於 $ G $ 通過檢查是否 $ m’^{(p-1)/2}\bmod p,=1 $ , 如果它不使用 $ \tilde m’=p-m’ $ (確實如此)而不是 $ m’ $ . 我們可以回到 $ m’ $ 解密後(例如通過要求 $ m’<p/2 $ 這允許辨識是否解密產生 $ m’ $ 或者 $ \tilde m’ $ ).
- 讓發件人製作 $ m’ $ 的隨機元素 $ \mathbb Z^*_p $ ,然後對其進行雜湊處理(這使得洩漏無關緊要)以獲得用於加密真實消息的對稱密碼的密鑰。那是混合加密。
- 讓發件人隨機選擇一個 $ r\in{1,\dots,|G|} $ ,然後計算 $ m’=g^r\bmod p $ ,它是子群的一個隨機成員 $ G $ (但我們不能選擇 $ m’ $ 直接表示要發送的長消息,因此通常仍與混合加密一起使用)。
使用它是常見的(並且在某種程度上出於安全考慮,至少出於上述原因)使用 $ g $ 這樣 $ G $ 是一組素數。使用時 $ \mathbb Z^*_p $ 作為基組,通常使用Schnorr 組,也許與 $ p $ 2048 位和 $ |G| $ 256 位,都是素數。