Comment obtenir les valeurs inconnues


19

Quelqu'un peut-il m'aider avec le problème suivant?

Je veux trouver quelques valeurs ai,bj (mod N ) où i=1,2,,K,j=1,2,,K (par exemple K=6 ), étant donné une liste de K2 valeurs qui correspondent aux différences aibj(modN) (par exemple N=251 ), sans connaître la relation concrète correspondante. Étant donné que les valeurs ai,bj(modN) ne sont pas définies de manière unique compte tenu des différences aibj(modN) , nous recherchons toute affectation valide de valeurs.

Définitivement, essayer chaque permutation des nombres K2 dans la liste (totalement K2! Cas possibles) puis résoudre les équations modulaires avec ai,bj car les variables sont irréalisables.

En fait, ce problème se pose dans un article sur la cryptanalyse d'une première version du schéma de signature NTRU ( http://eprint.iacr.org/2001/005 ). Cependant, l'auteur n'a écrit qu'une seule phrase: «Un simple algorithme de retour en arrière trouve une solution…» (dans la section 3.3) et peut-on donc donner plus d'explications? De plus, l'auteur a également mentionné que «chaque changement circulaire {((ai+M)modN,(bi+M)modN}i=1K ou un échange ({(N1bi,N1ai)}i=1K) donne le même schéma aibjmodN ”et cette déclaration est-elle utile?


7
Notez qu'il est impossible de récupérer ai,bj , car si vous ajoutez une constante C à tous les nombres, les différences restent les mêmes.
Yuval Filmus

1
@Yuval: Ceci est déjà inclus dans la dernière phrase de la description. Je pense qu'une seule solution est nécessaire, car plusieurs peuvent exister.
domotorp

2
@Yuval Désolé de ne pas remarquer que les « s doivent également être prises modulaire . Il n'y a donc pas de solutions infinies. Nai,bjN
un invité le

@domotorp Oui, trouver une des solutions est OK.
un invité le

1
Peut-être que l'OP pourrait préciser que les , sont pris modulo plus tôt dans le post: peut-être dans le titre ou dans le premier paragraphe. Le problème de la constante mérite également d'être mentionné. Les deux choses m'ont confondu quand j'ai commencé à lire. b j N CaibjNC
Juan Bermejo Vega

Réponses:


4

Voici une suggestion, pour et . On nous donne une liste . Commencez par en prendre un, sans perte de généralité . Sans perte de généralité , et on obtient la valeur de . maintenant un autre, et espérons qu'il est de la forme (cela se produit avec une probabilité ), et déduisons .N = 251 a i - b jK=6N=251a 1 - b 1 b 1 = 0 a 1 a 2 - b 1 cinq / 35 = 1 / 7 un 2aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

À ce stade, nous connaissons . Notre prochain objectif est de rechercher pour . Pour chaque candidat , si alors devrait également figurer sur la liste. Si , la probabilité que figure également sur la liste est d'environ . Donc, si nous trouvons un candidat pour lequel est également sur la liste, alors probablement . De cette façon, nous pouvons récupérer avec une certaine certitude.a 1 - b j j 1 a i - b j i = 1 ( a i - b j ) + ( a 2 - a 1 ) = a 2 - b j i 1 ( a i - b j ) + ( a 2 - aa1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji133 / 251 a i - b j ( a i - b j ) + ( a 2 - a 1 ) i = 1 b 2(aibj)+(a2a1)33/251aibj(aibj)+(a2a1)i=1b2

A ce stade, nous connaissons . De la même manière que nous avons récupéré , nous pouvons récupérer avec une certitude raisonnable. On peut alors récupérer en recherchant un candidat pour lequel et figurent tous les deux sur la liste. Parce que nous avons plus s, notre probabilité de défaillance va sensiblement vers le bas. Nous continuons et trouvons .b 2 a 3 b 3 a i - b j ( a i - b j ) + ( a 2 - a 1 ) ( a i - b j ) + ( a 3 - a 1 ) a b 3 , a 4 , b 4a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)ab3,a4,b4,a5,b6,a6,b6

