Elgamal-Encryption
如何使用 ElGamal 加密零?
ElGamal加密算法如下:
加密一個值 $ m $ ,它選擇一個隨機值 $ r $ , 併計算
$ c_1=g^r $ $ mod $ $ q $
$ c_2=m*h^r $ $ mod $ $ q $
在哪裡 $ g $ 是組生成器, $ x $ 是私鑰並且 $ h=g^x $ 是公鑰。
但如果 $ m $ 為 0,那麼 $ c_2 $ 將始終為 0。如何處理?
好吧,你不能。
在標準 ElGamal 中,消息空間被定義為組的元素 $ \mathbb{Z}_q^*={1,\ldots,q-1} $ . 所以 $ 0 $ 不在您的消息空間中。
您可以採用指數 ElGamal,即,將消息編碼為 $ g $ . 所以代替計算
$$ c_2=mh^r \mod q $$你計算$$ c_2=g^mh^r \mod q. $$但是請注意,首先您的消息空間必須小到可以有效計算離散日誌(因為解密需要計算離散日誌)。其次,這為您提供了一個加法同態方案,而不再是一個乘法同態方案。 或者正如@Guut Boy 在他的評論中正確提到的那樣,您也可以使用上述更簡單的映射。例如,您可以簡單地映射消息空間 $ {0,\ldots,q-2} $ 到 $ {1,\ldots,q-1} $ ,即在加密前給你的消息加1,解密後減1,這樣 $ 0 $ 映射到 $ 1 $ 從而避免了這個問題。
哪種方法更適合您取決於您的應用程序(但是,您的問題並不清楚)。