我正在倒轉一個應用程序,但我不是AES算法的專家。 該應用程序爲用戶提供了進行離線登錄的機會。AES-256最佳實踐實施
用戶會被要求提供他用戶名和密碼
這是一個用來存儲用戶
public void EncryptLoginInfo(string username, byte[] secretShared, byte[] salt)
{
byte[] random = calc.GenerateRandomBytes();
byte[] array = aes.Encrypt(secretShared, random);
OfflineLogin loginInfo = new OfflineLogin()
{
Username = username,
SecretShared = array,
Iv = random,
Salt = salt
};
this._userCredentials.StoreOfflineLoginData(username, loginInfo);
}
的信息的功能,這是存儲在應用的內部配置文件中的信息。在下面的例子中,密碼傳遞給encryptLoginInfo是
Username: not_important
SecretShared: 4KVrjy1cQVWYpWF7aolpMS0HzhKyFf+9VXauQrXoXVUbf0bGXIDOLDJuSVhYoFo2
Iv:yil4nn02IoKsOnX5KXVsDg==
Salt: 5kJio2VQEqjomHRdQMqRVJ0zkBsmqi8K3NypC2VWJk4
如果用戶想使離線登錄,他被要求提供用戶名和他的密碼。
問題:這個算法安全嗎?如果攻擊者能夠獲得SecretShared + IV +鹽是他能夠恢復用戶的密碼(在這個具體的例子是)
這是解密函數
public void DencryptLoginInfo(OfflineLogin loginInfo)
{
byte[] array = aes.Decrypt(loginInfo.SecretShared, loginInfo.Iv);
loginInfo.SecretShared = array;
loginInfo.Iv = (byte[]) null;
}
是你能夠發現這個實現中的任何安全問題? 使用的算法應該是AES-256。。你能夠在python中實現POC來解密給定SecretShared + Iv + Salt的PASSWORD嗎?
你究竟想達到什麼目的?您是通過加密*東西來驗證用戶身份嗎?還是實際上是使用用戶的密碼加密有用的數據?請記住,Stack Overflow處理與您的問題不適合的編程有關的問題。 –
通過加密他的密碼來驗證用戶 – paolino
@paolino你不應該加密他的密碼,而應該使用基於密碼的密鑰派生函數對它進行哈希處理。好的,請修正你的問題,然後我可以修復我的答案。 – TheGreatContini