2015-08-22 1 views
0

Je suis nouveau sur les cartes à puce et Java Card. Je prévois d'implémenter une variante de l'algorithme de génération de clé ElGamal. Il n'est pas facile de trouver des informations, alors est-il possible de calculer ces étapes sur une carte Java?Java Card: ces opérations peuvent-elles être mises en œuvre?

  1. Trouvez le plus petit nombre premier supérieur à un nombre x (environ 2048 bits)
  2. Déterminer si un nombre g est une racine mod p primitive
  3. de exponentation modulaire, l'arithmétique sur les grands nombres (environ 2048 bits)

Je sais que la génération de clé RSA est possible sur une carte à puce, mais les différentes étapes de la génération (comme la recherche d'un nombre premier) sont-elles également possibles? Si non, y a-t-il d'autres types de jetons de sécurité qui peuvent le faire? Je prévois d'utiliser la carte NXP J3D081.

+0

Un mot: "Oui". – deviantfan

+0

Pourriez-vous me dire comment obtenir un tel nombre premier par exemple? Je n'ai rien trouvé. –

+0

Point 1 est une approche sous-optimale (lire: mauvaise); la probabilité d'un prime est ici proportionnelle à la taille de l'écart non-prime avant. Le point 3 est un calcul RSA normal (par exemple le cryptage), bien sûr c'est possible. – guidot

Répondre

0

L'algorithme El Gamal lui-même n'est implémenté sur aucune carte autant que je sache. Les primitives cryptographiques requises ne sont pas disponibles dans la carte Java. Les implémentations manuelles sont également trop lentes

+0

Les calculs d'ElGamal sont très similaires à ceux de RSA. N'est-il pas possible d'utiliser le matériel RSA pour implémenter ElGamal? –

+0

Eh bien, en jetant un coup d'oeil rapide, je pense que l'étape de multiplication est une partie très difficile. il y a un peu de hack autour de lui en utilisant RSA. Je peux jeter un oeil dans les vieux projets et pourrais donner plus d'informations le mardi –

+0

votre carte supporte-t-elle DH? –

1

Probablement tout ce que vous avez est l'implémentation RSA du javacard (y compris la variante CRT). De cette façon, vous pouvez générer quelques grands nombres premiers (en tant que composants de clé privée CRT) et faire un peu d'arithmétique modulaire (voir this question récente et la classe RSAPrivateCrtKey).

Votre plate-forme pourrait avoir quelques restrictions qui pourraient compliquer un peu les choses.

L'implémentation manuelle de n'importe quoi sera probablement lente (même si le type entier 32 bits signé est pris en charge par la carte). Descriptif: Je n'ai jamais fait ce genre de calculs donc s'il vous plaît vérifier mes pensées.

EDIT>

Le OV chip 2.0 project contient une bibliothèque Bignat qui offre arithmétique sur les grands nombres (télécharger here).

+0

Voulez-vous dire que la seule façon d'obtenir des nombres premiers est de calculer la paire de clés RSA et d'extraire p et q? Ce ne serait pas suffisant pour moi, j'ai besoin d'obtenir le prochain prime pour un nombre spécifique. –

+0

La seule carte Java pure que je connaisse (sauf la génération d'une paire de clés DSA). Vous pouvez envisager d'utiliser la fonction 'secure box' que cette puce devrait prendre en charge (je n'ai aucune expérience en la matière, mais cela vous permet d'exécuter du code natif, quelqu'un d'autre peut peut-être vous aider ...). – vlp

+1

La fonctionnalité SecureBox n'est rien que vous pouvez exécuter tout seul. C'est compliqué et implique que NXP écrit votre code natif dans le masque ROM et vous envoie des cartes manfacturées spéciales –