3. S/MIME

O S/MIME foi desenvolvido para prover segurança ao MIME. Um agente S/MIME é um software que pode atuar como um agente de envio e/ou recebimento. Um agente de envio é um software capaz de criar objetos S/MIME CMS e mensagens MIME que contenham objetos CMS. Um agente se recebimento é um software capaz de interpretar e processar esses objetos.
Um agente S/MIME deve suportar os principais algoritmos de criptografia. Por exemplo: algoritmos de hash: SHA-1 e MD-5; algoritmos de assinatira digital: DSS e RSA-PSS; algoritmos de encriptação: rsaEncryption e Diffie-Hellman key exchange.

Definições

Aqui são apresentados alguns conceitos que serão necessários para a compreensão do restante do trabalho.

  • Assinatura Digital: mecanismo para garantir autenticidade e integridade de um documento digital. É importante notar que, assinar um mensagem é diferente de criptografá-la. O objetivo da criptografia é esconder o conteúdo, para que este não esteja acessível a terceiros. Já a assinatura digital visa garantir a autoria do documento, e que a mensagem não tenha sido modificada durante sua transmissão.
  • Autoridades Certificadoras: são órgãos responsáveis pela emissão de Certificados Digitais.
  • Certificado Digital: Certificados Digitais são documentos que contém a chave pública de um usuário e os dados necessários para garantir sua identidade.
  • PKI: PKI em português significa Infra-estrutura de Chaves Públicas (ICP). As ICPs têm a função de garantir a autenticidade das chaves públicas. No Brasil, a ICP-Brasil controla seis Autoridades Certificadoras: a Presidência da República, a Receita Federal, o SERPRO, a Caixa Econômica Federal, a Serasa e a CertiSign.
Opções do S/MIME CMS

O CMS define seis tipos de conteúdo: data, signed data, enveloped data, signed-and-enveloped data, digested data e encrypted data. Destes apenas os tipos data, signed data e enveloped data são usados no S/MIME.

  • Data: Strings arbitrárias, como arquivos de texto ASCII.
  • Signed-data: esse tipo de conteúdo é utilizado para garantir a atenticidade, integridade e não-repúdio de uma mensagem. Consiste de qualquer tipo de conteúdo assinado digitalmente. Qualquer tipo de conteúdo pode ser assinado por um número qualquer de assinantes em paralelo. O processo de criação de uma assinatura digital consiste em:
    - Aplicar uma função hash sobre a menssagem que se deseja assinar;
    - Usando uma chave privada, encriptar o valor hash;
    O resultado será uma mensagem assinada digitalmente. O conteúdo e assinatura são então codificados em Base64. O receptor, por sua vez, poderá verificar a atenticidade da assinatura, decriptando a assinatura com a chave pública do emissor. Se o resultado obtido neste processo for igual ao valor hash da mensagem recebida, significa que aquela assinatura é válida, e que a mensagem não sofreu nenhuma alteração ao longo da transmissão. A chave pública do emissor deve ser obtida do seu Certificado Digital.
  • Enveloped-data: esse tipo de conteúdo é utilizado para garantir a confidencialidade de uma mensagem. Consiste de qualquer tipo de conteúdo encriptado e as chaves de encriptação para cada destinatário. A combinação do conteúdo encriptado com a chave de encriptação do conteúdo encriptada para um destinatário é chamada de digital envelope. Qualquer tipo de conteúdo pode ser encriptado para um número qualquer de destinatários em paralelo. Se um agente de envio deseja enviar uma mensagem deste tipo para um grupo de destinatários este será obrigado a enviar mais de uma mensagem. O processo de criação de uma mensagem do tipo enveloped-data, utiliza criptografia tanto por chaves simétricas quanto por chaves assimétricas. Este processo é feito da seguinte forma:

    - Uma chave de encriptação do conteúdo (chave de sessão) é gerada de maneira aleatória, e encriptada com a chave pública do destinatário, para cada destinatário.
    - O conteúdo é encriptado com a chave de sessão.
    - As informações específicas de cada destinatário são combinadas com o conteúdo encriptado para se obter a EnvelopedData. Essa informação é então codificada em Base64.
    O receptor, por sua vez, abre o envelope, decriptando a chave de sessão com sua chave privada, e depois decriptando o conteúdo com a chave de sessão obtida.
    É importante notar a necessidade de um Infra-Estrutura de Chaves Públicas (PKI) neste processo, para que o emissor conheça a chave pública do destinatário.

Cabeçalho

De forma geral, em uma mensagem S/MIME, é declarado no cabeçalho MIME o Content_Type: application/pkcs7-mime, seguido de um smime-type, que, como visto, pode ser do tipo data, signed-data ou envoloped-data.
Exemplos:

1) Cabeçalho S/MIME para mensagem assinada

 2) Cabeçalho S/MIME para mensagem encriptada

      Existe ainda a possibilidade de criarmos um objeto CMS S/MIME dentro de uma mensagem multipart. Esta opção possui a vantagem de separar os dados sobre os quais se aplica a criptografia dos dados de controle. No caso da assinatura digital, esse tipo de mensagem é chama de “detached signature”, indicando que as informação da assinatura estão separadas do texto que foi assinado.
Exemplo de uma “detached signature”: