questões básicas sobre Microsoft CryptoAPI
-
13-09-2019 - |
Pergunta
Eu estive olhando através da MSDN tentando entender a crytoapi. Abaixo estão algumas perguntas e suposições a respeito de como as coisas poderiam funcionar. Quaisquer respostas ou confirmações ou refutar das minhas conjecturas muito apreciado.
De acordo com a nota que eu encontrei em http://msdn.microsoft. com / en-us / library / ms867086.aspx , o CSP mantém pares de chaves público-privadas entre as sessões.
* Does that mean they are kept indefinitely? If so, whatever signature or exchange key pairs are extant when the CSP is closed remain.
* Of what value are these containers and any key pairs they contain? I guess they could be used to sign things without obtaining a handle to a key pair.
* Is there any way to get a handle to one of the key pairs?
Parece-me como se um recipiente de chave pode conter:
* 1 signature key pair
* 1 key exchange key pair
* any number of PUBLIC keys of either signature or key_exchange type
* any number of session keys
Isso é correto? São a não emparelhado chaves destruída quando o recipiente está fechado?
O que é o método usual de criar / nomear recipientes principais? Como é que se impedir de pisar em algum outro recipiente aplicações? Eu preciso de um recipiente com chaves públicas / privadas para o recipiente temporário mencionado na seção de observações de CryptAcquireContext não é aplicável. Talvez usar criar nome que consiste de uma parte fixa de uma sequência. Foi possível eliminar o recipiente quando feito.
especifica cryptsignhash que tanto a assinatura ou a chave privada de troca de chaves é para ser usado para assinar o hash. Acho que isso significa cryptsignkey vai encontrar a chave privada criada por cryptkeygen com o Parmeter ALG_ID apropriado (valores CALG_RSA_KEYX ou CALG_RSA_SIGN).
Se eu exportar uma chave, que o keyblob conter informado que tipo de chave que é?
Se eu exportar um PUBLICKEYBLOB e transportá-lo para algum outro ambiente. Eu tenho que importar esse blob no novo ambiente antes que eu possa usá-lo para verificar uma assinatura? cryptverifysignature precisa de um identificador para a chave assim que olha como ele deve ser importado pela primeira vez. Será que a importação de um PUBLICKEYBLOB substituir a chave pública de qualquer par existente público / privado chave? EU NÃO assumir.
Solução
Isso foi um monte de perguntas. Deixe-me tentar responder-lhes:
o CSP mantém pares de chaves públicas privadas entre as sessões. Isso significa que eles são mantidos indefinidamente?
Sim, até que sejam explicitamente excluídos chamando CryptAcquireContext com a bandeira CRYPT_DELETEKEYSET.
De que valor são esses recipientes e quaisquer pares de chaves que eles contêm?
Eles são chaves persistentes que podem ser reutilizados. Se você receber um certificado em uma chave privada, você quer manter a chave privada ao redor - e você não quer exportar a chave privada se você pode evitá-lo: o CSP pode potencialmente proteger a chave muito melhor do que você pode
Existe alguma maneira de obter um identificador para um dos pares de chaves?
CryptAcquireContext seguido por CryptGetUserKey.
Parece-me como se um recipiente de chave pode conter: 1 assinatura par de chaves, um par de chaves de troca de chaves, qualquer número de chaves públicas de qualquer assinatura ou key_exchange tipo, qualquer número de chaves de sessão. É este correto?
Sim e não. As chaves públicas importadas e as chaves de sessão não são logicamente em qualquer recipiente de chave particular.
são os não pareado chaves destruída quando o recipiente está fechado?
Sim.
O que é o método usual de criar / nomear recipientes principais? Como é que uma pessoa manter-se de pisar em alguma outro recipiente aplicações?
A maioria dos aplicativos usar um GUID.
Este meio vontade cryptsignkey encontrar a chave privada criada por cryptkeygen com o apropriado ALG_ID Parmeter (valores CALG_RSA_KEYX ou CALG_RSA_SIGN).
Sim.
Se eu exportar uma chave, faz o keyblob conter informado que tipo de chave que é?
Isso depende do tipo blob selecionado, mas a maioria dos keyblobs começa com um BLOBHEADER que contém o tipo de chave.
Se eu exportar um PUBLICKEYBLOB e transportá-lo para algum outro meio Ambiente. Eu tenho que importar esse blob no novo ambiente antes de eu pode usá-lo para verificar uma assinatura?
Sim.
A importação de um PUBLICKEYBLOB substituir a chave pública de qualquer par existente público / privado chave?
Não.