2012-06-27 318 views
2

我目前正在CBC模式下使用Rijndael 256位來加密一些需要發送到別處的數據。爲了增強安全性,我採用了一個隨機生成的SHA-256散列,並使用一個公式來刪除它使用加密密鑰和初始化向量的不同部分(當然,散列與數據一起發送)。生成密鑰和IV的公式非常基本,而且由於代碼是用PHP編寫的,因此它被編碼到用戶可訪問的頁面中。我想知道的是:這是否比擁有一個常量鍵和/或IV更安全?我應該從哈希中生成一個密鑰來進行加密嗎?

+0

如果密鑰與數據一起發送,它不是加密,只是混淆。 –

+0

密碼學的基本規則是永遠不要重複使用相同的密鑰+ IV組合。這意味着每條消息應該有不同的IV。 –

+0

這真的不是一個基本的規則,否則不會有非常好的密碼學家構建會話密鑰的想法。然而,如果你確實能夠完成它,這是一個「好」的規則! – trumpetlicks

回答

2

這可能不是您想要的方式。從本質上講,它需要一個好的黑客不用花很長時間來弄清楚你的數學公式來操縱HASH來生成你的密鑰和IV。因此,你本質上是把王國的鑰匙和王國一起發給王國。

通常,這種類型的操作完成的方式是生成會話密鑰(可能與您現在正在執行此操作的方式相同),但使用公鑰加密方法來加密該會話密鑰。然後您使用公鑰加密方法將會話密鑰發送到您的數據要發送的位置。接收方擁有公鑰並可以加密通信。通道會話密鑰。

現在雙方都有通訊。通道會話密鑰和您的REAL數據可以使用此密鑰進行加密,因爲會話密鑰尚未以明文形式發送。

Rijindael是對稱密碼算法的一個例子,其中公鑰密碼算法是不對稱的。公鑰加密算法的例子是RSA,ECDSA(加密)等等。

+0

感謝您的信息。由於難以獲得會話密鑰,我決定在整個過程中使用單個加密密鑰。有什麼方法可以讓我更安全? – Palladium

+0

你確實無法得到,如果你有一個單一的密鑰,那麼在某個時間點足夠的數據將通過鏈接傳遞給一個加密圖形攻擊。 – trumpetlicks

+0

還有一件事。對於不對稱加密和發送會話ID作爲對稱加密密鑰來解密我的數據,而不僅僅是公鑰加密數據本身,有什麼好處嗎? – Palladium

0

在生成短使用密鑰。有一個長期的關鍵。與接收方同意日期格式。每一天串連您的長期密鑰與當天的日期,並與SHA-256散列它生成使用天鍵上只有日期:

dayKey <- SHA256("my very secret long term key" + "2012-06-27") 

接收器將擁有他們需要生成完全的全部信息同樣的關鍵在他們的最後。任何攻擊者都會知道日期,但不知道長期密鑰。

您需要同意午夜和其他一些細節的協議。

根據您傳遞的加密數據量,每月或每兩個月更改一次長期密鑰。您傳遞的數據越多,您需要更改長期密鑰的頻率越高。