给定


19

谁能帮助我解决以下问题?

我想找到一些值ai,bj(mod N),其中i=1,2,,K,j=1,2,,K(例如K=6),给定一个K2值的列表,对应于差aibj(modN)(例如N=251),而无需知道具体的对应关系。由于价值观ai,bj(modN)并不是唯一确定给定的差异aibj(modN),我们寻找任何 价值的有效分配。

绝对地,尝试列表中K2数字的每个置换(总共K2!可能的情况),然后以ai,bj作为变量求解模块化方程是不可行的。

实际上,此问题出现在有关对NTRU签名方案的早期版本进行密码分析的论文中(http://eprint.iacr.org/2001/005)。但是,作者只写了一个句子“简单的回溯算法找到了一种解决方案……”(在第3.3节中),所以有人可以给出更多的解释吗?此外,作者还提到“每个循环移位{((ai+M)modN,(bi+M)modN}i=1K或掉期交易({(N1bi,N1ai)}i=1K)导致a_i-b_j \ mod N的模式相同,aibjmodN这对您有帮助吗?


7
注意,不可能恢复ai,bj,因为如果将常数C添加C到所有数字中,则差异将保持不变。
Yuval Filmus 2013年

1
@Yuval:这已经包含在描述的最后一句中。我认为只需要一种解决方案,因为可能存在多种解决方案。
domotorp

2
@Yuval对不起,不指出在ai,bj的也应采取模块化N。因此,没有无限的解决方案。
的客人

@domotorp是的,找到任何一种解决方案都可以。
的客人

1
也许OP可以澄清aib_j在帖子的前面以Nbj取模:也许在标题中或在第一段中。常数C的问题也值得一提。当我开始阅读时,这一切使我感到困惑。NC
Juan Bermejo Vega

Answers:


4

对于和,这是一个建议。给我们一个列表。首先选择其中一个,而不失一般性。不失一般性,,我们得到的值。现在再取一个,并希望它的形式为(这种情况的发生概率为),并推论出。N = 251 a ib jK=6N=251一个1 - b 1 b 1 = 0 1 2 - b 1 5 / 35 = 1 / 7 一个2aibj(modN)a1b1b1=0a1a2b15/35=1/7a2

在这一阶段,我们知道。我们的下一个目标是寻找为。对于每个候选,如果则也应在列表中。如果,则也出现在列表中的约为。因此,如果我们做到发现一些候选人为此也榜上有名,那么很可能。这样,我们可以确定地恢复。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 ib j+ a 2aa1,a2,b1a1bjj1aibji=1(aibj)+(a2a1)=a2bji133 / 251 一个 - b Ĵ一个 - b Ĵ+ 一个2 - 一个1= 1 b 2(aibj)+(a2a1)33/251aibj(aibj)+(a2a1)i=1b2

在这个阶段,我们知道。以与恢复相同的方式,我们可以确定地恢复。然后,我们可以通过查找候选来恢复,而候选的和都在列表中。因为我们有更大 s,所以我们的失败概率会明显下降。我们继续找到。b 2 a 3 b 3 a i - b ja i - b j+ a 2 - a 1a i - b j+ a 3 - a 1a b 3a 4b 4a1,a2,b1,b2b2a3b3aibj(aibj)+(a2a1)(aibj)+(a3a1)ab3,a4,b4,a5,b6,a6,b6

在该算法的任何时候,我们可能都猜错了,这最终将导致矛盾(比如在某个时候,没有好的候选)。然后,我们回溯并尝试另一种可能性;如果我们用尽了所有可能性,我们将再次回溯,并尝试另一种可能性(针对算法的不同阶段);等等。aibj

实际编程此算法是一个很好的练习-这可能是了解如何正确实现回溯的唯一方法。这也是判断该算法是否在实践中有效的唯一方法。


谢谢,我还将对此回溯进行编码,以使其更加理解。也许那篇原始论文的作者使用了类似的方法,因为他还提到了“回溯”。
的客人

对不起,忘记将我的评论发布到您的答案中!我还实现了您建议的方法(在C ++中)。结论是您的算法运行良好,然后可以很快找到一种解决方案(在我的PC上不到一秒钟)。这次,我可以更好地了解回溯程序。非常感谢你!
做客

为什么我在最近的评论中不能“ @Yuval”?抱歉,但是我已经尝试了几次。
客人

也许您可以在线共享代码,以便其他阅读本文的人可以访问它。
Yuval Filmus,

5

更新以下描述针对一个不同的问题(在一个集合中您具有所有成对距离,而不是两个不同集合之间的成对距离)。无论如何,我都会保留它,因为它关系密切。

此问题称为环行问题,是一般托罗斯嵌入问题的特例。它也与收费公路问题密切相关,在收费公路问题中,距离差异是绝对的(不是模数)。d

尚不清楚环行道问题是否允许采用多重时间算法。对于相关问题有多种伪多时算法。最好的参考文献(还是旧文献)是Lemke,Skiena和Smith的论文


1
我认为这个问题是不同的。在环行道问题中,我们知道所有成对的距离,这里我们只知道在不同组中的两个点之间。尽管这似乎少了一些信息,但实际上可以帮助解决问题。
domotorp

是啊。这是二部图。好点子。
Suresh Venkat

二分图?就像是。也许我应该这样尝试这个问题,但是我现在没有具体的思路。
的客人

3

我认为这是您的立足点,可能足以解决问题。

假设我们有四个差异,,和,它们是两个和两个之间的成对差异。称其为四重差异。请注意,我们有一个不平凡的关系:a 1 - b 2 a 2 - b 1 a 2 - b 2 a ba1b1a1b2a2b1a2b2ab

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

您可以尝试使用这种关系从列表中识别潜在的四重奏。例如,从列表中选择四个差异。如果它们不满足上述关系,那么它们绝对不是四方结构。如果他们确实满足关系,则可能来自四重奏。K2

您可以通过多种方式从这里取货,但是我怀疑这已经足够了。

我特别怀疑,对于您的示例参数设置,问题将非常容易,因为上述用于识别四重奏的测试可能不会有太多的误报。从列表中选择4个差异的所有种方式中,将有四重奏(将全部满足关系),其余为非四重奏(满足启发式地与概率为的关系)。因此,我们期望看到误报,即即使不是四重奏也通过测试的4元组。对于您的参数,这意味着我们有225个四重奏和 K(K24)1/NK2(K2)21/N58905-225/251234((K24)(K2)2)/N(58905225)/251234其他误报;因此,通过测试的4元组中大约有一半实际上是四重奏。这意味着上述测试是识别四重奏的一种很好的方法。一旦您识别了四重奏,您就可以真正地恢复差异列表的结构。


@DW:谢谢,但是我想知道在找到所有可能的四重奏(总共225 + 234 = 459个)之后的下一步。是否应该搜索3个不重叠的四重奏并测试它们是否可以构成可能的解决方案?如何有效地做到这一点?也许没有那么困难,因为不会有很多重叠。
的客人

@aguest,好问题!我不记得当时在想什么。我想,我记得在想一个办法可以是一个四重奏开始,然后查找在2个差异(例如,从产生的重叠之所有其他其中),但我不知道从那里去(如何滤除误报)。 j 2a1,aj,b1,b2j2
2013年

3

这是另一种方法,它基于迭代查找不能出现的数字。调用一组对的过近似的,如果我们知道。类似地,如果我们知道,则是的。显然,越小,这种过度逼近就越有用,并且。我的方法基于迭代地细化这些过大的近似值,即迭代地减小这些集合的大小(因为我们排除了越来越多的值是不可能的)。{a1,,a6}一个{ 一个1... 一个6 } b { b 1... b 6 } Aa{a1,,a6}ABb{b1,,b6}BAB

该方法的核心是一种方法的改进:给定的过近似为的和过近似为的,找到一个新的过近似为的,使得。特别是,通常将小于,所以这让我们提炼过近似为的。一个b *一个**一个AaBbAaAAAAa

根据对称性,基本上是相同的把戏,让我们改善了近似为的:给过近似对的和过近似为的,它会产生一个新的过-近似为的。A a B b B bbAaBbBb

因此,让我告诉您如何进行优化,然后将所有内容放在一起以获得针对此问题的完整算法。在下文中,令表示差的多组,即;在给定,我们将专注于找到精炼的超逼近。d = { 一个 - b Ĵ1 Ĵ 6 } *DD={aibj:1i,j6}AA,B

如何计算细化。 考虑一个单一的差别。考虑集合。基于我们的知识是的一个过度逼近,我们知道至少一个元素必须是的元素。因此,我们可以将中的每个元素都视为“建议”,以使数字可能包含在。因此,让我们浏览所有差异并为每个确定建议的数字。d + = { d + ÿ Ý } b d + { 一个1... 一个6 } d + d d ddDd+B={d+y:yB}Bbd+B{a1,,a6}d+BAdDd

现在,我将观察到在此过程中,建议至少建议使用数字 6次。为什么?因为差异在,并且当我们处理它时,将是它建议的数字之一(因为我们保证,肯定会包含)。同样,差异出现在中的某个位置,这将导致再次建议。这样,我们看到将建议的正确值至少6次。对于和同样适用1 - b 1 d 一个1 b 1一个1 - b 1+ 一个1 1 - b 2 d 一个1 1 2 3a1a1b1Da1b1B(a1b1)+Ba1a1b2Da1a1a2a3, 等等。

因此,让为至少建议6次的数字的集合。这肯定是对的过近似的,由上述意见。a * aAaa

作为一种优化,我们可以筛选出不存在于所有建议立即:换句话说,我们可以把该差为暗示所有的值。这将确保我们将有。我们希望严格小于 ; 没有保证,但是如果一切顺利,也许会的。d d + **Ad(d+B)AAAAA

综上所述,将细化为的算法如下:A *A,BA

  1. 令。这是多套建议。S=dD(d+B)A

  2. 计算每个值在出现多少次。令为在中出现至少6次的值的集合。(这可以通过建立一个数组高效地实现 251最初,最初都是零,并且每个数时间建议,则递增 ;在结束你通过扫寻找元素其值为6或更大)A * S a s a [ s ] aSASasa[s]a

可以建立类似的方法来细化以获得。你基本上反向上面的事和倒装一些迹象:例如,而不是,你看。B d + B d + AA,BBd+Bd+A

如何计算初始的超近似值。为了得到我们最初的近似值,一个想法是假设(wlog)。由此可见,每个值必须出现中某处,因此差异列表可以作为我们最初的过度近似为的。不幸的是,这并没有给我们一个非常有用的的过度逼近。a i D D a bb1=0aiDDab

更好的方法是另外猜测之一的值。换句话说,我们假设(wlog),该,并使用作为我们的初始过近似的。然后,我们猜测这36个值中的哪个确实是的值之一,例如。这然后使我们有过近似为的。我们使用此初始超逼近,然后对其进行迭代细化直至收敛,并测试结果是否正确。我们最多重复36次,在上进行36次不同的猜测(平均6次猜测就足够了),直到找到一个可行的为止。b 1 = 0 A = D a a a 1 B = a 1 - D b A B a 1ab1=0A=Daaa1B=a1DbA,Ba1

完整的算法。 现在我们可以使用完整的算法来计算。基本上,我们得出和的初始过度逼近,然后进行迭代细化。 A Ba1,,a6,b1,,b6AB

  1. 猜一猜:对于每个,猜测。请执行下列操作:一个1 = žzDa1=z

    1. 初始过度逼近:定义和。B = z DA=DB=zD

    2. 迭代优化:重复应用以下内容,直到收敛为止:

      • 瑞风获得一个新的超逼近中的的。B * bA,BBb
      • 瑞风得到一个新的超逼近中的的。A aA,BAa
      • 令和。 B = B A:=AB:=B
    3. 检查是否成功:如果结果集大小均为6,则测试它们是否是该问题的有效解决方案。如果是,请停止。如果不是,请继续循环候选值。žA,Bz

分析。 这样行吗?它最终会收敛在和还是会在没有完全解决问题的情况下卡住?找出答案的最佳方法可能是对其进行测试。但是,对于您的参数,是的,我希望它会有效。B = { b 1b 6 }A={a1,,a6}B={b1,,b6}

如果我们使用方法#1,只要并不是太大,试探性地,我希望这些集合的大小能够单调地缩小。考虑从派生。每个差异表示价值观 其中一个正确,而另一个可以(启发式)视为随机数。如果是不与中出现了一些的,什么是概率,它生存的过滤,并且加入到?好了,我们期待被建议约A A B d | B | | B | 1 x a A a | B |1 × 36 / 251 | B | 36 X p = 0.4 | B | | B | = 30 p 0.25 * p|A|,|B|AA,Bd|B||B|1xaAa(|B|1)×36/251总计(平均,标准偏差大约是平方根)。如果,则错误的幸免于滤波的可能性应约为左右(使用二项式的法线近似,并进行连续性校正)。(如果较小,则概率较小;例如,对于,我期望。)我期望的大小约为,因为它严格小于,因此将严格改善过逼近度。例如,如果,那么基于这些启发式方法,我期望|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,比有很大的改进 。|A|

因此,我预计运行时间将非常快。我期望大约3-5次细化迭代足以实现收敛,并且在大约6次猜测可能就足够了。每个优化操作可能涉及数千次内存读/写,而我们执行的次数可能为20-30次。因此,对于您指定的参数,我希望它很快。但是,唯一能确定的方法就是尝试一下,看看它是否运行良好。z


@DW:非常感谢您的长时间回答以及您为键入许多单词而付出的努力!!!根据您的描述,此处的算法非常正确。我现在将对其进行编码以测试效率。
的客人

@DW:嗨,我已经用C ++实现了您的描述。该算法运行速度很快,优化步骤的确减小了原始集合和的大小。但是,收敛似乎不是那么完美。实际上,对于每一个,根据我的程序输出的记录,和的最终大小仍然大于10。无法通过进一步细化来改善(和)时最常见的现有元素数为11,但是我几乎看不到低于10的数字。但是,通过尝试每个问题可以解决此问题。从ž d * * * *ABzDABAB
客人中

@DW:(继续)对于每个猜测最终和(尽管我没有在PC上实现最后一步)。我估计总数将约为。非常感谢你!B * z 2 20ABz220
的客人

抱歉,我的最后评论太长了,我必须将其分为两部分。
的客人
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.