Segurança de aplicação - S/MIME Jaime Dias FEUP > DEEC > MRSC > Segurança em Sistemas e Redes v1 Componentes de um sistema de e-mail Interface com o utilizador (leitor de e-mails) Escrita e leitura de e-mails Transporte de e-mails MUA (Mail User Agent) e MTA (Mail Transfer Agent) SMTP, POP3 e IMAP Mensagens de e-mails (RFC 822, MIME) MRSC > SSR > seg_aplicação_smime_v1 2 1
RFC 822 Define as mensagens em duas partes: o cabeçalho e o corpo. Ambos em texto ASCII. O cabeçalho é separado do cortpo através de uma linha em branco. O cabeçalho é composto por linha de cabeçalho: To: Subject: Date: From: Received: MRSC > SSR > seg_aplicação_smime_v1 3 Exemplo de uma mensagem RFC 822 Date: Mon, 3 Apr 2006 20:15:18 +0100 From: jaime.dias@fe.up.pt To: Jaime Dias <jdias@inescporto.pt> Subject: Mensagem de e-mail blablabla MRSC > SSR > seg_aplicação_smime_v1 4 2
Limitações do formato RFC822 Só suporta texto. Mapa de caracteres exclusivamente ASCII Problemas de transmissão com: Executáveis ou outros ficheiros binários (ex: imagens jpeg) Mapa de caracteres diferentes de ASCII Mensagens demasiado grandes Conversão ASCII para EBCDIC Linhas muito longas MRSC > SSR > seg_aplicação_smime_v1 5 Solução Complementar o RFC822 com extensões MIME Permite que uma mensagem de e-mail possa transportar diversos tipos de dados: áudio, vídeo, imagens, documentos do Word, etc. MIME (Multipurpose Internet Mail Extensions): Colecção de 5 novas linhas de cabeçalho Definição de tipos de conteúdo Mecanismos de codificação dos diferentes tipos de dados de forma a poderem ser transportados em ASCII numa mensagem RFC822 MRSC > SSR > seg_aplicação_smime_v1 6 3
MIME Campos de cabeçalho MIME-Version: tem de ser 1.0 Content-Type: o tipo dos dados contidos na mensagem Content-Transfer-Encoding: indica o tipo de codificação utilizada para representar o corpo da mensagem num formato que possa ser entendido pelas entidades de transporte (ex.: radix-64) Content-ID: string para identificação únivoca de uma entidade MIME em múltiplos contextos (opcional) Content Description: útil quando os dados não são texto legível (ex.: mpeg) (opcional) MRSC > SSR > seg_aplicação_smime_v1 7 Content-Type MRSC > SSR > seg_aplicação_smime_v1 8 4
Content-Type Tipo Multipart tem 4 subtipos O mais importante é o Multipart/mixed Indica que o corpo contém múltiplas partes Cada parte pode ser separada como uma mensagem (entidade) MIME encapsulamento de entidades MIME Cada parte é separada por uma string delimitadora (boundary) definida no campo Content-Type. MRSC > SSR > seg_aplicação_smime_v1 9 Content-Transfer-Encoding quoted-printable quando a maioria dos dados são caracteres ASCII Exemplo: isto é um teste isto =E9 um teste base64 (também conhecido como radix-64) mapeamento de três bytes de dados binários em quatro ASCII Exemplo: isto é um teste axn0bydpihvtihrlc3rl MRSC > SSR > seg_aplicação_smime_v1 10 5
Exemplo de uma mensagem MIME Date: Mon, 3 Apr 2006 20:15:18 +0100 From: jaime.dias@fe.up.pt To: Jaime Dias <jdias@inescporto.pt> Subject: Mensagem de e-mail MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="---next part" ------next part Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit This is a test. Regards, Jaime ------next part Content-Type: image/jpeg Content-Transfer-Encoding: base64 VGhpcyBpcyBhIHRlc3QuIFJlZ2FyZHMsIEphaW1lDQo= ------next part-- MRSC > SSR > seg_aplicação_smime_v1 11 S/MIME Secure/Multipurpose Internet Mail Extension Adiciona extensões de segurança ao MIME Baseado em tecnologia da RSA Security MRSC > SSR > seg_aplicação_smime_v1 12 6
Serviços S/MIME enveloped data (application/pkcs7-mime; smime-type = enveloped-data) cifragem dos dados confidencialidade signed data (application/pkcs7-mime; smime-type = signed-data) assinatura dos dados integridade, autenticidade e não repúdio dados + assinatura são codificados em base64 clear-signed data (multipart/signed) assinatura dos dados integridade, autenticidade e não repúdio só a assinatura é codificada em base64 destinatários sem suporte para S/MIME consegue ler a mensagem mas não consegue verificar a assinatura signed e enveloped data encapsulamento de uma entidade noutra. A ordem pode ser qualquer uma. confidencialidade, integridade, autenticidade e não repúdio MRSC > SSR > seg_aplicação_smime_v1 13 Algoritmos criptográficos Resumos de mensagens obrigatório: SHA-1 opcional (receptor): MD5 (compatibilidade com sistemas antigos ) Assinaturas obrigatório: DSS opcional : RSA Cifragem com chaves públicas obrigatório: ElGamal opcional : RSA (512-1024 bits) Cifragem com chaves simétricas emissor: o opcional: 3DES, RC2/40 receptor: o obrigatório: 3DES o opcional: RC2/40 MRSC > SSR > seg_aplicação_smime_v1 14 7
Content-Type (S/MIME) MRSC > SSR > seg_aplicação_smime_v1 15 Processamento S/MIME Pode ser feito através de assinatura e/ou cifragem Pode ser aplicado a toda a mensagem ou apenas a uma parte (Multipart) O S/MIME processa a entidade MIME e os dados de segurança associados (IDs de algoritmos, certificatos, CRL) e produz um objecto PKCS (Public Key Cryptography Standards) PKCS #7: Cryptographic Message Syntax Standard Como o PKCS é binário é necessário convertê-lo para ASCII através da codificação base64 O resultado é uma entidade MIME do tipo pkcs (entidade S/MIME) MRSC > SSR > seg_aplicação_smime_v1 16 8
Processamento S/MIME (emissor) Entidade MIME processamento S/MIME Objecto PKCS codificação base64 Entidade S/MIME MRSC > SSR > seg_aplicação_smime_v1 17 Processamento S/MIME (receptor) Entidade S/MIME descodificação base64 Objecto PKCS processamento S/MIME Entidade MIME O receptor faz o processo inverso Descodifica o objecto PKCS No processamento S/MIME é conhecida a informação necessária para determinar quais as operações criptográficas a aplicar de modo a obter a entidade MIME original. A entidade MIME final também pode ainda ser do tipo S/MIME, necessitando de um processamento adicional. MRSC > SSR > seg_aplicação_smime_v1 18 9
EnvelopedData É gerada uma chave de sessão RC2 ou 3DES Os dados da mensagem são cifrados com a chave de sessão A chave de sessão é cifrada com a chave pública do destinatário (ex: RSA) É preparado o bloco RecipientInfo (ID do certificado do destinatário, ID do algoritmo, chave de sessão cifrada) O EnvelopedData é igual à concatenação do bloco RecipientInfo com os dados cifrados (EncryptedContent) MRSC > SSR > seg_aplicação_smime_v1 19 EnvelopedData Chave de sessão chave pública do receptor objecto PKCS EnvelopedData cabeçalho S/MIME E RecipientInfo cod. base64 corpo S/MIME: objecto PKCS codificado em base64 entidade MIME E EncryptedContent MRSC > SSR > seg_aplicação_smime_v1 20 10
EnvelopedData - Múltiplos receptores São suportados múltiplos receptores: um bloco RecipientInfo para cada um. Dados são cifrados apenas uma vez Chave de sessão é cifrada com a chave pública de cada receptor O receptor obtém a chave de sessão através da sua chave privada e depois decifra EncryptedContent; os algoritmos necessários estão especificados no bloco RecipientInfo. MRSC > SSR > seg_aplicação_smime_v1 21 EnvelopedData - Múltiplos receptores Entidade MIME Chave de sessão cifragem dos dados Entidade MIME cifrada Chave pub #1 Chave pub #2 Chave pub #n chave de sessão cifrada #1 chave de sessão cifrada #2 chave de sessão cifrada #n MRSC > SSR > seg_aplicação_smime_v1 22 11
EnvelopedData Exemplo Content-Type: application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition:attachment;filename=smime.p7m rfvbnj756tbbghyhhhuujhjhjh77n8hhgt9hg4vqpfyf467gi 7n8HHGghyHhHUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jHd f8hhgtrfvhjhjh776tbb9hg4vqbnj7567ghigfhfyt6ghyhh6 MRSC > SSR > seg_aplicação_smime_v1 23 SignedData Selecciona um algoritmo de resumo (SHA, MD5) Calcula o resumo dos dados que se pretende assinar Cifra o resumo com a chave privada do assinante a norma S/MIME não obriga a que o emissor e o assinante sejam a mesma entidade Prepara o bloco SignerInfo (ID do certificado do assinante, eventualmente CRL, ID do algoritmo de resumo, ID do algoritmo de chave pública, assinatura) SignedData é o resultado da concatenação da mensagem assinada e do bloco SignerInfo MRSC > SSR > seg_aplicação_smime_v1 24 12
SignedData Entidade MIME Chave privada do assinante Objecto PKCS SignedData SignerInfo cabeçalho S/MIME corpo S/MIME: Hash E Entidade MIME cod. base64 objecto PKCS codificado em base64 MRSC > SSR > seg_aplicação_smime_v1 25 SignedData Múltiplas assinaturas São suportados múltiplos assinantes: um bloco SignedData para cada um. MRSC > SSR > seg_aplicação_smime_v1 26 13
SignedData Múltiplas assinaturas Entidade MIME Algoritmo de resumo #1 Algoritmo de resumo #2 Algoritmo de resumo #n Chave privada #1 Chave privada #2 Chave privada #n Assinatura #1 Assinatura #2 Assinatura #n MRSC > SSR > seg_aplicação_smime_v1 27 SignedData Exemplo Content-Type: application/pkcs7-mime; smime-type=signed-data; name=smime.p7m Content-Transfer-Encoding: base64 Content-Disposition:attachment;filename=smime.p7m 567GhIGfHfYT6ghyHhHUujpfyF4f8HHGTrfvhJhjH776tbB97 7n8HHGT9HG4VQpfyF467GhIGfHfYT6rfvbnj756tbBghyHhHU HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8 MRSC > SSR > seg_aplicação_smime_v1 28 14
ClearSigning É utilizada uma mensagem do tipo multipart/signed: A primeira parte pode ser um tipo MIME qualquer A segunda parte é a assinatura Os receptores que suportam MIME mas não S/MIME conseguem ler os dados da mensagem Os receptores que suportam S/MIME usam a primeira parte como sendo a entidade MIME sobre a qual deve ser verificada a assinatura MRSC > SSR > seg_aplicação_smime_v1 29 S/MIME Clear Signing Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha1; boundary=boundary42 --boundary42 Content-Type: text/plain This is a clear-signed message. --boundary42 Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 Content-Disposition:attachment;filename=smime.p7s ghyhhhuujhjhjh77n8hhgtrfvbnj756tbb9hg4vqpfyf4674vqpfyf467g higfhfyt6jh77n8hhgghyhhhuujhjh756tb6 --boundary42-- MRSC > SSR > seg_aplicação_smime_v1 30 15