
Salut% username%!
Le 13 juin 2019, Yubico, un fabricant d'appareils d'authentification à deux facteurs, a publié
un avis de sĂ©curitĂ© indiquant la vulnĂ©rabilitĂ© critique de certains appareils Yubikey FIPS. Voyons ce qu'est cette vulnĂ©rabilitĂ© et comment elle pourrait ĂȘtre Ă©vitĂ©e.
Préface
Les Ătats ont Ă©galement leurs propres GOST, appelĂ©s FIPS - Federal Information Processing Standard. MatĂ©riel et logiciels avec lesquels l'Ătat. structures nĂ©cessaires pour se conformer Ă la FIPS.
Selon les collĂšgues que nous avons rencontrĂ©s Ă EuroCrypt 2019, la certification FIPS est un enfer, mĂȘme au point que des experts FIPS viennent vous voir, lancent votre logiciel en mode dĂ©bogage, modifient les valeurs en mĂ©moire et vĂ©rifient s'il tombe lĂ oĂč il est prĂ©vu.
MalgrĂ© cela, obtenir une certification et devenir conforme Ă la norme FIPS est rĂ©el. Par consĂ©quent, les produits et les entreprises qui fournissent des services Ă l'Ătat sont bien plus nombreux que les nĂŽtres.
ECDSA
à l'intérieur du jeton USB de Yubico, il y a un stockage pour les clés et un moteur qui implémente notamment ECDSA. Lors de l'enregistrement, la clé publique du jeton est transférée sur le serveur et stockée.
Et lors de la connexion, le serveur envoie une chaßne aléatoire au client, qu'il signe avec les méta-informations, comme par exemple un domaine.
En bref sur le fonctionnement de l'ECDSA ou de la signature numérique sur les courbes elliptiques. Certains détails sont omis pour faciliter la présentation:
- Nous considérons le hachage du message et le traduisons en nombre. .
- Nous générons un nombre aléatoire cryptographiquement fort k.
- Calculer le point oĂč G est le point de base de la courbe appelĂ©e gĂ©nĂ©rateur (constante)
- Nous calculons oĂč n est l'ordre du point de base (constant)
- Nous calculons oĂč d est la clĂ© privĂ©e
- La signature numérique se compose d'une paire de chiffres r, s
Il est essentiel que le nombre k soit non seulement secret, mais toujours différent. Sinon, il devient possible de calculer la clé privée.
Par exemple, nous avons deux signatures (r, s) et (r1, s1), qui ont Ă©tĂ© reçues pour diffĂ©rents messages m et m1, mais en utilisant le mĂȘme secret k. Calculons la clĂ© privĂ©e.
- L'attaquant calcule e et e1.
- Depuis alors nous pouvons découvrir k.
- Depuis , alors nous pouvons calculer d.
- d - clé privée
Si les nombres k sont différents, mais
pas tout Ă fait , vous pouvez Ă©galement calculer la clĂ© privĂ©e, il vous suffit de forcer un peu. Au fait, en 2013, j'ai dĂ©jĂ
écrit comment le DSA maladroitement implémenté (EC) s'est cassé sur la PlayStation et d'autres produits, je recommande fortement de le lire.
Yubico
Ainsi, dans un certain nombre de produits Yubico FIPS, il y avait un bogue dans lequel les nombres k immédiatement aprÚs avoir allumé le jeton n'étaient pas entiÚrement aléatoires. Et il y avait une réelle opportunité de calculer la clé privée cùblée à l'intérieur. Par conséquent, ils ont rappelé des appareils vulnérables et émis une notification.
Que pourrait-on faire?
D'une maniÚre générale, le problÚme est depuis longtemps résolu. Depuis 2013, il existe la
RFC 6979 , qui décrit un ECDSA
déterministe obtenu à partir de l'ordinaire à travers plusieurs modifications simples. De plus, en 2014, lors du développement de la norme U2F, c'est précisément en raison de problÚmes potentiels avec le RPS que la FIPS a ouvertement
proposé de passer à l'ECDSA déterministe, mais l'offre a été rejetée. C'est l'une des raisons pour lesquelles FIPS signifie F * cked-up, Insecure, Persnickety Standards.
Yubico pourrait officiellement répondre aux exigences FIPS pour le caractÚre aléatoire du nombre k, mais utiliser une solution de contournement, générant k de maniÚre déterministe, puis le XOR avec le fait qu'il a émis un RNG (ou en exécutant tout via KDF). Mais cela n'a pas été fait.
Et nous?
Et nous avons la mĂȘme chose. GOST R 34.10-2012 - essentiellement le mĂȘme ECDSA, juste avec des courbes diffĂ©rentes. Les exigences pour gĂ©nĂ©rer le nombre k restent les mĂȘmes que dans l'ECDSA traditionnel. L'un des fabricants de nos jetons effectue-t-il la solution de contournement dĂ©crite ci-dessus? Utilise-t-il la version dĂ©terministe de l'ECDSA? J'en doute.
S'il y a des représentants de développeurs russes, il serait intéressant d'écouter leur avis à ce sujet. Ou du moins de garder cela à l'esprit.
Merci de votre attention.