Segurança de aplicação - S/MIME
Jaime Dias
FEUP > DEEC > MRSC > Segurança em Sistemas e Redes v1
MRSC > SSR > seg_aplicação_smime_v1 2
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
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:
MRSC > SSR > seg_aplicação_smime_v1 4
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
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 6
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
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 8
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 10
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”
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
MRSC > SSR > seg_aplicação_smime_v1 12
S/MIME
• Secure/Multipurpose Internet Mail Extension
• Adiciona extensões de segurança ao MIME
• Baseado em tecnologia da RSA Security
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
MRSC > SSR > seg_aplicação_smime_v1 14
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
MRSC > SSR > seg_aplicação_smime_v1 16
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
Processamento S/MIME (emissor)
Entidade MIME Objecto PKCS processamento S/MIME codificação base64 Entidade S/MIMEMRSC > SSR > seg_aplicação_smime_v1 18
Processamento S/MIME (receptor)
• 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.
Entidade S/MIME Objecto PKCS descodificação base64 processamento S/MIME Entidade MIME
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
MRSC > SSR > seg_aplicação_smime_v1 20
EnvelopedData
chave pública do receptor Chave de sessão entidade MIMEE
E
RecipientInfo objecto PKCS codificado em base64 cod. base64 objecto PKCSEnvelopedData cabeçalho S/MIME
corpo S/MIME:
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
MRSC > SSR > seg_aplicação_smime_v1 22
EnvelopedData - Múltiplos receptores
Entidade MIME
Chave de
sessão cifragem dos dados
Entidade MIME cifrada
chave de sessão cifrada #n Chave pub #n chave de sessão cifrada #2 Chave pub #2 chave de sessão cifrada #1 Chave pub #1
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 f8HHGTrfvhJhjH776tbB9HG4VQbnj7567GhIGfHfYT6ghyHh6MRSC > SSR > seg_aplicação_smime_v1 24
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
SignedData
Chave privada do assinante E Entidade MIME SignerInfo objecto PKCS codificado em base64 cod. base64 Objecto PKCSSignedData cabeçalho S/MIME
corpo S/MIME:
Hash
Entidade MIME
MRSC > SSR > seg_aplicação_smime_v1 26
SignedData – Múltiplas assinaturas
• São suportados múltiplos assinantes: um bloco
SignedData
para cada um.
SignedData – Múltiplas assinaturas
Entidade MIME Algoritmo de resumo #1 Chave privada #1 Algoritmo de resumo #2 Chave privada #2 Algoritmo de resumo #n Chave privada #nMRSC > SSR > seg_aplicação_smime_v1 28
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 HUujhJh4VQpfyF467GhIGfHfYGTrfvbnjT6jH7756tbB9H7n8ClearSigning
• É 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
MRSC > SSR > seg_aplicação_smime_v1 30
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