Encryption
是否有任何加密算法可以讓使用者對編碼數據進行一些修改,而無需對其進行解碼?
我想用密鑰對一些數據進行編碼,並將其發送給第三方。他們不知道解碼它的密鑰,但我想讓他們有可能對其進行一些修改。然後他們把我發回去,我可以解碼它,然後得到結果。
例如讓編碼數據是整數
5
。我用一個密鑰對其進行編碼k
,它變成了xxxxxx
. 使用者可以在xxxxxx
不知不覺中應用操作k
,喜歡+5
和*2
。在這些操作之後,編碼值變為yyyyyy
. 如果我用密鑰解碼值k
,它應該是,20
就好像我在原始數據上應用了一樣。+5``*2``5
有沒有這樣的加密算法?
有沒有這樣的加密算法?
是的,這些算法被稱為“同態加密算法”;它們是公鑰加密算法(即,它們有公鑰和私鑰;使用公鑰,您可以加密數據;要解密數據,您需要私鑰)。
除了普通的公鑰加密功能外,它們還具有(使用公鑰)某人可以對加密數據執行某些操作的屬性;例如,使用加密 $ E_k(A) $ 和 $ E_k(B) $ ,他們可能能夠計算出密文 $ E_k(A+B) $ (不學什麼 $ A $ 和 $ B $ 是)。
您可以了解更多關於同態加密算法的各種風格;但是,要解決 和 的具體範例
+5
,*2
顯而易見的答案是Paillier 密碼系統,它是一個“有點”同態系統,同態運算是加法(模大數;只要中間值保持在模數之下,我們可以忽略它)。因此,對+5
加密值執行操作 $ E_k(A) $ ,我們取5,用公鑰加密形成 $ E_k(5) $ , 然後同態相加形成 $ E_k(A+5) $ . 並且,要*2
對 $ E_k(A) $ ,我們只需將它同態地添加到自身,形成 $ E_k(A+A) = E_k(2 \cdot A) $ .Paillier 有其局限性(它不能執行任何不能表示為加法的同態運算);但是,如果你能忍受它,它會很好地工作。