2011-10-10 1 views
2

J'essaie de sensibiliser le besoin de authentication with encryption en utilisant un logiciel pour alerter et signaler les échecs de tentatives de vérification MAC, et de partager les résultats avec la gestion intermédiaire. Je ne suis pas un cryptographe, mais je vois la valeur d'une implémentation correcte. Idéalement, j'aimerais créer un rapport indiquant que les attaques X ont été évitées.Quelles implémentations me permettent de détecter les validations HMAC échouées pour détecter les attaques actives?

Est-ce une idée valable, ou est-ce trop simpliste? Si non, où dois-je commencer à le mettre en œuvre? (AES bas niveau, PGP, etc?)

+0

Peut-être que cela devrait aussi être étiqueté "attaque active"? Je n'ai pas le représentant, donc s'il vous plaît modifier si vous êtes d'accord. – LamonteCristo

+0

Ce n'est pas vraiment clair pour moi ce que vous essayez de faire ... avoir un serveur qui fournit une fonction de connexion, et que vous voulez enregistrer les tentatives d'authentification échouées? (Ce n'est pas vraiment lié à la cryptographie.) –

+0

@ PaŭloEbermann, je ne suis pas intéressé par une question de type Serverfault, mais plutôt pour suivre les violations de code d'authentification de message (MAC) ou tout ce qui indique que l'intégrité a été brisée. – LamonteCristo

Répondre

1

Voici un C# MAC code sample qui pourrait être modifié pour alerter ou enregistrer lorsque l'authentification échoue. Ceci est un échantillon incomplet qui ne devrait pas être utilisé AS-IS car beaucoup d'autres détails doivent être pris en considération avant la mise en œuvre Authenticate-then-Encrypt (AtE) ou Encrypt-then-Authenticate (EtA)

Il serait bon de savoir ce compteur de performance, le fichier journal ou DLL exception se rapporte à cette Erreur. J'étudierai BouncyCastle pour voir où se trouve l'exception correspondante.

// 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

Toute méthode où l'authentificateur ne peut pas déterminer si un mot de passe est valide juste à partir de l'information qu'il a fera. Les seuls systèmes qui ne vous permettaient pas d'alerter et de signaler les tentatives d'authentification infructueuses étaient ceux où une tentative d'authentification pouvait contourner le serveur. Par exemple, si l'authentificateur est une clé AES (qui peut être générée à partir d'un mot de passe ou d'une phrase secrète), il suffit à l'agent d'authentification de chiffrer ou de déchiffrer une chaîne aléatoire de 128 bits. Tout ce qu'un attaquant obtient est une chaîne aléatoire de 128 bits. Donc, pour essayer de voir si un mot de passe particulier fonctionne, il devra vous envoyer une réponse, et vous pouvez en enregistrer une incorrecte.

+0

Y a-t-il des implémentations de niveau supérieur qui consigneront cet événement pour que je puisse en rendre compte? – LamonteCristo

+0

Je pense que vous auriez du mal à trouver une implémentation qui ne fonctionne pas. La journalisation des échecs d'accès est assez standard. Ne choisissez pas un mécanisme qui rend possible des échecs indétectables. –

Questions connexes