À tout moment dans cet algorithme, nous aurions pu deviner quelque chose de mal, et cela par aboutir à une contradiction (disons qu'à un moment donné, il n'y a pas de bon candidat ). Nous revenons ensuite en arrière et essayons une autre possibilité; si nous épuisons toutes les possibilités, nous revenons en arrière et essayons une autre possibilité (pour une étape différente de l'algorithme); etc.aibj

C'est un bon exercice pour réellement programmer cet algorithme - c'est probablement le seul moyen de comprendre comment implémenter correctement le retour arrière. C'est également le seul moyen de savoir si cet algorithme fonctionne dans la pratique.


Merci et je coderai également ce retour en arrière pour mieux le comprendre. Peut-être que l'auteur de cet article original a utilisé une méthode similaire car il a également mentionné la «marche arrière».
un invité du

Désolé d'avoir oublié de poster mon commentaire sur votre réponse! J'ai également implémenté la méthode que vous avez suggérée (en C ++). La conclusion est que votre algorithme fonctionne plutôt bien et qu'une des solutions peut alors être trouvée très rapidement (en moins d'une seconde sur mon PC). Et cette fois, je peux mieux comprendre les procédures de retour en arrière. Merci beaucoup!
un invité

Pourquoi ne puis-je pas "@Yuval" dans mon dernier commentaire?! Désolé, mais j'ai essayé plusieurs fois.
un invité

Vous pourriez peut-être partager le code en ligne, afin que d'autres personnes lisant le document y aient accès.
Yuval Filmus

5

Mise à jour : la description ci-dessous concerne un problème différent (dans lequel vous avez toutes les distances par paire dans un ensemble plutôt que les distances par paire entre deux ensembles distincts). Je vais le laisser de toute façon car il est étroitement lié.

Ce problème est appelé problème de ceinture de sécurité et est un cas particulier du problème général intégration de -torus. Il est également étroitement lié au problème du péage à péage, dans lequel les différences de distances sont absolues (pas modulo un certain nombre).d

On ne sait pas si le problème de la ceinture de sécurité admet un algorithme poly-temps. Il existe différents algorithmes pseudo-poly-temps pour les questions connexes. La meilleure référence (hélas une ancienne) est l'article de Lemke, Skiena et Smith .


1
Je pense que ce problème est différent. Dans le problème du chemin de ceinture, nous connaissons toutes les distances par paires, ici nous ne le connaissons qu'entre deux points qui sont dans des groupes différents. Bien que cela semble être moins d'informations, cela peut en fait aider à résoudre le problème.
domotorp

Ah oui. c'est un graphique bipartite. bon point.
Suresh Venkat

Graphique bipartite? Quelque chose comme. Peut-être que je devrais essayer le problème de cette façon, mais je n'ai pas le courant de pensée concret maintenant.
un invité le

3

Voici une observation qui, je pense, vous donne un point d'appui, peut-être suffisamment pour résoudre le problème.

Supposons que nous ayons quatre différences , , , qui apparaissent comme les différences par paire entre deux et deux . Appelez cela un quatuor de différences. Notez que nous avons une relation non triviale:a 1 - b 2 a 2 - b 1 a 2 - b 2 a ba1b1a1b2a2b1a2b2ab

(a1b1)(a1b2)=(a2b1)(a2b2)(modN).

Vous pouvez essayer d'utiliser cette relation pour identifier les quatuors potentiels de la liste des . Par exemple, choisissez quatre différences dans la liste; s'ils ne satisfont pas à la relation ci-dessus, ils ne découlent certainement pas d'une structure de quatuor; s'ils satisfont à la relation, ils pourraient provenir d'un quatuor.K2

Il y a plusieurs façons de prendre les choses d'ici, mais je pense que cela suffira.

