Какие реализации позволяют мне обнаруживать неудачные проверки HMAC для обнаружения активных атак? - PullRequest
2 голосов
/ 10 октября 2011

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

Я не криптограф, но вижу значение в правильной реализации.В идеале я хотел бы создать отчет о том, что атаки X были предотвращены.

Это правильная идея или она слишком упрощенная?Если нет, то с чего начать?(Низкий уровень AES, PGP и т. Д.?)

Ответы [ 2 ]

1 голос
/ 11 октября 2011

Вот пример кода MAC *1001* C #, который можно изменить для предупреждения или регистрации в случае сбоя аутентификации.Это неполный пример, который не следует использовать как есть, так как перед реализацией Authenticate-then-Encrypt (AtE) или Encrypt-then-Authenticate (EtA)

необходимо рассмотреть многие другие детали. Было бы неплохо узнать, какой счетчик производительности, файл журнала,или DLL exception относится к этой ошибке.Я буду исследовать BouncyCastle, чтобы узнать, где находится соответствующее исключение.

// Compares the key in the source file with a new key created for the data portion of the file. If the keys 
// compare the data has not been tampered with.
public static bool VerifyFile(byte[] key, String sourceFile)
{
    bool err = false;
    // Initialize the keyed hash object. 
    using (HMACSHA1 hmac = new HMACSHA1(key))
    {
        // Create an array to hold the keyed hash value read from the file.
        byte[] storedHash = new byte[hmac.HashSize / 8];
        // Create a FileStream for the source file.
        using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
        {
            // Read in the storedHash.
            inStream.Read(storedHash, 0, storedHash.Length);
            // Compute the hash of the remaining contents of the file.
            // The stream is properly positioned at the beginning of the content, 
            // immediately after the stored hash value.
            byte[] computedHash = hmac.ComputeHash(inStream);
            // compare the computed hash with the stored value

            for (int i = 0; i < storedHash.Length; i++)
            {
                if (computedHash[i] != storedHash[i])
                {
                    err = true;
                }
            }
        }
    }
    if (err)
    {
        Console.WriteLine("Hash values differ! Signed file has been tampered with!");
        // 
        // 
        // <-------- This is where the MAC alerting would go
        // 
        // 

        return false;
    }
    else
    {
        Console.WriteLine("Hash values agree -- no tampering occurred.");
        return true;
    }

} //end VerifyFile
0 голосов
/ 10 октября 2011

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

Например, если аутентификатор является ключом AES (который может быть сгенерирован из пароля или ключевой фразы), просто попросите агента аутентификации зашифровать или расшифровать случайную 128-битную строку. Все, что получает злоумышленник, - это случайная 128-битная строка. Поэтому, чтобы попытаться выяснить, работает ли определенный пароль, ему придется отправить вам ответ, а вы можете записать неверный пароль.

...