將短消息非對稱加密成短字元串
我有一個字元串,其大小小於以下有限字元集中的 32 個字元。
- 大寫和小寫拉丁字母:
A to Z and a to z
- 數字:
0 to 9
- 特殊字元:
!#$%&'*+-/=?^_
{|}~`我希望使用生成的消息 < 64 個字元的公鑰加密此字元串。
我知道在大小和安全性之間會有一個權衡。
我希望使用生成的消息 < 64 個字元的公鑰加密此字元串。
實際上,如果您稍微降低安全性,您似乎可以。
一種方法是使用ECIES,例如 P-192。(EC-Elgamal 也是可行的——我認為這是一種更好的方法)
在這個方案中,私鑰是一個隨機值 $ r $ , 公鑰是一個值 $ P = rG $ , 在哪裡 $ G $ 是生成點。為了加密,我們選擇一個隨機值 $ s $ , 併計算兩者 $ sG $ 和 $ sP $ ; 我們發送點 $ sP $ (或者,在你的情況下,只是 x 座標)通過一個密鑰派生函式,它生成一個我們用來加密實際消息的密鑰。密文由值組成 $ sG $ (在你的情況下,只是 x 座標)和對稱加密。
現在,如果我們使用曲線 P-192,x 座標 $ sG $ 可以用192位表示;使用我們給定的字母表(有 81 個符號),這將需要 31 個字元(例如,通過將值從 0 轉換為 circa $ 2^{192} $ 進入基地 81)。
至於消息的對稱加密,我們可以使用 Format Preserving Encryption 方法
$$ 1 $$; 這可以將由 81 個符號的字母組成的消息轉換為相同字母和長度的密文。 因此,31 個符號的加密(您說您感興趣的最大符號)將加密為 31+31 = 62 個符號的消息 - 在您的要求範圍內。
安保費用:
- P-192 具有“96 位安全性”;這比我們通常使用的要少一些 - 但是,它仍然相當不錯。
- 我們確實洩漏了消息的長度(因為 Format Preserving Encryption 方法保留了長度);如果這是附加要求,您始終可以將消息填充到 32 個字節(最後一個字元表示消息的實際長度) - 這樣,我們仍然滿足長度要求
$$ 1 $$: 通常,對於 ECIES,我們在對稱加密中使用顯式完整性轉換。我認為在這種情況下不需要 - 對 FPE 的任何修改都會解密為隨機的東西,並且攻擊者總是可以用解密為隨機的東西替換密文(通過選擇隨機明文並加密它的簡單權宜之計)用公鑰)。