Questões de Hashing (Algoritmos e Estrutura de Dados)

Limpar Busca

Um importante problema de segurança para os sistemas operacionais é a autenticação, um processo de segurança que visa comprovar a identidade de um usuário. O sistema de proteção deve identificar os usuários para prover a correta autorização de acesso aos recursos do sistema. Um processo de autenticação amplamente utilizado pelos sistemas é a validação de credenciais de acesso formadas por nome e senha. Para proteger as senhas armazenadas no banco de dados, é comum temperar a senha (password salting) e usar um algoritmo de HASH.
As técnicas de salting e HASH são adotadas simultaneamente nos esquemas

  • A Bcrypt e PBKDF2
  • B Bcrypt e RC4
  • C Bcrypt e AES
  • D AES e PBKDF2
  • E AES e RC4

Sobre Hash, foram feitas as seguintes afirmações:

I. O Hash possui sua entrada de tamanho variável. II. O Hash possui sua saída em um tamanho variável. III. Pode-se reverter o Hash, como uma boa prática de criptografia.

Sobre as afirmações acima, pode-se afirmar que:

  • A Apenas a afirmação I está correta.
  • B Apenas a afirmação II está correta.
  • C Apenas as afirmações II e III estão corretas.
  • D Apenas as afirmações I e II estão corretas.

Considere o seguinte código em uma linguagem de programação hipotética que possui função de hashing.


Imagem relacionada à questão do Questões Estratégicas


Considerando-se esse código, sobre o hashing, verifica-se que a(o)

  • A função de hash é responsável por transformar chaves distintas em índices distintos.
  • B função de hash garante que todas as chaves serão distribuídas uniformemente na tabela de hash.
  • C tabela de hash pode usar qualquer função de hash, independentemente do tamanho da tabela.
  • D tabela de hash poderá sobrescrever o valor existente com o novo valor se duas chaves tiverem o mesmo valor de hash.
  • E valor da chave anterior será mantido na tabela de hash se duas chaves resultarem no mesmo índice após a aplicação da função de hash.

A analista Ana precisou implementar rapidamente uma função hash denominada AHash. A AHash deve determinar um valor numérico entre 0 e 5 para uma chave de entrada. Ana optou por implementar em AHash o método de hashing denominado Método da Divisão. Para compatibilizar possíveis chaves alfanuméricas com o Método da Divisão, Ana implementou um dicionário que atribui a cada caracter um valor numérico. Internamente, a AHash utiliza como chave o produto dos números correspondentes aos caracteres da chave original.
Sabendo que os caracteres C, V e M correspondem, respectivamente, aos números 67, 86 e 77, a AHash retornará para a chave “CVM”:

  • A 0;
  • B 1;
  • C 2;
  • D 3;
  • E 4.

Para acelerar a busca sobre uma lista de mensagens, Beatriz adotou uma tabela de dispersão, na qual o e-mail do emissor é quem define o hash.

N: INTEIRO V: VETOR [0..N-1] de LISTA<MENSAGEM> Algoritmo Adicionar (M: MENSAGEM) H <- 0 Para i de 0 até Tamanho (M.email) - 1 H <- H + Ord (M.email[i]) Fim Para H <- H Mod N V[H].Incluir(M) Fim Algoritmo

O hash é dado pelo resto da divisão entre a soma dos códigos ASCII do email e o tamanho do vetor de listas. Para que Beatriz obtenha a melhor distribuição das mensagens nas listas:

  • A o valor dos códigos ASCII, obtidos pela função Ord, deve ser multiplicado por N;
  • B a soma dos códigos ASCII deve ser feita do final para o início do campo email de M;
  • C o número N deve ser primo;
  • D a mensagem M deve ser incluída na lista da posição N – H do vetor V;
  • E o número N precisa ser par.