где хранить симметричный c ключ шифрования aes - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть компонент, который сохраняет конфиденциальные данные в файл. Для этого он расшифровывает содержимое перед тем, как записать конец. Зашифровывает его при чтении:

internal static readonly byte[] AesEncryptionKey = Encoding.ASCII.GetBytes("NoNoDontSeeMeI'mtotallySecret?*%");

internal static readonly byte[] AesEncryptionIV = Encoding.ASCII.GetBytes("This is the IV%%");

internal void Serialize(DataNodeSystem systemnode)
{
    string sFilename = systemnode.GetSerializationFilename();

    Stream writer = null;
    try
    {
        writer = new FileStream(sFilename, FileMode.Create, FileAccess.Write);
        using (AesManaged aesManagesd = new AesManaged())
        {
            Stream cryptoStream = null;
            try
            {
                cryptoStream = new CryptoStream(
                    writer, aesManagesd.CreateEncryptor(AesEncryptionKey, AesEncryptionIV),
                    CryptoStreamMode.Write);

                writer = null;

                using (StreamWriter unicodeStreamWriter = new StreamWriter(cryptoStream, Encoding.Unicode))
                {
                    cryptoStream = null;

                    var serializer = new XmlSerializer(GetType(), new XmlRootAttribute("SystemNodes"));
                    serializer.Serialize(unicodeStreamWriter, this);
                }
            }
            finally
            {
                if (cryptoStream != null)
                {
                    cryptoStream.Dispose();
                }
            }
        }
    }
    finally
    {
        if (writer != null)
        {
            writer.Dispose();
        }
    }
}

Созданный файл не может зависеть от компьютера, поскольку компонент должен иметь возможность читать / записывать файлы, поступающие с другого компьютера. У нас есть несколько клиентских программ (. net и нативный c ++), работающих в одной и той же системе, которые используют компонент для получения содержимого из зашифрованного файла

Так что вопрос: как я могу предотвратить просто просматриваете мой код с помощью ILSpy, Reflector или чего-то в этом роде и просто читаете ключ и расшифровываете файл? Нельзя спрашивать у пользователя ключ. Кроме того, машина может или не может быть подключена к inte rnet, поэтому получить что-то с нашего сервера тоже не вариант

...