Je soupçonne surtout que, pour vos exemples de réglages de paramètres, le problème sera assez facile, car le test ci-dessus pour reconnaître un quatuor n'aura probablement pas trop de faux positifs. Parmi nos façons de choisir 4 différences dans la liste, il y aura quatuors (qui satisferont tous la relation) et les autres sont des non-quatuors (qui satisfont la relation avec la probabilité , heuristiquement). Par conséquent, nous nous attendons à voir environ faux positifs, c'est-à-dire 4 tuples qui réussissent le test même s'ils ne sont pas des quatuors. Pour vos paramètres, cela signifie que nous avons 225 quatuors et( K(K24)1/N((K2(K2)21/N(58905-225)/251234((K24)(K2)2)/N(58905225)/251234autres faux positifs; donc environ la moitié des 4 tuples qui réussissent le test sont en fait des quatuors. Cela signifie que le test ci-dessus est un très bon moyen de reconnaître les quatuors. Une fois que vous pouvez reconnaître les quatuors, vous pouvez vraiment aller en ville pour récupérer la structure de la liste des différences.


@DW: Merci, mais je me demande maintenant la prochaine étape après avoir trouvé tous les quatuors possibles (225 + 234 = 459). Doit-il rechercher 3 quatuors qui ne se chevauchent pas et tester s'ils peuvent constituer une solution possible? Comment y parvenir efficacement? Peut-être pas si difficile car il n'y aura pas beaucoup de chevauchements.
un invité du

@aguest, bonne question! Je ne me souviens pas de ce que je pensais à l'époque. Je pense que je me souviens avoir pensé qu'une approche pourrait être de commencer par un quatuor, puis de chercher toutes les autres qui le chevauchent en 2 différences (par exemple, résultant de où ), mais je ne le fais pas savoir où aller à partir de là (comment filtrer les faux positifs). j 2a1,aj,b1,b2j2
DW

3

Voici une approche différente, basée sur la recherche itérative de nombres qui ne peuvent pas apparaître parmi . Appeler un ensemble une sur-approximation de l' « s si nous savons que . De même, est un surapproximation du « s si nous savons que . , Plus Il est évident est, plus cette approximation est trop utile et va de même pour . Mon approche est basée sur l'affinage itératif de ces sur-approximations, c'est-à-dire sur la réduction itérative de la taille de ces ensembles (car nous excluons de plus en plus de valeurs comme impossibles).A a { a 1 , , a 6 } A B b { b 1 , , b 6 } B A B{a1,,a6}Aa{a1,,a6}ABb{b1,,b6}BAB

Le cœur de cette approche est une méthode de raffinement : étant donné une sur-approximation pour les et une sur-approximation pour les , trouver une nouvelle sur-approximation pour les telle que . En particulier, normalement sera plus petite que , donc cela nous permet d' affiner la plus-approximation pour les s ».a B b A a A A A A aAaBbAaAAAAa

Par symétrie, essentiellement la même astuce nous permettra d'affiner notre sur-approximation pour les : étant donné une sur-approximation pour les et une sur-approximation pour les , elle produira un nouveau sur -approximation pour les .A a B b B bbAaBbBb

Alors, laissez-moi vous dire comment raffiner, puis je vais tout mettre ensemble pour obtenir un algorithme complet pour ce problème. Dans ce qui suit, considérons le multi-ensemble de différences, c'est-à-dire ; nous allons nous concentrer sur la recherche d' un cadre raffiné sur-approximation , donnée .D = { a i - b j : 1 i , j 6 } A A , BDD={aibj:1i,j6}AA,B

Comment calculer un raffinement. Considérons une seule différence . Considérons l'ensemble . Sur la base de notre connaissance que est une sur-approximation des , nous savons qu'au moins un élément de doit être un élément de . , On peut donc traiter chacun des éléments comme une « suggestion » pour un certain nombre d'inclure éventuellement dans . Donc, balayons toutes les différences et, pour chacune, identifions les nombres qui sont "suggérés" par .d + B = { d + y : y B } B b d + B { a 1 , , a 6 } d + B A d D ddDd+B={d+y:yB}Bbd+B{a1,,a6}d+BAdDd

