Implementation

如何為 Elgamal 實現同態乘法?

  • December 21, 2014

我想在libgcrypt 中將同態屬性添加到 Elgamal 。

這是我添加到庫中的核心程式碼。

static void 
do_homo_mul (gcry_mpi_t a, gcry_mpi_t b, gcry_mpi_t data1_a, gcry_mpi_t data1_b, gcry_mpi_t data2_a, gcry_mpi_t data2_b, ELG_public_key *pkey)
{
 mpi_normalize (data1_a);
 mpi_normalize (data1_b);
 mpi_normalize (data2_a);
 mpi_normalize (data2_b);

 mpi_mulm (a, data1_a, data2_a, pkey->p);
 mpi_mulm (b, data1_b, data2_b, pkey->p);
} 

但我無法得到正確的結果。我的程式碼有什麼問題?

如果 $ (R_1,c_1)=(g^{r_1}, A^{r_1}m_1) $ 和 $ (R_2,c_2)=(g^{r_2},A^{r_2}m_2) $ 是密文(關於同一個公鑰 $ A $ ) 對應兩條消息 $ m_1 $ 和 $ m_2 $ , 然後

$$ (R_1R_2,c_1c_2)=(g^{r_1+r_2},A^{r_1+r_2}m_1m_2) $$ 是消息的加密 $ m_1m_2 $ (請注意,計算是在 $ \mathbb Z/p\mathbb Z $ ,即取模 $ p $ ). 假設mpi_mulm(r, x, y, m)表示計算 $ r=xy\bmod m $ (對 GnuPG 原始碼的快速檢查似乎證實了這一點),這意味著確實應該解密為與和(a, b)對應的明文的乘積。(data1_a, data1_b)``(data2_a, data2_b)

反過來,這可能意味著您的正確性檢查存在缺陷。如果您想發布一些範例數據和/或程式碼,我可以進一步研究這個問題。

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