Encryption
使用拉格朗日/牛頓插值進行加密是個好主意嗎?
我看到拉格朗日插值通常用於秘密共享,但它可以用於加密嗎?
目標是減少數據庫 I/O 並動態計算新值。假設案例涉及客戶端
C
向伺服器發送S
一條消息m
和一個n
希望C
附加m
某種編碼的數字。S
返回到C
更新的消息m'
。所以,隨著時間的推移,m
變成了一個數字列表。假設C
一定不能看到這些數字的值。採用這種方法是否是個好主意:
- 給定一個工作數字列表 $ [e_0,e_1,e_2,\ldots,e_p] $ 上
S
,制定方程 $ y = e_0 + e_1 \times x + e_2 \times x^2 + \ldots + e_p \times x^p $ 併計算 $ p $ 使用該等式點。- 選擇一個點並將其儲存在
S
的數據庫中。編碼剩餘的 $ p-1 $ 消息中的點 $ m’ $ 並將其發送給客戶端C
。- 當
C
發回消息時,S
通過解碼消息並從其數據庫中讀取失去的點來解密消息。S
應用拉格朗日/牛頓插值法檢索 $ e_n $ .- 重複。
事實上,消息可以只是加密,但 AFAIK,拉格朗日/牛頓插值是 $ O(n^2) $ (所以建議的解密是 $ n^2 $ ) 而這裡的加密部分只有 $ O(n) $ 鑑於它只涉及簡單的替換。相比之下,AFAIK,使用 RSA 的加密和解密都是 $ O(n^2) $ .
每次收到消息時仍需要讀取數據庫(以檢索失去的數字),但我認為它相對輕量級,因為每行只需要包含兩個屬性(
id
和missing_point
)。相比之下,如果每個數字都儲存在數據庫中,它似乎是相當沉重的。這種方法是不是有點矯枉過正?如果沒有,它聽起來好嗎?希望我的描述足夠清楚。
從性能或密碼設計的角度來看,我認為這種方案沒有意義。
從密碼設計的角度來看,簡單地使用分組密碼進行加密會更好。使用分組密碼或其他合適的對稱密鑰加密方案進行加密所花費的執行時間與要加密的數據長度成線性關係(不是 $ O(n^2) $ )。您可以比通過網路發送數據更快地加密數據。所以,不需要這麼花哨的結構。
從數據庫性能的角度來看,我也懷疑這沒有意義。您並沒有減少 I/O 的總量;您不是將數據儲存在數據庫中,而是通過網路發送數據(至少兩次,可能多次)。這似乎是一個可怕的權衡。