Pergunta

Eu tenho a tarefa de transferir pequenas mensagens binárias (1 ou 2 kb de comprimento) entre um aplicativo de desktop e dispositivos móveis. As mensagens devem ser criptografadas de forma assimétrica (RSA, por exemplo). Pelo que eu aprendi um deve usar um sistema de criptografia híbrido para este tipo de tarefa:

  1. Gerar chave simétrica aleatória
  2. Criptografar texto simples com chave simétrica (usando AES por exemplo)
  3. Criptografar chave simétrica com a chave pública
  4. texto cifrado Transmissão e chave simétrica criptografada

Eu gostaria de não inventar um formato próprio para armazenar o texto cifrado e a chave simétrica criptografada. Então eu tropeçou padrão CMS (sintaxe de mensagem criptográfica). À primeira vista parece exatamente como o que eu preciso. Se eu entendi o padrão corretamente ele incorpora o texto cifrado e a chave simétrica criptografada, bem como informações sobre os algoritmos usados.

Alguém pode dizer se um deve usar o padrão CMS para a tarefa delineada? apoio CMS do Does OpenSSL é suficiente para minhas necessidades?

Cheers, Christian

Foi útil?

Solução

CMS definitivamente suporta a seqüência de operações que você está procurando. Em contrapartida, tanto o formato CMS em si ea API do OpenSSL para isso são bastante complexos.

Uma pequena ruga é CMS opera principalmente em termos de X.509 certificados em vez de chaves públicas. Você poderia lidar com isso em seu sistema quer pelo facto implantação de uma PKI, ou apenas utilizando certificados auto-assinado (que são basicamente equivalente a passagem chaves RSA em torno descalços, mas têm a vantagem de ser um formato genérico para a ligação a chave e metadados que às vezes é muito útil ter de qualquer maneira).

OpenSSL tem quase nenhuma documentação da API do CMS; a melhor referência para ele que eu poderia encontrar é cms.c na apps / diretório da distribuição fonte OpenSSL; o código é estruturado como uma função principal 1000 de linha, que é um pouco perturbador, mas não executar a criptografia com uma chave pública para que você provavelmente pode usar isso como um guia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top