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: [email protected] To: Jaime Dias <[email protected]> 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 MRSC > SSR > seg_aplicação_smime_v1 8 Content-Type 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: [email protected] To: Jaime Dias <[email protected]> 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 Objecto PKCS Entidade S/MIME codificação base64 processamento S/MIME MRSC > SSR > seg_aplicação_smime_v1 17 Processamento S/MIME (receptor) Entidade S/MIME Objecto PKCS descodificação base64 Entidade MIME processamento S/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 objecto PKCS chave Chave pública do de sessão receptor cabeçalho S/MIME EnvelopedData RecipientInfo E corpo S/MIME: cod. base64 objecto PKCS codificado em base64 EncryptedContent E entidade MIME 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 Objecto PKCS Entidade MIME Chave privada do assinante cabeçalho S/MIME SignedData SignerInfo Hash corpo S/MIME: cod. base64 E objecto PKCS codificado em base64 Entidade MIME 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