ElGamal暗号

暗号化スキーム

秘密鍵

  •  x \in {1..q-1}

公開鍵

通常は巡回群 Gとして、乗法群 Z_qが用いられる。

巡回群の位数と互いに素な値はその乗法巡回群の生成元となるから、 gは適当な素数を選ぶ

暗号化

 r \in {0..q-1} をランダムに選んで、 c_1 = g^r, c_2 = mh^rを計算し、  (c_1, c_2)

復号

 (c_1^x)^{-1}c_2 = (g^{rx})^{-1}mh^r = (h^r)^{-1}mh^r = m

準同型性

とはちょっと違うけど、  (c_1, c_2)に対して (c_1, 2c_2)とするだけで平文 m 2mになる

普通に乗法準同型性もあって、 mを暗号化して (c_1, c_2) m'を暗号化して (c_1', c_2')がある時、 (c_1c_1', c_2c_2')を計算すると、復号結果は mm'になる

 (h^rh^{r'})^{-1}mm'h^rh^{r'} = mm'