web-dev-qa-db-fra.com

Comment l'ajout d'un numéro de série aléatoire améliore-t-il la sécurité d'un certificat?

Cet article dit :

"Trouver des collisions est un processus délicat, car cela vous oblige à mordre avec les bits de la clé publique intégrée au certificat (voir ce document pour plus de détails). En outre, Microsoft aurait pu empêcher cela quelque peu en ajoutant un numéro de série aléatoire à la cert, qu'ils n'ont pas fait. "

Ma question est de savoir comment ajouter une valeur aléatoire à un certificat Améliorer Sécurité? L'attaquant n'a-t-il pas pu générer simplement un numéro de série pour créer une collision MD5?

Mise à jour:

Voici des informations sur Comment Microsoft implémente la randomisation dans une clé CA . Je ne suis pas sûr des avantages et des inconvénients de chacun.

Configurez la génération de numéro de série

Dans une CA Windows 2000, deux types de numéros de série de longueur fixe sont générés. Le registre peut être modifié pour générer un ou l'autre type. Le numéro de série par défaut est (à partir de haut à bas): DWORD de gettickcount () + un index USHort CA certificateur (0 pour démarrer) + un requérant DWORD (10 octets/20 chiffres hexadécimaux). Le formulaire alternatif est: un octet dérivé du registre + un DWORD requier + 8 octets de CryptGenrandom Sortie + A Ushort CA CERT Index + A DWORD DIREQUID (19 octets/38 chiffres hexadécimaux).

Pour activer le formulaire alternatif et définir l'octet dérivé du registre, utilisez la commande suivante:

    certutil –setreg ca\HighSerial 0x33 

La valeur des octets spécifiée sera modifiée pour effacer le bit de signalisation et pour définir un bit dans le grillage élevé pour contourner le numéro de série Codant des bogues d'ambiguïté dans certaines applications non Microsoft PKI.

Dans une CA Windows Server 2003, trois types de numéros de série à longueur fixe sont générés. Les formulaires par défaut et alternatif sont identiques à ceux de Windows 2000. Le formulaire de remplacement Windows 2000 utilise un nouveau aléatoire 8 octets générés par CryptGenrandom pour chaque numéro de série. Le nouveau formulaire de remplacement pour Windows Server 2003 utilise un nombre aléatoire fixe de 8 octets de CryptGenrandom, généré lors de la première tentative de délivrer un certificat et enregistré dans le registre comme 8 octets de la sortie CryptGenrandom fixe + A Ushort CA CERT Index + un DWORD REQRYSID ( 14 octets/28 chiffres hexadécimaux).

Pour activer le nouveau formulaire alternatif dans le registre, utilisez la commande suivante:

   certutil –setreg ca\HighSerial 0xffffffff 

Étant donné que les 8 octets aléatoires fixes de CryptGenrandom sont codés sous forme de chaîne et enregistrés dans le registre, vous pouvez les définir directement et les faire utiliser pour de nouveaux numéros de série. En fait, une chaîne hexadécimale de longueur pourrait être définie dans le registre (mais il doit y avoir un nombre pair de chiffres). Le nombre d'octets utilisés auprès du registre sera réduit s'il déborde d'un total de 19 octets pour le numéro de série. L'octet élevé est manipulé comme décrit précédemment pour éviter les problèmes de certaines applications non Microsoft. Les normes IETF spécifient un maximum de 20 numéros de série d'octets.

12

Réponse courte. La prestation provient d'un numéro de série imprévisible , et non d'un ancien numéro de série.

En effet, un numéro de série séquentiel n'ajoute aucune sécurité, car il est facilement prévisible. Mais randomiser le numéro de série (il est donc difficile de prédire) rend plus difficile l'exploitation des attaques de collision connues sur MD5 pour obtenir un certificat forgé. Laissez-moi expliquer.

arrière-plan. Lorsqu'un CA émet un certificat, il inclut une signature sur MD5 (P), pour certains certificats Pays de charge P qui inclut une clé publique, un nom de domaine et un numéro de série. . Les attaques de collision connues sur MD5 permettent à l'attaquant de choisir deux valeurs P et Q qui ont le même hachage de MD5. Cela peut être utilisé pour attaquer les CAS qui utilisent MD5, comme suit. L'attaquant utilise les attaques de collision MD5 pour rechercher P, Q avec la propriété suivante: P est une charge utile de certificat béninale selon laquelle la CA signerait volontiers (par exemple, un certificat pour un nouveau domaine que l'attaquant contrôle), mais q est un certificat diabolique Charge utile que la CA ne signerait jamais (par exemple, un certificat pour Microsoft.com). L'attaquant envoie une demande de certificole correspondant à P à la CA; La CA ne signe et renvoie le certificat signé; Et puis la signature sur ce certificat sera également une signature valide sur Q.

Notez que cette attaque oblige l'attaquant à prédire la valeur du numéro de série qui sera utilisée lorsque la CA signe le certificat de P. Si les numéros de série sont attribués de manière séquentielle, cette tâche de prédiction est facile. Mais si les numéros de série sont (disons) un nombre cryptographiquement aléatoire 128 bits, l'attaque ne s'applique plus. Par conséquent, certains ont suggéré d'utiliser des nombres de série aléatoires comme une atténuation.

Détails supplémentaires. Voir le document de recherche suivant pour plus de détails:

Recommandation. La meilleure défense est: n'utilisez pas MD5! Arrêtez-vous juste de l'utiliser. Les CAS devraient utiliser un hachage moderne comme SHA1 ou SHA256 ou SHA2. Ils ne devraient jamais utiliser MD5 lors de la délivrance des certificats.

Mais si pour une raison quelconque, vous êtes obligé d'utiliser MD5, de randomiser vos numéros de série est une atténuation raisonnable. En réalité, l'utilisation d'un numéro de série aléatoire peut ne pas être une mauvaise idée, quel que soit votre algorithme de hachage que vous utilisez, en tant que forme de ceinture et de suspension de la défense en profondeur.

15
D.W.