Maintenant, je vais observer que le nombre est sûr d'être suggéré au moins 6 fois au cours de ce processus. Pourquoi? Parce que la différence est en , et quand nous la traitons, sera l'un des nombres qu'elle suggère (puisque nous sommes garantis que , inclura sûrement ). De même, la différence apparaît quelque part dans , et cela entraînera une nouvelle suggestion de . De cette façon, nous voyons que la valeur correcte de sera suggérée au moins 6 fois. Il en va de même pour eta 1 - b 1 D a 1 b 1B ( a 1 - b 1 ) + B a 1 a 1 - b 2 D a 1 a 1 a 2 a 3a1a1b1Da1b1B(a1b1)+Ba1a1b2Da1a1a2a3, etc.

Soit donc l'ensemble des nombres qui ont été suggérés au moins 6 fois. C'est certainement une sur-approximation des , par les commentaires ci-dessus.a aAaa

À titre d'optimisation, nous pouvons filtrer toutes les suggestions qui ne sont pas présents dans tout de suite: en d' autres termes, nous pouvons traiter la différence comme suggérant toutes les valeurs . Cela garantit que nous aurons . Nous espérons que est strictement inférieur à ; aucune garantie, mais si tout se passe bien, ce sera peut-être le cas.d ( d + B ) A A A A AAd(d+B)AAAAA

Ensemble, l'algorithme pour affiner pour produire est le suivant:A A,BA

  1. Soit . Ceci est le multi-ensemble de suggestions.S=dD(d+B)A

  2. Comptez combien de fois chaque valeur apparaît dans . Que l'ensemble des valeurs qui apparaissent au moins 6 fois dans . (Cela peut être mis en œuvre efficacement en construisant un tableau de 251 initialement, initialement tout à zéro, et chaque fois que le nombre est suggéré, vous incrémentez ; à la fin, vous balayez à recherche d'éléments dont la valeur est 6 ou plus grande)A S a s a [ s ] aSASasa[s]a

Une méthode similaire peut être construite pour affiner pour obtenir . Vous choses fondamentalement inverse ci - dessus et retourner quelques signes: par exemple, au lieu de , vous regardez .B d + B - d + AA,BBd+Bd+A

Comment calculer une sur-approximation initiale. Pour obtenir notre sur-approximation initiale, une idée est de supposer (wlog) que . Il s'ensuit que chaque valeur doit apparaître quelque part parmi , ainsi la liste des différences peut être utilisée comme notre sur-approximation initiale pour les . Malheureusement, cela ne nous donne pas une sur-approximation très utile pour les .a i D D a bb1=0aiDDab

Une meilleure approche consiste à deviner en outre la valeur de l' des a. En d' autres termes, nous supposons (wlog) que , et utiliser comme notre plus-approximation des s ». Ensuite, nous devinons laquelle de ces 36 valeurs est en effet l' des a, disons . Cela nous donne alors une sur-approximation pour les . Nous utilisons cette sur-approximation initiale , puis l'affinons itérativement jusqu'à la convergence, et testons si le résultat est correct. Nous répétons jusqu'à 36 fois, avec 36 suppositions différentes à (en moyenne 6 suppositions devraient suffire) jusqu'à ce que nous trouvions celle qui fonctionne.b 1 = 0 A = D a a a 1 B = a 1 - D b A , B a 1ab1=0A=Daaa1B=a1DbA,Ba1

Un algorithme complet. Maintenant, nous pouvons avoir un algorithme complet pour calculer . Fondamentalement, nous dérivons une sur-approximation initiale pour et , puis affinons itérativement. A Ba1,,a6,b1,,b6AB

  1. Faites une supposition: pour chaque , devinez que . Procédez comme suit:a 1 = zzDa1=z

    1. Sur-approximation initiale: Définissez et .B = z - DA=DB=zD

    2. Raffinement itératif: appliquer à plusieurs reprises ce qui suit jusqu'à la convergence:

      • Affinez pour obtenir une nouvelle sur-approximation des .B bA,BBb
      • Affinez pour obtenir une nouvelle sur-approximation des .A aA,BAa
      • Soit et . B : = B A:=AB:=B
    3. Vérifier le succès: si les ensembles résultants ont chacun une taille 6, testez s'ils sont une solution valide au problème. S'ils le sont, arrêtez. Sinon, continuez avec la boucle sur les valeurs candidates de .zA,Bz

