2009-11-23 7 views
1

Je dois signer numériquement une chaîne en utilisant l'algorithme SHA-1 avec RSA en utilisant le remplissage PKCS # 1. J'ai téléchargé Turbo Power Lockbox pour l'utiliser avec le langage de programmation Delphi.Clé de signature numérique avec boîte aux lettres

Dans un previous question j'ai appris comment convertir la clé privée du format PEM au format DER (qui si je comprends bien est le format ASN.1 et est utilisé avec Lockbox).

Je reçois une "division par zéro" erreur dans le code suivant sur la SignString:

uses LbRSA,lbAsym,LbDSA; 

procedure TForm1.Button1Click(sender: TObject); 
var 
    mPrivateKey: TLbRSAKey; 
    mLbRSASSA : TLbRSASSA; 
begin 
    mPrivateKey := TLbRSAKey.Create(aks1024); 
    mPrivateKey.LoadFromFile('C:\temp\myrsakey.der'); 
    mLbRSASSA := TLbRSASSA.create(nil); 
    mLbRSASSA.HashMethod := hmSHA1; 
    mLbRSASSA.PrivateKey.Assign(mprivateKey); 
    mLbRSASSA.SignString('sign this message'); 

Voici comment je généré c: \ temp \ myrsakey.der:

c : \ openssl \ bin \ openssl req -x509 -nodes -jours 365 -newkey rsa: 1024 -sha1 -subj "/ C = US/ST = CA/L = Mountain View/CN = www.monentreprise.com" -keyout myrsakey .pem -out c: \ temp \ myrsacert.pem

Utilisez ci-dessous pour convertir PEM DER:

c: \ OpenSSL \ bin \ openssl rsa -inform PEM -outform DER -En c: \ temp \ myrsakey.pem c -out: \ temp \ myrsakey.der

Des idées pour lesquelles j'obtiens la division par zéro erreur?

Répondre

2

La clé privée que vous générez avec OpenSSL est dans un format différent de celui requis par Lockbox.
Je n'ai pas trouvé l'incantation nécessaire pour que OpenSSL génère une clé compatible Lockbox (même si OpenSSL est capable de le faire) mais à en juger par votre question précédente, vous avez déjà une clé/certificat. en utilisant Lockbox pour générer la clé est probablement inutile:

mLbRSASSA := TLbRSASSA.create(nil); 
    mLbRSASSA.KeySize := aks1024; 
    mLbRSASSA.GenerateKeyPair; 
    mLbRSASSA.PrivateKey.StoreToFile(mykeyname); 

Cependant, peut-être une meilleure suggestion est que vous pourriez éviter Lockbox tout à fait. J'ai arrêté d'utiliser Lockbox et maintenant j'utilise la bibliothèque OpenSSL/dll directement pour la signature etc en utilisant le travail de Marco Ferrante: http://www.disi.unige.it/person/FerranteM/delphiopenssl/
Il y a de bons exemples là-bas et tout commence à avoir du sens une fois que vous l'avez combiné avec une lecture de les documents OpenSSL.

+0

Merci, utile. Je pense que ce que vous dites des clés générées avec OpenSSL ne peut pas être utilisé avec LockBox. Je vais essayer la bibliothèque OpenSSL (OpenSSLUtils.pas). Je suppose que cela a du sens; Après tout LockBox a plus de 7 ans. Si cela vous aide, j'essaie de me connecter à l'AuthSub de Google en utilisant une signature numérique. –

+0

Pas nécessairement disant que cela ne peut pas être fait - mais pas sûr que ça en vaut la peine :-) Lockbox, comme indiqué, est assez vieux et l'API OpenSSL fonctionne bien une fois que vous avez compris. J'ai oublié d'ajouter que si vous utilisez unicode Delphi, vous devrez faire quelques changements de PChar à PByte ou PAnsiChar dans les fichiers pas de ce site web. Les fonctions EVP_ * sont ce que vous voulez. – shunty

Questions connexes