Мне нужен детерминированный алгоритм шифрования, который я могу использовать для номеров социального страхования, которые я буду хранить в зашифрованном виде в MongoDB и должен иметь возможность их искать.
Я придумал, чтобы использовать AES, но целенаправленно вводить его, используя неизменяемый IV. Я просто хочу убедиться, что я не полностью разрушаю шифрование и делаю только то, что мне нужно, чтобы включить поиск.
Подводя итог: если вы получили дамп базы данных с зашифрованными SSN, как показано ниже, сможете ли вы получить открытый текст с помощью какой-либо атаки, не зная IV и ключ? Поможет ли это, если я передам IV (вместо жесткого кодирования), которое будет действовать как второй ключ?
это продолжение моего другого вопроса
public class DeterministicAes
{
//random 16 byte iv
private static readonly string DeterministicIv = "YO9FhYEIpGd28mJNupCjvg==";
public static string SimpleEncryptWithPassword(string secretMessage, string password)
{
if (String.IsNullOrEmpty(secretMessage))
throw new ArgumentException("Secret Message Required!", "secretMessage");
var key = Convert.FromBase64String(password);
var iv = Convert.FromBase64String(DeterministicIv);
var cipherText = EncryptStringToBytes_Aes(secretMessage, key, iv);
return Convert.ToBase64String(cipherText);
}
public static string SimpleDecryptWithPassword(string cipherText, string password)
{
if (String.IsNullOrEmpty(cipherText))
throw new ArgumentException("Secret Message Required!", "cipherText");
var cipherTextBytes = Convert.FromBase64String(cipherText);
var key = Convert.FromBase64String(password);
var iv = Convert.FromBase64String(DeterministicIv);
return DecryptStringFromBytes_Aes(cipherTextBytes, key, iv);
}
//Credit: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.aes?view=netframework-4.7.2#examples
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) {}
static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV) {}
}