Une analyse. Est-ce que ça va marcher? Va-t-il éventuellement converger vers et , ou restera-t-il bloqué sans résoudre complètement le problème? La meilleure façon de le savoir est probablement de le tester. Cependant, pour vos paramètres, oui, je m'attends à ce que ce soit efficace.A={a1,,a6}B={b1,,b6}

Si nous utilisons la méthode # 1, tant quene sont pas trop grandes, heuristiquement je m'attends à ce que la taille des ensembles diminue de façon monotone. Pensez à tirer de . Chaque différence suggèrevaleurs; l'un d'eux est correct, et l'autre peut être traité (heuristiquement) comme des nombres aléatoires. Si est un nombre qui n'apparaît pas parmi les , quelle est la probabilité qu'il survive au filtrage et soit ajouté à ? Eh bien, nous nous attendons à ce soit suggéré à propos de|A|,|B|AA,Bd|B||B|1xaAa(|B|1)×36/251fois au total (en moyenne, avec un écart-type autour de la racine carrée de cela). Si , la probabilité qu'un mauvais survit au filtrage devrait être d'environ environ (en utilisant l'approximation normale pour le binôme, avec correction de continuité). (La probabilité est plus petite si est plus petite; par exemple, pour , je m'attends à .) Je m'attends à ce que la taille de soit d'environ , ce qui améliorera strictement la sur-approximation car elle est strictement inférieure à. Par exemple, si , alors sur la base de ces heuristiques, je m'attends|B|36xp=0.4|B||B|=30p0.25A| A | | A | = | B | = 36 | A | 18 | A |p(|A|6)+6|A||A|=|B|=36|A|18 , ce qui représente une nette amélioration par rapport à.|A|

Par conséquent, je prédis que le temps d'exécution sera très rapide. Je m'attends à ce que 3 à 5 itérations de raffinement suffisent pour la convergence, en général, et environ 6 suppositions à devraient probablement suffire. Chaque opération de raffinement implique peut-être quelques milliers de lectures / écritures en mémoire, et nous le faisons peut-être 20 à 30 fois. Donc, je m'attends à ce que ce soit très rapide, pour les paramètres que vous avez spécifiés. Cependant, la seule façon de savoir avec certitude est de l'essayer et de voir si cela fonctionne bien ou non.z


@DW: Merci beaucoup pour votre longue réponse et l'effort que vous avez pris pour taper autant de mots !!! Selon votre description, votre algorithme ici est tout à fait correct. Et je vais le coder pour tester l'efficacité dès maintenant.
un invité du

@DW: Bonjour, j'ai implémenté votre description en C ++. L'algorithme passe rapide et l'étape de raffinement fait réduire la taille des ensembles originaux et . Cependant, la convergence ne semble pas si parfaite. En fait, pour chaque supposition , les tailles finales de et sont toujours supérieures à 10 selon ma sortie d'enregistrement par le programme. Le nombre le plus fréquent d'éléments existants lorsque (et ) ne peuvent pas être améliorés par de nouvelles répétitions de raffinement est 11, mais je peux à peine voir un nombre inférieur à 10. Cependant, cela a rendu le problème résoluble en essayant chacun 6 éléments choisis parmiB z D A B A B ABzDABAB
un invité

@DW: (Cotinued) final et pour chaque supposition (bien que je n'ai pas implémenté la dernière étape sur mon PC). Le calcul du montant total sera d'environ , j'estime. Merci beaucoup! B z 2 20ABz220
un invité le

Désolé, mais mon dernier commentaire est trop long, et je dois le diviser en deux.
un invité le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.