2014-10-10 65 views
1

我需要加密雙向(對稱)不同的令牌。這些令牌有望重複使用(例如,它們是人名),但我不希望攻擊者得出哪些加密令牌來自相同的原始令牌。鹽是單向密碼學(散列)的途徑。對稱加密和鹽

有沒有一種方法可以用於對稱密碼學,解決方法或替代方法?

回答

3

是的。正確使用,對稱加密不會透露任何有關明文的信息,甚至不會出現多個明文相同的情況。

正確使用意味着選擇使用初始化向量(IV)或隨機數(即非ECB)的操作模式,並適當選擇IV(通常爲隨機字節)。使用相同的密鑰和IV對多個明文進行加密使得這種攻擊幾乎與ECB模式一樣,並且使用靜態IV是一個常見的錯誤。

+2

請注意,除非泄漏有關名稱大小的信息,否則您可能需要將用戶名填充到特定大小。 – 2014-10-10 18:35:29

+0

@ntoskmi非常密集的答案。您能否指出一個資源,可以進一步闡述什麼是歐洲央行以及在解密時如何知道IV? – yannisf 2014-10-10 20:26:52

+0

@yannisf維基百科有一篇關於[操作模式]的文章(https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation)。特別要注意描述企鵝的一組圖像。您可以簡單地將IV與密文一起發送;它不需要保密。 – ntoskrnl 2014-10-11 14:57:58

-1

假設唯一要加密的項目是令牌(即它們沒有嵌入到更大的數據結構中),那麼Inicialization Vectors(IV)就是要走的路。

它們很容易理解:讓M爲你的令牌,填充以適應在對稱加密算法中使用的塊大小(我假定它是AES),IV是隨機數組,也是大小加密塊。

然後計算C = AES_ENCRYPT(M xor IV,K)其中C是加密數據,K是對稱密鑰。這樣,相同的消息M將不會多次以相同方式加密,因爲每次都隨機獲取IV。

要解密M,只需計算M =(AES_DECRYPT(C,K)xor IV)。

當然,IV和K都必須在解密時已知。傳送IV的最常用方式是將其沿着加密文本發送。這不會影響安全性,這與存儲鹽值非常相似,因爲加密密鑰對於其他人都是未知的。

+0

有一個假設,即要加密的數據小於或等於塊大小,情況可能並非如此,如何以安全的方式填充數據也沒有幫助刪除解密。一般的方法是使用帶有PKCS#7填充選項的CBC模式,其中IV是每個加密的不同隨機值,並且以加密數據爲前綴。 – zaph 2016-11-26 16:18:49

+0

你是對的,這可能是一個錯誤的假設。在這種情況下,強烈建議使用CBC。爲了澄清,CBC模式包括執行與我的答案中所述相同的操作,但使用先前的加密塊進行異或運算而不是原始化向量。 – agubelu 2016-11-26 18:15:40