Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[ECDSA] pourquoi je peux pas utiliser n'importe quelle taille pour mes clés ???

4 réponses
Avatar
Elleuch Amine
Bonsoir,

J'ai écrit un petit programme de signature de fichiers en utilisant la
librairie BouncyCastle (java) et l'algo ECDSA (utilsant les courbes
elliptiques). Cependant, j'ai un petit problème. Je peux pas choisir
n'importe quelle taille de clé dans mon programme ? il y a *apparemment*
une liste très précise de tailles de clés qui est suppotée. Pour les
autres, j'obtiens une exception "java.lang.IllegalStateException: EC Key
Pair Generator not initialised". Cette liste comporte par exemple {162,
192, 239, 256 }. Si j'essaie de créer une paire de clé de taille 161 par
exemple, j'ai droit à la belle exception que j'ai mise un peu plus haut
;(. A quoi cela est dû ?? Y'a des raisons théoriques qui rendent
l'utilisation des certaines tailles de clés impossible ? Et ou est ce
que je peux obtenir la _liste_ complète (s'il y en a) des tailles des
clés pouvant être utilisés ?


Merci de vos réponses

4 réponses

Avatar
Ludovic FLAMENT
Bonsoir,

J'ai écrit un petit programme de signature de fichiers en utilisant la
librairie BouncyCastle (java) et l'algo ECDSA (utilsant les courbes
elliptiques). Cependant, j'ai un petit problème. Je peux pas choisir
n'importe quelle taille de clé dans mon programme ? il y a *apparemment*
une liste très précise de tailles de clés qui est suppotée. Pour les
autres, j'obtiens une exception "java.lang.IllegalStateException: EC Key
Pair Generator not initialised". Cette liste comporte par exemple {162,
192, 239, 256 }.


Ce doit être les tailles recommandées (imposées) pour les courbes
prédéfinies dans la librairie

Si j'essaie de créer une paire de clé de taille 161 par
exemple, j'ai droit à la belle exception que j'ai mise un peu plus haut
;(. A quoi cela est dû ??


Une fois de plus, tu utilises une librairie qui ne semble pas de bonne
qualité ou que tu utilises incorrectement ;-)

Si la librairie ne supporte pas des tailles de clef "dynamiques", elle
ne doit pas le proposer dans son API !?

Y'a des raisons théoriques qui rendent l'utilisation des certaines tailles de clés impossible ?
Non, dans la mesure où il n'y a pas de restriction sur la taille des

clefs privées. Il faut tout de même respecter le fait que la taille de
la clef privée (un entier) soit comprise en 1 et la taille de l'ordre du
point qui définie la courbe et qui un paramètre de la courbe que tu
utilises.

De manière logique et pour des raisons de performances, on utilise une
taille de clef qui soit la plus proche possible de la taille de l'ordre
du point (taille de r - 1 bits par exemple). Il est en effet inutile
d'utiliser une courbe définie sur un corps fini de taille 512 bits pour
générer une clef de 100 bits.

De la même manière on génère des clefs de 256 bits (et pas des clefs de
100 bits) quand on fait de l'AES 256.

Et ou est ce que je peux obtenir la _liste_ complète (s'il y en a) des tailles des clés pouvant être utilisés ?


Cela n'existe pas.

Pour info, voici la méthode de génération de clef (ECC) recommandée par
la norme IEEE 1363-2000

An Algorithm for Generating EC Keys
Input: valid EC parameters q, a, b, r, and G.
Output: a public key W, a private key s

1. Generate an integer s in the range 0 < s < r designed to be hard
for an adversary to guess (e.g., a random integer).
2. Compute the point W by scalar multiplication: W = sG.
3. Output W and s.

Bon courage,
--
Ludovic FLAMENT
http://ludovic.flament.free.fr


Avatar
pornin
According to Elleuch Amine :
ECDSA (utilsant les courbes elliptiques). Cependant, j'ai un petit
problème. Je peux pas choisir n'importe quelle taille de clé dans mon
programme ? il y a *apparemment* une liste très précise de tailles de
clés qui est supportée.


ECDSA travaille sur une courbe elliptique, qui est un objet
mathématique un peu compliqué. Pour être utilisable pour des besoins
cryptographiques, il faut que le nombre exact de points faisant partie
de la courbe soit connu, et si possible que ce nombre soit premier.

Compter les points sur une courbe n'est pas une chose évidente. Il y a
eu des avancées récemment sur le sujet (notamment une méthode rapide
de Harley et Mestre) mais ça reste assez lourd, notamment en taille de
code. Aussi, les bibliothèques usuelles se contentent d'utiliser un
jeu restreint et précalculé de courbes elliptiques, en général celles
publiés par le NIST (dans FIPS 186-2-change1). Utiliser une même courbe
pour beaucoup de paires de clés ne pose pas de problème de sécurité.

À chaque courbe correspond _une_ taille de clé. D'où la limitation.


--Thomas Pornin

Avatar
Elleuch Amine


Et ou est ce que je peux obtenir la _liste_ complète (s'il y en a) des
tailles des clés pouvant être utilisés ?



Cela n'existe pas.

Bon courage,


Merci beaucoup de votre réponse, Ca m'a beaucoup aidé


Avatar
Elleuch Amine
According to Elleuch Amine :

ECDSA (utilsant les courbes elliptiques). Cependant, j'ai un petit
problème. Je peux pas choisir n'importe quelle taille de clé dans mon
programme ? il y a *apparemment* une liste très précise de tailles de
clés qui est supportée.



ECDSA travaille sur une courbe elliptique, qui est un objet
mathématique un peu compliqué. Pour être utilisable pour des besoins
cryptographiques, il faut que le nombre exact de points faisant partie
de la courbe soit connu, et si possible que ce nombre soit premier.

Compter les points sur une courbe n'est pas une chose évidente. Il y a
eu des avancées récemment sur le sujet (notamment une méthode rapide
de Harley et Mestre) mais ça reste assez lourd, notamment en taille de
code. Aussi, les bibliothèques usuelles se contentent d'utiliser un
jeu restreint et précalculé de courbes elliptiques, en général celles
publiés par le NIST (dans FIPS 186-2-change1). Utiliser une même courbe
pour beaucoup de paires de clés ne pose pas de problème de sécurité.

À chaque courbe correspond _une_ taille de clé. D'où la limitation.


--Thomas Pornin


Merci de votre réponse