Детерминированное шифрование с использованием AES в C # - PullRequest
0 голосов
/ 14 марта 2019

Мне нужен детерминированный алгоритм шифрования, который я могу использовать для номеров социального страхования, которые я буду хранить в зашифрованном виде в 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) {}
}

1 Ответ

0 голосов
/ 19 марта 2019

Отправлено с AES-SIV , как предложено и любезно объяснено на Crypto sub-site

...