Comment crypter symétriquement des valeurs 64 bits?

Je « suis curieux de savoir un algorithme qui conviendrait au scénario suivant:

  1.  » texte en clair « 32 bits entrée, extraite dun compteur
  2. Sortie « ciphertext » 32 ou 64 bits
  3. Il devrait être possible de décrypter la sortie avec la clé (et éventuellement quelques autres paramètres cachés, comme un offset et un compteur courant), et renvoie la valeur originale du compteur 32 bits
  4. Un utilisateur nobserve jamais lentrée, mais peut recevoir nimporte quel nombre de sorties, éventuellement séquentielles. Même dans ce cas, il ne devrait pas pouvoir savoir quels index ils ont.
  5. Il devrait être difficile de deviner dautres sorties qui correspondent à des valeurs de compteur valides.

Mon intuition inexpérimentée est que puisque la clé et les sorties sont plus grand que lespace dentrée, il devrait être assez facile davoir de «bons» résultats, au moins pour les premières sorties. Cependant, il semble également logique quavec suffisamment déchantillons la clé et les indices puissent être calculés facilement, mais jattends la plupart des instances utiliser l plus de 100 valeurs.

Mes questions sont les suivantes:

  1. Existe-t-il des algorithmes qui fonctionnent pour ce scénario?
  2. À quel point serait-il difficile de fissure? Cest-à-dire, calculer des valeurs qui déchiffrent en indices valides.
  3. Dans quelle mesure la possession de plus déchantillons affecte-t-elle lefficacité de leur craquage?
  4. Quel est le problème avec une approche naïve comme:

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

    En supposant que laddition senroule autour des limites dentiers de 64 bits. Il semble que cela mélangerait complètement la clé aléatoire avec une seule entrée, mais en posséder plus dune la sortie pourrait rapidement augmenter les informations quun attaquant possède, bien que je ne sache pas comment. Évidemment, ça va être cassé, jessaye juste dapprendre.

  5. Jutiliserais une valeur dépendante de la clé pour la rotation à gauche, comme (((key & 0xFFFE)+1) * 37) être meilleur? Dans quelle mesure cela aide-t-il et pourquoi?
  6. Quelles approches, ressources, etc. utiliseriez-vous pour analyser lalgorithme et en concevoir un meilleur?

Commentaires

  • Cest vraiment un problème XY tel que vous le décrivez. Un CSPRNG (notez le S) ne semble pas ‘ être une bonne solution pour cela. La demande de taille de clé est un peu bizarre, pourquoi nest-il pas possible dutiliser des tailles de clé plus grandes?
  • Je suppose que la taille de clé nest pas essentielle. Jespérais quune clé de 64 bits serait suffisante pour chiffrer une valeur de 32 bits.

Réponse

  1. Existe-t-il des algorithmes qui fonctionnent pour ce scénario?

Oui, en fait , il existe un certain nombre de chiffrements par blocs de 64 bits. La sagesse standard est quils ne sont pas encouragés pour une utilisation générale, car les modes de chiffrement par blocs standard ont tendance à commencer à fuir des informations lorsque vous approchez de la limite danniversaire (dans ce cas, environ 30 Go); cependant, pour votre cas dutilisation, ce ne serait pas être un problème.

Voici quelques options:

  • 3DES (aka TDES); cest DES appliqué trois fois avec trois clés différentes; cela a lavantage dêtre très bien étudié.

  • Speck qui a des ensembles de paramètres avec des chiffrements par blocs de 64 bits. avantage dêtre lalternative la plus rapide, et a été conçu par des gens qui savent quils « font », et a fait une quantité surprenante de cryptanalyse.

  • Un chiffrement FPE (tel que FF1, qui peut gérer nimporte quelle taille de bloc arbitraire (y compris 64 bits). Cela a lavantage de permettre loption dun ajustement (qui est un endroit pratique pour placer les « autres paramètres cachés », si vous décidez que cest un avantage ). Son plus lent que les alternatives; avec FF1, la sécurité provient de la sécurité sous-jacente dAES, plus la sécurité prouvable de la structure Feistel.

Maintenant, ces clés prennent plus de 64 bits; la sagesse commune est quune clé de 64 bits nest tout simplement pas assez longue.

  1. Est-ce que ce serait difficile à craquer? Cest-à-dire, calculez les valeurs qui déchiffrent en indices valides.

Pour tout ce qui précède, la seule option pratique quun adversaire aurait serait de devinez aléatoirement des textes chiffrés et espérez tomber sur celui qui déchiffre en un index valide.

  1. Combien coûte la possession de plus déchantillons affectent lefficacité de la fissuration?

Pour tout ce qui précède, avoir de grandes quantités déchantillons rendra toujours lattaque irréalisable.

  1. Quel est le problème avec une approche naïve comme …

Les chiffrements ARX (en fait, tout chiffrement, mais surtout ARX) sont difficiles à obtenir. Les chiffrements ARX en particulier ont tendance à ne pas perturber les caractéristiques différentielles et linéaires (ce qui signifie la conception aurait vraiment besoin dêtre bien étudiée pour sassurer que cest le cas).

  1. Quelles approches, ressources, etc. utiliseriez-vous pour analyser lalgorithme et en concevoir un meilleur?

Je « vous suggère daller avec un design qui a déjà été analysé; jen énumère trois ci-dessus.

Commentaires

  • Je ‘ je préfère par exemple Blowfish sur 3DES sil y a un changement dentrée de clé relativement petit. La sécurité de 3DES serait être douteux même si la clé a été étendue à 128 bits (ou plutôt 112 bits, bien sûr).
  • @MaartenBodewes: avez-vous une cite de quelquun montrant que 3DES avec un clé inconnue pouvant être distinguée dune permutation aléatoire paire?
  • Non, bien sûr que non. Cependant, je ‘ plutôt ne pas avoir à raisonner si mon chiffrement a ~ 80 bits ou ~ 112 bits avec une clé de 128 bits ou 192 bits (je ‘ je nai aucun doute que vous seriez en mesure de le faire, mais bon, nous ne sont pas tous des poncho). Et la taille de la clé semble être un problème dans la question. Jeter simplement les bits de parité dans ce cas est un gaspillage.
  • Pourriez-vous élaborer sur linstruction  » Maintenant, cela prend des clés de plus de 64 bits; la sagesse commune est quune clé de 64 bits nest tout simplement pas assez longue. « ? Quels algorithmes nécessitent des clés de quelle longueur, et les clés de 64 bits ne sont pas assez longues pour quoi, précisément?
  • @shader: les clés de seulement 64 bits sont vulnérables aux recherches par force brute de grands adversaires (bien financés). Parce quil est généralement assez facile dutiliser des clés un peu plus grandes (par exemple 128 bits) qui ne sont pas ‘ vulnérables à quiconque, nous optons généralement pour loption la plus sécurisée (même si nous ‘ ne craignez pas immédiatement que la NSA soit intéressée à nous attaquer, ou si Amazon décidera de nous consacrer tout son cloud …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *