Baixe o app para aproveitar ainda mais
Prévia do material em texto
Atividades sobre o Capitulo 9 A empresa TiBank é um banco digital. Como ela cresceu rapidamente, teve que mudar a infraestrutura de serviços para atender às demandas dos novos clientes. Para isso, ela teve que migrar todas as aplicações e bancos de dados para uma arquitetura distribuída. Durante o desenvolvimento do projeto a equipe de segurança da informação se deparou com alguns problemas e necessita tomar algumas decisões de projeto. 1. Para comunicação e troca de informação entre os gerentes dos diversos setores é necessário garantir que os dados sejam criptografados. Portanto, cada gerente precisa ter uma forma de criptografar as mensagens e enviar através de uma aplicação de envio de mensagens. 2. Também é necessário garantir a integridade das mensagens, a confidencialidade e o não repúdio. Portanto, é necessário garantir que não haja modificações maliciosas nas mensagens durante o envio e que os gerentes não hajam de maneira maliciosa, negando ou alegando o não recebimento das mensagens. 3. A equipe também precisa decidir como enviará a criptografia escolhida para seus gerentes e como garantirá a confidencialidade e integridade após o envio. Uma vez que os gerentes não precisam estar no escritório da TiBank para realizar suas atividades e toda comunicação é feita através da internet que é um canal não seguro. Tendo em mente que o principal mecanismo para garantir comunicação segura de mensagens trocadas em rede é o uso de um canal seguro, criptografado, e que garanta a Autenticação, Integridade e Confidencialidade, então para resolver a questão da empresa TiBank, supracita, iremos definir como política de segurança que somente usuários do tipo gerentes podem utilizar determinado serviço de mensagens ou software para trocada de mensagens. Uma vez definida essa política de segurança podemos então, com o foco no item 1, definir uma mecanismo de segurança que nesse caso será a implementação de criptografias nas mensagens trocadas entres os gerentes, onde popularmente implementa-se a criptografia utilizando o algoritmo criptográfico de chave pública RSA, uma das vantagens de se usar esse algoritmo para criptografia é que o fato de que não há nenhuma método conhecido para encontrar com eficiência os fatores primos de grandes números dessa forma tornando esse método seja eficaz e difícil de quebrar. Nesse tipo de criptografia as chaves pública e privada são construídas de acordo com números primos muito grandes, logo para quebrar o RSA equivale a encontrar esses dois números primos que por enquanto se mostra uma tarefa inviável por meio da computação. Sabendo disso para gerar as chaves privada e pública esse algoritmo requer quatro etapas: 1º Escolhe dois números primos muito grandes p e q. 2º Calcular n = p X q e z = (p-1) X(q-1) 3º Escolher um número d que seja primo em relação a z 4º Calcular o número e tal que e X d = 1 mod z Assim sendo, um desses números pode ser usado para decifração, ao passo que outro número é usado para criptografia. Porém só um desses dois números pode ser público. O algoritmo de criptografia RSA considera cada mensagem apenas como uma sequência de bits. Primeiro cada mensagem é dívida em blocos de comprimento fixo, e cada bloco, interpretado como um número binário, deve se encontrar no intervalo determinado pelo algoritmo (0 <= m < n). Para criptografar a mensagem o remetente calcula para cada bloco, o valor c = m (mod n) que então é enviado ao receptor. A decifração no lado receptor ocorre com o cálculo m = c (mod n). Observação, para a criptografia, ambos e e n, são necessários, ao passo que a decifração requer conhecer os valores de d e n. Mas sabemos que a complicação vai além disto, e visando o item 2, então iremos implementar o uso de assinatura digital, vinculada exclusivamente na mensagem, de modo a impedir que modificações passem despercebidas, e assim (com a assinatura podendo ser confirmada como genuína), mais tarde quem a enviou não poderá negar o seu envio. É necessário, para que ocorra a troca de chaves de tempos em tempos, uma autoridade central que monitore quando as chaves são trocadas, e também o uso de marcas de tempo na assinatura da mensagem. Como precisamos associar uma assinatura exclusivamente com uma única mensagem específica, um esquema mais barato e indiscutivelmente mais elegante é usar um resumo de mensagem, que é uma sequência de bits de comprimento fixo h, que foi calculado com base em uma mensagem de comprimento arbitrário m por meio de uma função de criptografia de hash H. Se m for mudada para m’, seu hash H (m’) será diferente de h = H(m), de modo que é fácil detectar que ocorreu uma modificação. A função Hash ela é usada para calcular um resumo de mensagem de comprimindo fixo de 128 bits com base em uma cadeia binaria de entrada de comprimento arbitrário. Em primeiro lugar, a cadeia de entrada é preenchida até um comprimento de 448 bits (módulo 512); depois disso, o comprimento da cadeia de bits original é adicionado como um inteiro de 64 bits. Na verdade, a entrada é convertida em uma série de blocos de 512 bits. Como podemos notar na figura acima, a função Hash começa com certo valor constante de l28 bits. o algo ritmo prossegue em k fases, onde k é a quantidade de número de blocos de 512 bits que abrange a mensagem preenchida. Durante cada fase é calculado um resumo de 128 bits de acordo com um bloco de dados de 512 bits que vem de uma mensagem preenchida e do resumo de 128 bits calculado na fase precedente. Uma fase em MD5 consiste em quatro rodadas de cálculos, e cada rodada usa uma das quatro funções seguintes: F:(x, y. z) = (x AND y) OR ((NOT x) ANO z) G(x, y, z) = (x ANO z) OR (y AND ( NOT z)) H(x, y, z) = x XOR y XOR z l(x, y, z) = y XOR (x OR (NOT z)) Cada uma dessas funções opera sobre variáveis de 32 bits, x, y e z. Para ilustrar como essas funções são usadas, considere um bloco b de 512 bits da mensagem preenchida que está em processo durante a fase k. O bloco b é dividido em 16 sub-blocos de 32 bits. b0, b1, ...., b15. Durante a primeira rodada, a função F é usada para mudar quatro variáveis (denotadas por p, q, r e s, respectivamente) em 16 iterações, como mostra abaixo. Essas variáveis são transportadas para cada rodada seguinte e, após o término de uma fase, passadas para a próxima fase. Há um total de 64 constantes C, predefinidas. A notação x <<< n é usada paro denotar uma rotação para a esquerda: os bits em x são deslocados n posições para a esquerda, e o bit que, na rotação, ficar fora à esquerda é colocado na posição da extrema direita. A segunda rodada usa a função G de modo similar, ao passo que H e I são usadas na terceira e quartas rodadas, respectivamente. Assim, cada etapa consiste em cm 64 iterações, após as quais é iniciada a fase seguinte, mas agora com os valores que p, q, r e s têm nesse ponto. Voltando ao ponto, para assinar digitalmente uma mensagem. em primeiro lugar o remetente pode calcular um resumo de mensagem (com a função Hash) e em sequência criptografar o resumo com sua chave privada. e enviar para o destinatário juntamente com o resumo criptografado. E caso queira confidenciabilidade, para que outro usuário que tenha a chave pública dele não possa ler também, ele pode também criptografar a mensagem com a chave pública do destinatário. E o destinatário ao receber a mensagem e o seu resumo criptografado só precisar decifrar o resumo com a chave pública do remetente, e calcular o resumo de mensagem para conferir se este combinará com o resumo que ele recebeu, assegurando que realmente não houve modificações maliciosas (com o resumo da mensagem usando o hash), a confidencialidade (usando além da chave privada do remetente também a chave pública do destinatário) e garantindo que não repudiem a mensagem (por tudo falado antes, que será usado como prova queaquela mensagem é daquela pessoa, foi enviada para tal pessoa, e não foi modificada). Durante o estabelecimento de um canal seguro, após a conclusão da fase de autenticação, de modo geral as partes comunicantes usam uma chave de sessão compartilhada exclusiva para garantir confidencialidade, onde a utilização de chave de seção proporciona vários benefícios importantes, pois se usarmos o mínimo possível as chaves de autenticação é muito mais seguro, e também como elas costumam ser trocadas por meio de algum mecanismo fora de banda relativamente caro (como correio normal ou telefone), a troca de chaves por esse modo deve ser mantida em um mínimo possível. Uma outra razão importante para gerar uma chave exclusiva para cada canal seguro é garantir proteção contra ataques de reprodução, corno já vimos inúmeras vezes. Com a utilização de uma chave de sessão exclusiva cada vez que um canal seguro for estabelecido. as partes comunicantes ao menos estarão protegidas contra a reprodução de uma sessão inteira. Para proteção contra a reprodução de mensagens individuais de uma sessão anterior, de modo geral são necessárias medidas adicionais, tal como incluir marcas de tempo ou números de sequência como parte do conteúdo da mensagem. É muito mais seguro usar chaves por sessão porque, se ela for comprometida, na pior das hipóteses só uma única sessão será afetada. Mensagens enviadas durante outras sessões continuarão confidenciais. Em geral dado o modo como as chaves de autenticação costumam ser estabelecidas, substituí-las é relativamente caro. Portanto, a combinação das chaves de longa duração com chaves de sessão mais temporárias (e muito mais baratas) frequentemente é uma boa opção para implementar canais seguros para troca de dados. Para comunicação entre grupos, uma solução alternativa é usar uma chave secreta compartilhada separada entre cada par de membros de um grupo. Tão logo fique evidente que um membro está vazando informações. os outros podem simplesmente parar de enviar mensagens para esse membro, mas ainda usar as chaves que estavam usando para se comunicar uns com os outros. Contudo, em vez de ter de manter uma só chave. agora é necessário manter N(N - 1)/2 chaves, o que, por si só, já pode ser um problema difícil. Usar um críptossistema de chave pública pode melhorar as coisas. Nesse caso, cada membro tem seu próprio par (chave pública, chave privada), no qual a chave pública pode ser usada por todos os membros para enviar mensagens confidenciais. Sendo assim. é necessário um total de N pares de chaves. Se um dos membros deixar de ser digno de confiança, ele é apenas removido do grupo sem expor ao perigo as outras chaves. Estabelecer e distribuir chaves não é uma tarefa trivial. Por exemplo, distribuir chaves secretas por meio de um canal não seguro está fora de questão e, em muitos casos, precisamos recorrer a métodos fora da banda por exemplo: ligação por telefone, conversar pessoalmente ou qualquer outro meio que não use a internet. Além disso, como já vimos, são necessários mecanismos para revogar chaves, isto é, evitar que uma chave seja utilizada depois de ter sido exposta a risco ou invalidade. Por exemplo, quando uma chave foi exposta a risco, é necessária uma revogação. Então, entrando no caso 3, um esquema mais apropriado e de ampla utilização para estabelecer uma chave compartilhada por um canal inseguro(internet) é a troca de chaves usando o Diffie-Hellman. Esse protocolo funciona da seguinte maneira: suponha que os gerentes Bruno e Fernando queiram estabelecer uma chave secreta compartilhada. O primeiro requisito é que eles concordem com dois números grandes, n e g que estão sujeitos a uma série de propriedades matemáticas. Ambos, n e g, podem ser públicos: não há nenhuma necessidade de ocultá-los de estranhos. O gerente Bruno escolhe um número grande aleatório. Vamos supor que ele escolha x, que ele mantém em segredo. Da mesma forma, o gerente Fernando escolhe seu próprio número grande, digamos, que ele escolha y, nesse ponto há informação suficiente para construir uma chave secreta. O gerente Bruno inicia enviando gx mod n a o gerente Fernando, junto com n e g. É importante observar que essa informação pode ser enviada como texto aberto, porque é praticamente impossível calcular x dados gx mod n. Quando o Gerente Fernando recebe a mensagem, na sequência calcula (gx mod n)y, que é matematicamente igual a gxy mod n. Além disso, ele enviar gy mod n a Bruno , que então pode calcular (gy mod n)x = gxy mod n. Em consequência, ambos os gerentes Bruno e Fernando, e somente esses dois terão agora a chave secreta compartilhada gxy mod n. Nesse caso nenhum dos gerentes precisou informar seu outro número privado que seria x e y respectivamente. Também precisamos distribuir a chave pública de modo tal que os receptores possam ter certeza de que a chave é, de fato, o par de uma chave privada declarada. Ou seja, embora a chave pública em si, possa ser enviada em texto aberto, é necessário que o canal pela qual ela é enviada possar fornecer autenticação, dessa forma mesmo utilizando um canal não seguro como exemplo a internet poderíamos distribuir as chaves de forma segura. Porém se faz necessário que a chave privada precisa ser enviada por um canal seguro que forneça autenticação, bem como confidencialidade. A distribuição de chaves públicas ocorre por meio de certificados de chaves públicas. Esse certificado consiste em uma chave pública junto com uma sequência de bits que identifica a entidade à qual essa chave está associada, que pode ser um usuário, ou também um hospedeiro ou algum dispositivo. A chave pública e o identificador juntos, foram assinados por uma autoridade de certificação e essa assinatura também foi colocada no certificado. Dessa forma conseguimos compartilhar chaves criptográficas por meios não seguro como exemplo pela a internet
Compartilhar