Desencriptar utilizando una clave privada no exportable con CryptoAPI

Creé el par de claves RSA en Windows Key Store.

Encriptré datos (una clave simétrica) con éxito:

HCERTSTORE hstore = ::CertOpenSystemStore(NULL, L"TestStore");
PCCERT_CONTEXT pctxt = ::CertFindCertificateInStore(hstore, X509_ASN_ENCODING, NULL, 

CERT_FIND_SUBJECT_STR, L"My Test Keys", NULL);

HCRYPTPROV hprovider = NULL;
if(!::CryptAcquireContext(&hprovider,
            NULL,
            MS_ENHANCED_PROV,
            PROV_RSA_FULL,
                    NULL/*CRYPT_NEWKEYSET*/))
{
   DWORD err = ::GetLastError();
   return 0;
}

HCRYPTKEY hkey = NULL;
if(!::CryptImportPublicKeyInfo(hprovider, 
                X509_ASN_ENCODING,
                &pctxt->pCertInfo->SubjectPublicKeyInfo,
                &hkey
                ))
{
   return 0;
}

Ahora utilicé CryptEncrypt() con HCRYPTKEY.


A continuación, deseo descifrar los datos con la clave privada, pero no es exportable. Todos los ejemplos que he visto incluyen la importación de las claves.

¿Cómo puedo descifrar los datos sin exportar la clave?

0

1 Respuestas

Bueno, no soy un experto en la tienda de RSA/Microsoft, pero creo que entiendo lo que estás tratando de hacer aquí. Lo estás haciendo un poco al revés. Está utilizando la clave pública para encriptar y la privada descifrar. Entonces, la suposición es que tendrías la clave privada, ya que eso es lo que usaste para generar la clave pública.

So, let's see... to decrypt the data you need a key, right? So you can (a) encrypt the data with the public key and then find a way to export the private key, but then you'd be using something akin to private key encryption and you'd be better off using blowfish anyway, or (b) encrypt the data using your private key so that you can share the public key to decrypt. Remember CryptImportPublicKeyInfo returns a handle to it: http://msdn.microsoft.com/en-us/library/windows/desktop/aa380209(v=vs.85).aspx

So what I'm saying is that you already have your answer. It's there when you say you have a symmetric key. Either you'll use the same public key to decrypt or it will be a simple transformation: http://en.wikipedia.org/wiki/Symmetric-key_algorithm

0
agregado