我目前正在CBC模式下使用Rijndael 256位來加密一些需要發送到別處的數據。爲了增強安全性,我採用了一個隨機生成的SHA-256散列,並使用一個公式來刪除它使用加密密鑰和初始化向量的不同部分(當然,散列與數據一起發送)。生成密鑰和IV的公式非常基本,而且由於代碼是用PHP編寫的,因此它被編碼到用戶可訪問的頁面中。我想知道的是:這是否比擁有一個常量鍵和/或IV更安全?我應該從哈希中生成一個密鑰來進行加密嗎?
回答
這可能不是您想要的方式。從本質上講,它需要一個好的黑客不用花很長時間來弄清楚你的數學公式來操縱HASH來生成你的密鑰和IV。因此,你本質上是把王國的鑰匙和王國一起發給王國。
通常,這種類型的操作完成的方式是生成會話密鑰(可能與您現在正在執行此操作的方式相同),但使用公鑰加密方法來加密該會話密鑰。然後您使用公鑰加密方法將會話密鑰發送到您的數據要發送的位置。接收方擁有公鑰並可以加密通信。通道會話密鑰。
現在雙方都有通訊。通道會話密鑰和您的REAL數據可以使用此密鑰進行加密,因爲會話密鑰尚未以明文形式發送。
Rijindael是對稱密碼算法的一個例子,其中公鑰密碼算法是不對稱的。公鑰加密算法的例子是RSA,ECDSA(加密)等等。
感謝您的信息。由於難以獲得會話密鑰,我決定在整個過程中使用單個加密密鑰。有什麼方法可以讓我更安全? – Palladium
你確實無法得到,如果你有一個單一的密鑰,那麼在某個時間點足夠的數據將通過鏈接傳遞給一個加密圖形攻擊。 – trumpetlicks
還有一件事。對於不對稱加密和發送會話ID作爲對稱加密密鑰來解密我的數據,而不僅僅是公鑰加密數據本身,有什麼好處嗎? – Palladium
在生成短使用密鑰。有一個長期的關鍵。與接收方同意日期格式。每一天串連您的長期密鑰與當天的日期,並與SHA-256散列它生成使用天鍵上只有日期:
dayKey <- SHA256("my very secret long term key" + "2012-06-27")
接收器將擁有他們需要生成完全的全部信息同樣的關鍵在他們的最後。任何攻擊者都會知道日期,但不知道長期密鑰。
您需要同意午夜和其他一些細節的協議。
根據您傳遞的加密數據量,每月或每兩個月更改一次長期密鑰。您傳遞的數據越多,您需要更改長期密鑰的頻率越高。
- 1. 未生成密鑰哈希
- 2. 哈希表密鑰生成
- 3. 從哈希中返回一個密鑰?
- 4. Android密鑰哈希無法生成
- 5. 如何爲Facebook生成密鑰哈希?
- 6. 在Android中爲Facebook應用程序生成密鑰哈希
- 7. Sql - 批量加密哈希生成
- 8. 解密的哈希和加密哈希
- 9. 從一個密鑰到另一個密鑰的紅寶石哈希交換值
- 10. Salt的密碼哈希值應該是「哈希」嗎?
- 11. 值得加密密碼哈希值嗎?
- 12. 使用隨機生成的密鑰進行加密和解密?
- 13. 加密密鑰生成
- 14. 從哈希映射中檢索密鑰
- 15. android無效密鑰哈希。密鑰哈希不匹配任何存儲的密鑰哈希
- 16. 我應該讓我的地理編碼API密鑰成爲一個祕密嗎?
- 17. 如何從PBE密鑰生成器獲取哈希值
- 18. 無效的密鑰哈希
- 19. 哈希會話密鑰
- 20. 哈希:測試密鑰
- 21. 加密哈希密碼?
- 22. 我應該加密我的Dropbox應用程序密鑰/祕密嗎?
- 23. JavaScript附加密鑰:值對哈希
- 24. 生成Android密鑰哈希在Facebook中使用
- 25. 從哈希分配密鑰到變量
- 26. 從密鑰在Ruby哈希訪問值
- 27. 將password_hash生成的兩個哈希值作爲一個密碼進行比較
- 28. 如何在進行加密時生成密鑰?
- 29. GCM API密鑰應該保密嗎?
- 30. 我應該在我的iOS應用程序中加密Amazon S3密鑰嗎?
如果密鑰與數據一起發送,它不是加密,只是混淆。 –
密碼學的基本規則是永遠不要重複使用相同的密鑰+ IV組合。這意味着每條消息應該有不同的IV。 –
這真的不是一個基本的規則,否則不會有非常好的密碼學家構建會話密鑰的想法。然而,如果你確實能夠完成它,這是一個「好」的規則! – trumpetlicks