Buscar

Empresa TiBank - banco digital - Sistemas Distribuidos - Tanenbaum Capítulo 9

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

Continue navegando