7
votes

Signer des données à l'aide de la clé privée sur le côté client (JavaScript)

Je sais, il a l'air étrange, mais j'ai besoin de signer des données sur le côté du client à l'aide de JavaScript uniquement, aucun Ajax Backdoor sur OpenSSL côté serveur disponible. Quelqu'un pourrait-il suggérer une solution côté client pour signer des données à l'aide de la clé privée? Est-ce possible?

Merci.


0 commentaires

4 Réponses :


2
votes

Je suis tombé sur la même route que vous, vous ferez probablement mieux de mettre en œuvre quelque chose comme Oauth.

Le problème avec ce que vous proposez est qu'il n'ya absolument pas de moyen fiable de stocker la clé privée de la machine client, ni de récupérer de manière sûre la clé publique au serveur autre que HTTPS (et si vous utilisez. Https, quel est le point de cela?)

Si vous voulez vraiment continuer, il existe certaines implémentations: http: // shop- js.sourceforge.net/crypto2.htm

Et vous voulez probablement quelque chose d'horriblement ennuyant comme persistjs (http://pablotron.org/?Cid=1557) d'essayer de sauvegarder la clé privée aussi longtemps que possible.


4 commentaires

Merci pour la suggestion. J'ai déjà joué avec cet outil, c'est pour le cryptage / déchiffrement symétrique, mais j'ai besoin de signature / vérification asymétrique, comme dans Nodejs Crypto Module: Signer des données (non encodes) à l'aide de la touche privée et vérifiez dans un autre script (à l'aide de Native OpenSSL. vérificateur par certificat)


Ahh, désolé, j'ai mal interprété votre question. L'esprit si je demande quel est le point? Sauf si vous avez accès à une clé sur le disque de l'utilisateur, tout ce que vous faites est de valider que vous parlez avec le même utilisateur que vous avez précédemment effectué et que le trafic provient du cryptage client-serveur effectue la même tâche, ne pas t-il? Mozilla a un objet Crypto intégré si vous avez le luxe de dire aux gens d'utiliser Firefox.


Mon objectif est de démontrer un client autonome qui peut signer numériquement certaines données. Je ne me soucie pas de la sécurité, de stocker une clé privée en sécurité. Ceci est un prototype de démonstration uniquement.


@Mark Kahn a donné le choix de la signature et de la maintenance de ma clé privée dans ma machine ou de télécharger la clé privée (déchiffrée) sur un serveur pour signer un document que je choisirais le premier.



6
votes

trouvé super outil de signature . Il implémente RSA-SHA1 (fonctionne parfaitement) et RSA-SHA256 (fonctionne étrange) et permettent à la fois de générer la signature à l'aide de la clé privée et de vérifier la signature à l'aide de certificat.


1 commentaires

Comment pouvons-nous l'utiliser? Y a-t-il un échantillon simple pour la signature?



1
votes

Le w3c API de cryptographie Web peut être capable d'aider. Puis-je utiliser indique que les navigateurs modernes le supportent maintenant.

Pour un support de signature numérique supplémentaire, regardez globalsign / pki.js < / p>

PKIJS est une bibliothèque JavaScript pure implémentant les formats qui sont utilisé dans les applications PKI (signature, cryptage, demandes de certificat, Demandes / réponses OCSP et TSP). Il est construit sur webcrypto (web Cryptographie API) et ne nécessite aucun plug-ins. http://pkijs.org


0 commentaires

0
votes

Web crypto semble être la réponse. Voici un Tutoriel (pas le mien). En ce qui concerne le commentaire, si vous utilisez HTTPS, pourquoi avez-vous besoin de la signature - celles-ci sont nécessaires à deux fins différentes. Dans Infosec Lingo, l'ancien donne Confidentialité et ce dernier Non-répudiation .


0 commentaires