對ElGamal加密方案的糾結
1. 正宗的ElGamal方案構造是書上12.16

正宗的方案地位極高,又因為和DDH困難問題可以等價,常常被當做各種典范,沒有二話。
2.? lifted 版本
據(jù)說是因為擔心要加密的m不在群G中,還有是實現(xiàn)加法同態(tài),為啥說加法同態(tài)更有用呢。
改變之處在加密和解密算法:

最后一句話是說窮舉嗎?
成立的理由是:m是小數(shù)據(jù),如果太大則根據(jù)離散對數(shù)問題是難解的。
這個問題就比較無賴,說能解密就能解密,說不會泄密就不會泄密。雙重標準嗎。大數(shù)據(jù)小數(shù)據(jù)怎么分開的?
3.??
還有一種變體是ECC-Elgamal,橢圓曲線上的版本。不過是乘法變加法,乘方變數(shù)乘。
密鑰生成: 私鑰 x, 公鑰Y=xP。 P是橢圓曲線一點。
加密: (C1,C2)=(rP, m+rY),? m是曲線上一點
解密:m=C2-C1*x?
這也沒毛病,只要m是曲線上一個點就行了。
4.?
如果m不是曲線上的點呢,如果m只是一個數(shù)值呢?有下列變體:
密鑰生成: 私鑰 x, 公鑰Y=xP.? P是橢圓曲線一點。
加密: (C1,C2)=(rP, mP+rY) , m是一數(shù)值。
解密:mP=C2-C1*x,然后,為了解到m,還是要用攻擊算法。也是合理的。
和版本2一樣,感覺挺奇怪的,用攻擊算法來解密?!
?
既然因為m不是一個點,那么把m轉換成一個點,用版本3來解m行嗎?因為曲線方程是公開的,把x=m代入曲線方程,求一個點(x,y)可以嗎?用這個點去參與運算可行嗎?是因為曲線點只取有限域上的?這個m不一定求出一個點來嗎??那么找一個x坐標與m最接近的點來代替m進行運算,最后解密再倒回來。如果這樣做,找一個與m最近的點,也得窮舉?大概是這樣。
?
之所以寫出來,是因為看到不止一篇文章中有這種用攻擊算法解密的例子,一直犯嘀咕。現(xiàn)在看來他們是對的,雖然看似不太磊落。