Как реализовать защиту паролем для отдельных файлов?

Джо меня избивает, но вот еще один способ, не связанный с переключением, который реализует алгоритм соответствия шаблону с набором правил.

private static string GetSomeStringOrOther(string subArea)
{
    // Create a set of pattern matching functions...
    Func<string, string, bool> matchEquals = (a, b) => a.Equals(b);
    Func<string, string, bool> matchStarts = (a, b) => a.StartsWith(b);

    // Create a rule set...
    Tuple<string, string, Func<string, string, bool>>[] cases = new []
    {
        new Tuple<string, string, Func<string, string, bool>>("4100", "ABC", matchEquals),
        new Tuple<string, string, Func<string, string, bool>>("4101", "ABC", matchEquals),
        new Tuple<string, string, Func<string, string, bool>>("4102", "ABC", matchEquals),
        new Tuple<string, string, Func<string, string, bool>>("4200", "ABC", matchEquals),
        new Tuple<string, string, Func<string, string, bool>>("600A", "XWZ", matchEquals),
        new Tuple<string, string, Func<string, string, bool>>("3*", "123", matchStarts),
        new Tuple<string, string, Func<string, string, bool>>("03*", "123", matchStarts),
    };

    // Look for a match...
    foreach(var matchCase in cases)
    {
        if(matchCase.Item3(subArea, matchCase.Item1))
        {
            // Return if it matches...
            return matchCase.Item2;
        }
    }

    // Otherwise return the default...
    return "ABCXYZ123";
}

Преимущества

  • Если вам нужно новое правило, его легко добавить в набор правил.
  • Если вам нужна новая функция сопоставления шаблонов, то ее легко добавить.
  • Недостатки

    • Новичок / Новичок и даже некоторые промежуточные разработчики могут не иметь понятия, что происходит.

    Усовершенствования

    • Замените Tuple<string, string, Func<string, string, bool>> семантическим объектом, который представляет Rule
21
задан Matt 12 September 2008 в 02:12
поделиться

5 ответов

Генерация ключей

я рекомендовал бы использовать распознанный алгоритм, такой как PBKDF2, определенный в версия 2.0 № 5 PKCS для генерации ключа от пароля. Это подобно алгоритму, который Вы обрисовываете в общих чертах, но способно к генерации более длительных симметричных ключей для использования с AES. Необходимо быть в состоянии найти библиотеку с открытым исходным кодом, которая реализует генераторы ключа PBE для различных алгоритмов.

Формат файла

Вы могли бы также рассмотреть использование Криптографическое сообщение Синтаксис как формат для Вашего файла. Это потребует некоторого исследования с Вашей стороны, но снова существуют существующие библиотеки для использования, и оно открывает возможность взаимодействия более гладко с другим программным обеспечением, как почтовые клиенты S/MIME-enabled.

Проверка пароля

Относительно Вашего требования сохранить хеш пароля при использовании PBKDF2 для генерации ключа, Вы могли бы использовать стандартный алгоритм хеширования пароля (большая соль, тысяча раундов хеширования) для этого, и получить различные значения.

, С другой стороны, Вы могли вычислить MAC на содержании. Хэш-коллизия на пароле, более вероятно, будет полезна для взломщика; хэш-коллизия на содержании, вероятно, будет бесполезна. Но это служило бы, чтобы позволить законному получателю знать, что неправильный пароль использовался для дешифрования.

Криптографическая Соль

Соль помогает мешать предварительно вычисленным атакам с подбором по словарю.

предположим у взломщика есть список вероятных паролей. Он может хешировать каждого и сравнить его с хешем пароля его жертвы и видеть, соответствует ли это. Если список является большим, это могло бы занять много времени. Он не хочет, проводят так много времени на его следующей цели, таким образом, он записывает результат в "словаре", где хеш указывает на свой соответствующий вход. Если список паролей очень, очень долго, он может использовать методы как Таблица Радуги для оставления некоторого свободного места.

Однако предполагают, что его следующая цель посолила их пароль. , Даже если взломщик знает, какова соль, его предварительно вычисленная таблица бесполезна — соль изменяет хеш, следующий из каждого пароля. Он должен перефразировать все пароли в его списке, присоединив соль цели к входу. Каждая различная соль требует различного словаря, и если достаточно солей будет использоваться, то взломщик не будет иметь пространство для хранения словарей для них всех. Торговое помещение, чтобы сэкономить время больше не является опцией; взломщик должен отступить к хешированию каждого пароля в его списке для каждой цели, на которую он хочет напасть.

Так, не необходимо держать соль в секрете. Обеспечение, что у взломщика нет предварительно вычисленного словаря, соответствующего, который конкретная соль достаточна.

24
ответ дан 29 November 2019 в 21:32
поделиться

Как сказанный Niyaz, подход звучит разумным при использовании качественной реализации сильных алгоритмов, как SHA-265 и AES для хеширования и шифрования. Дополнительно я рекомендовал бы использовать Соль для сокращения возможности создать словарь всех хэшей пароля.

, Конечно, читая Bruce Schneier Прикладная Криптография никогда не является неправильной также.

2
ответ дан 29 November 2019 в 21:32
поделиться

При использовании сильного хеш-алгоритма (SHA-2) и алгоритм устойчивого шифрования (AES) Вы сделаете прекрасный с этим подходом.

1
ответ дан 29 November 2019 в 21:32
поделиться

Есть ли действительно потребность сохранить хешированный пароль в файл. Не можете Вы просто использовать пароль (или хешированный пароль) с небольшим количеством соли и затем зашифровать файл с ним. Когда дешифрование просто пытается дешифровать файл с паролем + соль. Если пользователь дает неправильный пароль, дешифрованный файл не корректен.

Только недостатки, я могу думать, состоят в том, если пользователь случайно вводит неправильный пароль, и дешифрование является медленным, он должен ожидать, чтобы попробовать еще раз. И конечно если о пароле забывают нет никакого способа дешифровать файл.

0
ответ дан 29 November 2019 в 21:32
поделиться

Почему бы не пользоваться библиотекой сжатия, которая поддерживает защищенные паролем файлы? Я использовал защищенный паролем zip-файл, содержащий содержание XML в прошлом:}

1
ответ дан 29 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: