Tropyc Uma linguagem de Padrão para Software Criptográfico Bringel Filho [email protected] Universidade Federal do Ceará Tropyc 1 Agenda GOOCA (Generic Object-Oriented Arquitecture Architecture) Tropyc: A Pattern Language for Cryptographic Software Padrões do Tropyc Tropyc 2 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Secrecy with Sender Authentication Secrecy with Signature Signature with Appendix Message Integrity Secrecy with Integrity Secrecy with Signature with Appendix Tropyc 3 GOOCA – Generic Object-Oriented Cryptographic Architecture Contexto – Dois objetos trocam dados através de mensagens Precisam executar transformações criptográficas, sozinhos ou em combinações, nos dados Precisam de um componente criptográfico que seja flexível e que possa ser facilmente reutilizado em outras transformações criptográficas Tropyc 4 Tropyc Uma linguagem de Padrão para Softwares Criptográficos GOOCA (Generic Object-Oriented Cryptographic Architecture) Padrões baseados no GOOCA – Classificados de acordo com objetivo o criptográfico Tropyc 5 GOOCA – Generic Object-Oriented Cryptographic Architecture Problema – Como projetar uma arquitetura orientada a objeto flexível para um projeto criptográfico a fim de facilitar o reuso de componentes? Tropyc 6 GOOCA – Generic Object-Oriented Cryptographic Architecture Solução – O emissor realiza uma transformação criptográfica nos dados antes de enviá-los para o receptor – O receptor recebe a mensagem e realiza a transformação inversa para substituir os dados – O emissor e o receptor devem entrar em consenso sobre qual transformação realizar e sobre compartilhar ou distribuir chaves se necessário Tropyc 7 GOOCA – Generic Object-Oriented Cryptographic Architecture Sender Receiver send() receive() Codifier Decodifier f(x) Cryptographic Algorithm Tropyc g(x) 8 GOOCA – Generic Object-Oriented Cryptographic Architecture Sender Receiver Tropyc 9 GOOCA – Generic Object-Oriented Cryptographic Architecture Consequências – Comportamentos comuns entre as transformações criptográficas – Sistemas flexíveis e adaptáveis com requisitos de segurança baseados em criptografia – Requisitos de segurança baseados em criptografia geralmente são requisitos não funcionais para aplicações de propósito geral – A separação explícita do conteúdo em dois tipos de requisitos facilita a legibilidade e o reuso Tropyc 10 GOOCA – Generic Object-Oriented Cryptographic Architecture Usos Conhecidos – Padrões da Tropyc – Sistemas Charging per Click on the Web [5] Security-Enhanced Mailing Lists [6] A Security Architecture for the Internet Protocol [7] Client Signature on Web Documents [8] Um Framework para Venda e Distribuição Online de Publicações Baseado em Micropagamentos [9] Tropyc 11 GOOCA – Generic Object-Oriented Cryptographic Architecture Padrões Relacionados – O padrão Strategy pode ser usado para obter independência de algoritmo – O padrão Bridge pode ser usado para obter independência de implementação – O Abstract Factory pode ser usado no passo inicial de negociação para decidir que algoritmo e implementação usar Tropyc 12 Information Secrecy Contexto Emissor mensagens Receptor Interceptor Tropyc 13 Information Secrecy Problema – Como o emissor pode enviar uma mensagem para o receptor de tal forma que um interceptor não possa ler o seu conteúdo? Tropyc 14 Information Secrecy Solução – Padrão suporta crifragem e decrifragem de dados – O emissor e o receptor entram em consenso processo criptográfico chave secreta compartilhada – O emissor cifra a mensagem e manda para o receptor – O receptor decifra a mensagem cifrada Tropyc 15 Information Secrecy Consequências – Custo de tempo – Um interceptor não poderá ler o conteúdo da mensagem mas poderá modificar o conteúdo da mensagem cifrada ou realizar outro tipo de ataque – Erros na transmissão ou no armazenamento podem, potencialmente, tornar a recuperação da mensagem original impossível Tropyc 16 Information Secrecy Usos conhecidos – Cifragem de correio eletrônico Tropyc 17 Message Integrity Contexto – Mensagens recebidas podem ter sido alteradas ou substituídas por um interceptor – O emissor e o receptor não compartilham chaves criptográficas Não podem assinar mensagem ou autenticá-las com Message Authentication Codes (MACs) Tropyc 18 Message Integrity Problema – Como o receptor pode determinar se a mensagem que ele recebeu foi modificada? Tropyc 19 Message Integrity Solução – O emissor e o receptor entram em consenso para usar um MDC – O emissor calcula o MDC da mensagem e envia, com a mensagem, para o receptor – O receptor calcula o MDC da mensagem e compara-o com o recebido do emissor Se forem iguais, a mensagem é original Tropyc 20 Message Integrity Sender sendMsg() sendMDC() Codifier calcMDC() Receiver receiveMsg() receiveMDC() Cryptographic Algorithm Decodifier verifyMDC() Tropyc 21 Message Integrity Consequências – É necessário verificar um MDC relativamente pequeno para determinar se uma grande quantidade de dados foi modificada – O interceptor ainda pode substituir ambos, a mensagem e o MDC correspondente – O MDC por si só não garante a autoria da mensagem Tropyc 22 Message Integrity Usos conhecidos – Detecção da modificação de arquivos causada por vírus – Geração de pass-phrases para produzir chaves criptográficas Tropyc 23 Sender Authentication Contexto – Duas fontes querem trocar mensagens mas não podem distinguir suas próprias mensagens de mensagens que um interceptor possa ter incluído no canal de comunicação – Eles também têm a capacidade de compartilhar segredos de maneira segura Tropyc 24 Sender Authentication Problema – Como mensagens autênticas podem ser distinguidas de mensagens suspeitas? Tropyc 25 Sender Authentication Solução – O emissor e o receptor entram em consenso previamente sobre uma chave secreta compartilhada e um algoritmo criptográfico para gerar Códigos de Autenticação de Mensagens (MACs) – O emissor calcula o MAC da mensagem e envia ambos, mensagem e MAC, para o receptor – O receptor calcula o MAC novamente e compara-o com o recebido do emissor – Se forem iguais, a mensagem é autêntica Tropyc 26 Sender Authentication Consequências – Uma mensagem só pode ser autenticada se uma informação reconhecida somente pelas partes comunicantes está intrinsecamente associada a ela – Se a autenticação da informação é uma função dos dados e de um segredo, a substituição delas, ou de parte delas, pode ser detectada Tropyc 27 Sender Authentication Usos conhecidos – MACs podem ser usados na autenticação de pacotes IP na internet Tropyc 28 Signature Contexto – O emissor envia mensagens para o receptor mas eles não podem distinguir suas próprias mensagens daquelas que um interceptor possa ter inserido dentro do canal de comunicação – Além disso o emissor pode depois disputar a autoria das mensagens atualmente enviadas por ele – Em tal situação o receptor não pode provar a uma terceira parte que somente aquele emissor poderia ter enviado aquela mensagem Tropyc 29 Signature Problema – Como garantir que as mensagens têm uma origem autêntica e genuína de tal forma que o emissor não possa descartar uma mensagem enviada por ele para o receptor? Tropyc 30 Signature Solução: – O emissor e o receptor entram em consenso sobre o uso de uma chave pública de um protocolo de assinatura digital – O emissor cifra uma mensagem com sua chave privada e envia a mensagem assinada para o receptor – O receptor decifra a mensagem assinada com a chave de verificação do emissor – Se a mensagem faz sentido para o receptor então deve ser verdade que aquele é o emissor da mensagem Tropyc 31 Signature Consequências – Assinaturas são geralmente tão grande quanto os dados a serem assinados overhead intolerável – A verificação da autoria da mensagem é baseada unicamente no segredo da chave do autor Tropyc 32 Signature Usos conhecidos – Assinaturas digitais são usadas em aplicações de comércio eletrônico em autenticações de clientes e comerciantes – Podem também ser usadas para garantir a autenticidade da informação obtida na Internet Tropyc 33 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Message Integrity Signature with Appendix Tropyc 34 Signature with Appendix Contexto – O emissor e o receptor assinam as mensagens que eles trocam a fim de prevenir modificações e substituições – Todavia eles têm armazenamento e recursos de processamento limitados, e as mensagens que eles trocam são grandes e produzem grandes assinaturas Tropyc 35 Signature with Appendix Problema – Como reduzir o espaço de armazenamento requerido para uma mensagem e sua assinatura, aumentando a performance do protocolo de assinatura digital? Tropyc 36 Signature with Appendix Solução – Signature + Message Integrity – Este padrão implementa um protocolo de assinatura digital sobre um valor hash da mensagem (MDC) – O emissor calcula um valor hash da mensagem e o assina – Ambos, mensagem e valor hash assinado são enviados para o receptor – O receptor decifra a assinatura e substitui o valor hash – Ele então calcula um novo valor hash e compara-o com o substituído da assinatura – Se eles forem iguais, a assinatura e verdadeira Tropyc 37 Signature with Appendix MDC=V.verify(MDCs) Ok=D.verifyMDC(MSG,MDC) return(Ok) MDC=C.calcMDC(MSG) MDCs=S.sign(MDC) R.receiveMDC(MDCs) Sender sendMsg() sendMDC() C R Receiver receiveMsg() receiveMDC() V S Codifier Signer calcMDC() sign() Signature Algorithm EnchiperKey D Verifier Decodifier verify() verifyMDC() DechiperKey Hash Algorithm Tropyc 38 Signature with Appendix Usos conhecidos – Applets assinados são uma maneira pela qual o código java pode ser autenticado – O JDK usa o Signature with Appendix para produzir pequenas assinaturas para grandes quantidades de código Tropyc 39 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Signature with Appendix Tropyc Message Integrity Secrecy with Integrity 40 Secrecy with Integrity Contexto – O emissor e o receptor trocam mensagens cifradas mas eles não podem detectar modificações ou substituições de mensagens cifradas por um interceptor – Eles também não querem compartilhar uma chave secreta para autenticação Tropyc 41 Secrecy with Integrity Problema – Como preservar a integridade de uma mensagem cifrada sem perder o segredo? Tropyc 42 Secrecy with Integrity Solução – Information Secrecy + Message Integrity – O MDC deve ser calculado sobre a mensagem original não cifrada – Ambos, mensagem cifrada e MDC, devem ser enviados para o receptor – Este padrão precisa apenas de um par de chaves pública/privada para crifragem Tropyc 43 Secrecy with Integrity Consequências – Substituições de mensagens podem ainda fazer com que dados válidos sejam completamente adulterados ou ter o significado modificado após a decifragem Tropyc 44 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Secrecy with Sender Authentication Signature with Appendix Tropyc Message Integrity Secrecy with Integrity 45 Secrecy with Sender Authentication Contexto – O emissor e o receptor usam criptografia com chave pública para trocar mensagens cifradas – Um possível interceptor não pode ler o conteúdo das mensagens interceptadas Tropyc 46 Secrecy with Sender Authentication Contexto: Emissor Receptor Interceptor Tropyc 47 Secrecy with Sender Authentication Problema – Como o emissor pode autenticar a origem de uma mensagem cifrada sem perder o segredo? Tropyc 48 Secrecy with Sender Authentication Solução – Information Secrecy + Sender Authentication – O MAC deve ser calculado sobre a mensagem original não sobre a mensagem cifrada – Ambos, mensagem cifrada e MAC são enviados para o receptor – A chave secreta usada para calcular o MAC deve ser diferente da usada para a cifragem Tropyc 49 Secrecy with Sender Authentication MAC=C.calcMDC(MSG) R.receiveMAC(MAC) Ok=D.verifyMAC(MSG,MAC) return(Ok) MSGc=Ci.encipher(MSG) R.receiveMSG(MSGc) MSG=D.decipher(MSGc) return(MSG) Sender sendMsg() sendMAC() Co Codifier R Ci Cipher calcMAC() encipher() SecretKey EnchiperKey Cryptographic Algorithm Receiver receiveMsg() receiveMAC() D Decipher V Verifier decipher() verifyMAC() DechiperKey SecretKey Hash Algorithm Tropyc 50 Secrecy with Sender Authentication Consequências – O Sender Authentication insere um novo passo em ambos os processos de cifragem e decifragem a fim de calcular e verificar um MAC, o que pode diminuir a performance Tropyc 51 Secrecy with Sender Authentication Usos conhecidos – Secrecy e Authentication podem ser combinados a fim de manter seguros pacotes IP na Internet Tropyc 52 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Secrecy with Sender Authentication Secrecy with Signature Signature with Appendix Tropyc Message Integrity Secrecy with Integrity 53 Secrecy with Signature Contexto – O emissor e o receptor trocam mensagens cifradas mas eles não podem provar a autoria dessas mensagens – Além disso um interceptor pode modificar, substituir ou incluir mensagens no canal de comunicação de tal forma que o emissor e o receptor não possam detectar as mensagens suspeitas – O emissor e o receptor já compartilham chaves para segurança Tropyc 54 Secrecy with Signature Problema – Como o receptor pode provar a autoria de uma mensagem cifrada sem a perda do segredo, de tal forma que a integridade e autenticidade da origem estejam também implicitamente assegurados? Tropyc 55 Secrecy with Signature Solução – Information Secrecy + Signature – O emissor assina uma mensagem com sua chave de assinatura, cifra a mensagem assinada com a chave de cifragem do receptor e a envia – O receptor decifra a mensagem cifrada com sua chave de decifragem e verifica a mensagem assinada com a chave de verificação do emissor Tropyc 56 Secrecy with Signature SGN=S.sign(MSG) SGNc=C.encipher(SGN) R.receive(SGNc) SGN=D.decipher(SGNc) Ok=V.verify(SGN) return(Ok) Sender R send() C Receiver receive () S Cipher Signer encipher() sign() EncipherKey SignerKey Signature Algorithm V Verifier D verify() decipher() VerifierKey DechiperKey Decipher Cryptographic Algorithm Tropyc 57 Secrecy with Signature Consequências – O Signature pode conceder a autoria das mensagens cifradas inserindo um passo intermediário no processo crifragem/decifragem causando uma perda de eficiência Tropyc 58 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Secrecy with Sender Authentication Secrecy with Signature Signature with Appendix Message Integrity Secrecy with Integrity Secrecy with Signature with Appendix Tropyc 59 Secrecy with Signature with Appendix Contexto – Duas fontes trocam mensagens crifradas e assinadas para prevenir modificação ou substituição e para manter sigilo e aceitação da mensagem – Eles precisam gerenciar os limitados recursos de armazenamento e processamento – Além disso, as mensagens que eles trocam são muito grandes e produzem grandes assinaturas Tropyc 60 Secrecy with Signature with Appendix Problema – Como reduzir a quantidade de memória necessária para armazenar uma mensagem e sua assinatura, aumentando a performance do sistema, sem perder o segredo? Tropyc 61 Secrecy with Signature with Appendix Solução – Information Secrecy + Signature with Appendix – O emissor calcula um valor hash da mensagem e a assina com sua chave de assinatura – Ele então cifra a mensagem original com a chave de cifragem do receptor – Ambos, mensagem cifrada e valor hash assinado são enviados para o receptor – O receptor decifra a mensagem com sua chave de decifragem e decifra o valor hash assinado com a chave de verificação do emissor – O receptor calcula um novo valor hash da mensagem e compara-o com o valor recebido do emissor – Se eles forem iguais, a assinatura e verdadeira. Tropyc 62 Secrecy with Signature with Appendix H=V.verify(Hs) Ok=Dco.decode(H,MSG) Return(Ok) H=E.encode(MSG) Hs=S.sign(H) R.receiveSgn(Hs) MSG=D.decipher(MSGc) Return(MSG) MSGc=C.encipher(MSG) R.receiveMsg(MSGc) Sender sendMsg() sendSgn() Encoder encode() Cipher S Signer encipher() sign() EncipherKey SignerKey C R Receiver receiveMsg() receiveSgn() V Signature Algorithm Decoder decode() D Verifier Decipher verify() decipher() VerifierKey DechiperKey Cryptographic Algorithm Tropyc 63 Secrecy with Signature with Appendix Consequências – Novamente pequenas perdas de performance devem ser desprezíveis a fim de salvar uma quantidade de espaço relativamente grande e reduzir a quantidade de dados transmitidos Tropyc 64 Tropyc Generic Object-Oriented Cryptographic Archtecture Sender Authentication Information Secrecy Signature Secrecy with Sender Authentication Secrecy with Signature Signature with Appendix Message Integrity Secrecy with Integrity Secrecy with Signature with Appendix Tropyc 65