Elgamal-Encryption

如何在 libgcrypt 中安全地使用 Elgamal 加密?

  • July 28, 2012

libgcrypt 的 Elgamal 加密實現有多安全(它與教科書 Elgamal 有多大不同),我如何調整填充和其他預處理操作?

例如,我知道使用 RSA 我可以使用這個 S 表達式來function gcry_pk_encrypt

(data
 (flags pkcs1)
 (value BLOCK))

我可以使用oaeporpss代替“ pkcs1”。但是我對 Elgamal 有什麼用?我可以使用 Elgamal 加密和解密,使用

(data
 (value BLOCK))

但是我不知道是否使用了原始 Elgamal,或者它實際上是 DHAES 還是一些填充的 Elgamal 變體。

在 libgcrypt 中使用 Elgamal 的正確方法是什麼,我可以通過哪些選項?還是改用 RSA 會更好?

*編輯:*我想我想問的是“在 libgcrypt 中實現的 Elgamal 的預期用途是什麼?”

我以世界上最短的時間查看了程式碼,所以請不要讓我接受任何這些。但似乎實施是教科書。您提供一個數據塊,它被編碼為 1,…,p-1 範圍內的整數,然後使用標準 Elgamal 進行加密,無需填充。

似乎**沒有對二次殘差子組進行編碼,並且此實現是 /not/ CCA 安全的。如果您要加密一個大的隨機密鑰,這些可能不會殺死您,但它們絕對不是正確的加密方式。

我會說您最好使用 RSA-OAEP 進行加密,而不是破解 Elgamal。

從長遠來看,libgcrypt 應該為 Elgamal 加密實現一個安全的 KEM/DEM。DHAES 就是一個很好的例子。或者,作者應該給出一個適當的(非教科書)Elgamal 實現,該實現具有組編碼和針對自適應選擇的密文攻擊的保護。

(Elgamal 似乎是被遺忘的原語。pycrypto 也有完全相同的問題。沒有人喜歡 Elgamal,這太糟糕了,因為它是一個很棒的加密方案。)

**腳註:我沒有深入研究編碼功能(如下),所以我承認我在這一點上可能是錯誤的。但我沒有看到任何明顯的東西。這是程式碼:

init_encoding_ctx (&ctx, PUBKEY_OP_ENCRYPT, gcry_pk_get_nbits (s_pkey)); rc = sexp_data_to_mpi (s_data, &data, &ctx);

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