**رمزنگاری هم‌ریختی** نوعی از رمزنگاری است که به وسیله آن می‌توان بر روی متن رمز، عملیات خاص ریاضی انجام داد و عملیات ریاضی انجام شده عیناً بر روی متن آشکار پیاده می‌شود. برای مثال یک نفر می‌تواند دو عدد رمزشده را با هم جمع کند، و رمزگشایی نتیجه، جمع آن دو عدد را نشان خواهد داد. از جمله کاربردهای رمزنگاری هم‌ریختی می‌توان به سیستم‌های رای امن و بازیابی اطلاعات مخفی اشاره کرد.

رمزنگاری هم‌ریختی جزئی
----------------------

در مثال‌های زیر علامت {\displaystyle {\mathcal {E}}(x)} نشان دهنده رمزنگاری پیام x می‌باشد. مطالب این صفحه از صفحه انگلیسی ویکیپیدیا گرفته شده است.

### Unpadded RSA

اگر رمزنگاری کلید عمومی RSA پیمانه m و توان e باشد، در نتیجه رمزنگاری یک پیام x به صورت {\displaystyle {\mathcal {E}}(x)=x^{e}\;{\bmod {\;}}m} می‌باشد. در نتیجه خصوصیت هم‌ریختی به صورت زیر می‌باشد:

{\displaystyle {\mathcal {E}}(x\_{1})\cdot {\mathcal {E}}(x\_{2})=x\_{1}^{e}x\_{2}^{e}\;{\bmod {\;}}m=(x\_{1}x\_{2})^{e}\;{\bmod {\;}}m={\mathcal {E}}(x\_{1}\cdot x\_{2})}
### ElGamal

در ElGamal cryptosystem، در یک گروه G، اگر کلید عمومی {\displaystyle (G,q,g,h)} باشد که {\displaystyle h=g^{x}}، و x کلید رمز باشد، در نتیجه رمزنگاری یک پیام m، به صورت {\displaystyle {\mathcal {E}}(m)=(g^{r},m\cdot h^{r})} می‌باشد، که به ازای یک مقدار تصادفی {\displaystyle r\in \{0,\ldots ,q-1\}} بدست می‌آید. در نتیجه خصوصیت هم‌ریختی به صورت زیر می‌باشد:

{\displaystyle {\mathcal {E}}(x\_{1})\cdot {\mathcal {E}}(x\_{2})=(g^{r\_{1}},x\_{1}\cdot h^{r\_{1}})(g^{r\_{2}},x\_{2}\cdot h^{r\_{2}})=(g^{r\_{1}+r\_{2}},(x\_{1}\cdot x\_{2})h^{r\_{1}+r\_{2}})={\mathcal {E}}(x\_{1}\cdot x\_{2})}
### Goldwasser-Micali

در رمزنگاری گلدواسر-میکالی، اگر کلید عمومی به پیمانه m و quadratic non-residue *x*, در نتیجه رمزنگاری یک بیت *b* به صورت {\displaystyle {\mathcal {E}}(b)=x^{b}r^{2}\;{\bmod {\;}}m} می‌باشد که به ازای مقدار تصادفی {\displaystyle r\in \{0,\ldots ,m-1\}} می‌باشد. خصوصیت هم‌ریختی به صورت زیر می‌باشد:

{\displaystyle {\mathcal {E}}(b\_{1})\cdot {\mathcal {E}}(b\_{2})=x^{b\_{1}}r\_{1}^{2}x^{b\_{2}}r\_{2}^{2}=x^{b\_{1}+b\_{2}}(r\_{1}r\_{2})^{2}={\mathcal {E}}(b\_{1}\oplus b\_{2})}
{\displaystyle \oplus } نشان دهنده جمع به پیمانه ۲ یا exclusive-or می‌باشد.

### Benaloh

در Benaloh cryptosystem، اگر کلید عمومی در پیمانه *m* و پایه *g* و *c* به عنوان اندازه بلوک، در نتیجه رمزنگاری پیام *x* به صورت {\displaystyle {\mathcal {E}}(x)=g^{x}r^{c}\;{\bmod {\;}}m} می‌باشد که به ازای مقدار تصادفی {\displaystyle r\in \{0,\ldots ,m-1\}} است. خصوصیت هم‌ریختی به صورت زیر می‌باشد:

{\displaystyle {\mathcal {E}}(x\_{1})\cdot {\mathcal {E}}(x\_{2})=(g^{x\_{1}}r\_{1}^{c})(g^{x\_{2}}r\_{2}^{c})=g^{x\_{1}+x\_{2}}(r\_{1}r\_{2})^{c}={\mathcal {E}}(x\_{1}+x\_{2}\;{\bmod {\;}}c)}

### Paillier

اگر در Paillier cryptosystem، اگر کلید عمومی در پیمانه *m* و پایه *g*، در نتیجه رمزنگاری پیام *x* به صورت {\displaystyle {\mathcal {E}}(x)=g^{x}r^{m}\;{\bmod {\;}}m^{2}} می‌باشد که به ازای مقدار تصادفی {\displaystyle r\in \{0,\ldots ,m-1\}} است. خصوصیت هم‌ریختی به صورت زیر می‌باشد:

{\displaystyle {\mathcal {E}}(x\_{1})\cdot {\mathcal {E}}(x\_{2})=(g^{x\_{1}}r\_{1}^{m})(g^{x\_{2}}r\_{2}^{m})=g^{x\_{1}+x\_{2}}(r\_{1}r\_{2})^{m}={\mathcal {E}}(x\_{1}+x\_{2}\;{\bmod {\;}}m)}
### موارد دیگر رمزنگاری هم‌ریختی جزئی

* Okamoto–Uchiyama cryptosystem
* Naccache–Stern cryptosystem
* Damgård–Jurik cryptosystem
* Boneh–Goh–Nissim cryptosystem

منابع
-----

1. 1 2