Como criptografar simetricamente valores de 64 bits?

Estou curioso sobre um algoritmo que seria bom para o seguinte cenário:

  1. “texto simples” de 32 bits entrada, obtida de um contador
  2. saída de “texto cifrado” de 32 ou 64 bits
  3. Deve ser possível descriptografar a saída com a chave (e possivelmente alguns outros parâmetros ocultos, como um contador de deslocamento e atual) e retornar o valor do contador original de 32 bits
  4. Um usuário nunca observa a entrada, mas pode receber qualquer número de saídas, possivelmente sequenciais. Mesmo assim, eles não deveriam ser capazes de saber quais índices eles têm.
  5. Deve ser difícil adivinhar outras saídas que correspondam aos valores válidos do contador.

Minha intuição não treinada é que, uma vez que a chave e as saídas são maior do que o espaço de entrada, deve ser bastante fácil ter resultados “bons”, pelo menos para as primeiras saídas. No entanto, também parece lógico que, com amostras suficientes, a chave e os índices poderiam ser calculados facilmente, mas espero que na maioria dos casos usar l menos de 100 valores.

Minhas perguntas são:

  1. Existe algum algoritmo que funcione para este cenário?
  2. Quão difícil seria rachadura? Ou seja, calcule os valores que descriptografam para índices válidos.
  3. Quanto a posse de mais amostras afeta a eficiência de quebrá-las?
  4. O que há de errado com uma abordagem ingênua como:

    u64 output = input repeat 64x output = ((output ^ key) + key) rotate-left 37 

    Presumindo que a adição envolve limites inteiros de 64 bits. Parece que misturaria completamente a chave aleatória com uma única entrada, mas possuindo mais de uma a saída pode aumentar rapidamente as informações que um invasor possui, embora eu não saiba como. Obviamente, vai quebrar, estou apenas tentando aprender.

  5. Usar um valor dependente de chave para a rotação à esquerda, como (((key & 0xFFFE)+1) * 37) ser melhor? Quanto isso ajuda e por quê?
  6. Quais abordagens, recursos, etc. você usaria para analisar o algoritmo e projetar um melhor?

Comentários

  • Este é um problema XY da forma como você o descreve. Um CSPRNG (observe o S) não ' t parece ser uma boa solução para tudo isso. A solicitação do tamanho da chave é um pouco estranha, por que não é possível usar tamanhos de chave maiores?
  • Suponho que o tamanho da chave não seja essencial. Eu esperava que a chave de 64 bits fosse suficiente para criptografar um valor de 32 bits.

Resposta

  1. Existem algoritmos que funcionam para este cenário?

Sim, na verdade , há várias cifras de bloco de 64 bits. A sabedoria padrão é que eles não são incentivados para uso geral, porque os modos de criptografia de bloco padrão tendem a começar a vazar informações quando você se aproxima do limite do aniversário (neste caso, cerca de 30 Gbytes); no entanto, para o seu caso de uso, isso não seja uma preocupação.

Aqui estão algumas opções:

  • 3DES (também conhecido como TDES); este é DES aplicado três vezes com três chaves diferentes; isso tem a vantagem de ser muito bem estudado.

  • Speck que tem conjuntos de parâmetros com cifras de bloco de 64 bits. vantagem de ser a alternativa mais rápida e foi projetado por pessoas que sabem o que estão fazendo, e foi feito por meio de uma quantidade surpreendente de criptoanálise.

  • Uma cifra FPE (como FF1, que pode lidar com qualquer tamanho de bloco arbitrário (incluindo 64 bits). Isso tem a vantagem de permitir a opção de um ajuste (que é um lugar conveniente para colocar os “outros parâmetros ocultos”, se você decidir que é uma vantagem ). Seu mais lento do que as alternativas; com FF1, a segurança vem da segurança subjacente do AES, mais a segurança comprovada da estrutura Feistel.

Agora, essas chaves levam mais de 64 bits; o senso comum é que uma chave de 64 bits simplesmente não é longa o suficiente.

  1. Seria difícil quebrá-la? Ou seja, calcule os valores que descriptografam para índices válidos.

Para qualquer um dos itens acima, a única opção prática que um adversário teria seria adivinhe textos criptografados aleatoriamente e espere encontrar um que decifre para um índice válido.

  1. Quanto vale a posse de mais amostras afetam a eficiência de crackeamento?

Para qualquer um dos itens acima, ter grandes quantidades de amostras ainda tornará o ataque inviável.

  1. O que há de errado com uma abordagem ingênua como …

As cifras ARX (na verdade, qualquer cifra, mas especialmente ARX) são difíceis de acertar. As cifras ARX em particular tendem a não ser ótimas para interromper características diferenciais e lineares (o que significa tal o design realmente precisa ser bem estudado para garantir que o faça).

  1. Quais abordagens, recursos etc. você usaria para analisar o algoritmo e projetar um melhor?

Eu sugiro que você escolha um design que já foi analisado; eu listo três acima.

Comentários

  • Eu ' d prefiro, por exemplo, Blowfish a 3DES se houver uma mudança de entrada de chave relativamente pequena. A segurança do 3DES seria duvide, mesmo que a chave tenha sido expandida para 128 bits (ou melhor, 112 bits, é claro).
  • @MaartenBodewes: você tem uma citação de alguém que mostra que 3DES com um chave desconhecida sendo distinguível de uma permutação uniforme aleatória?
  • Não, claro que não. No entanto, eu ' d prefiro nem mesmo ter que raciocinar se minha criptografia foi ~ Força de 80 bits ou ~ 112 bits quando alimentado com uma chave de 128 bits ou 192 bits (eu ' não tenho dúvidas de que você seria capaz de fazer isso, mas hey, nós nem todos são poncho). E o tamanho da chave parece ser um problema na questão. Apenas jogar fora os bits de paridade nesse caso é um desperdício.
  • Você poderia explicar melhor a declaração " Agora, essas chaves levam mais de 64 bits; o senso comum é que uma chave de 64 bits não é longa o suficiente. "? Quais algoritmos requerem chaves de quais comprimentos e chaves de 64 bits não são longas o suficiente para o quê, precisamente?
  • @shader: chaves de apenas 64 bits são vulneráveis a pesquisas de força bruta de grandes (bem financiados) adversários. Como geralmente é fácil usar chaves um pouco maiores (por exemplo, 128 bits) que não são ' t vulneráveis a qualquer pessoa, geralmente optamos pela opção mais segura (mesmo se ' não estamos imediatamente preocupados que a NSA esteja interessada em nos atacar ou se a Amazon decidir nos dedicar toda a sua nuvem …

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *