首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从隐函数中提取模数

从隐函数中提取模数
EN

Cryptography用户
提问于 2019-12-26 23:33:23
回答 2查看 92关注 0票数 1

我有一个隐藏函数f(x) = x \pmod{n},并想要解决n基于一组输入和输出对,可以自由选择。

我想在没有暴力的情况下这样做(即从x_0=1开始,然后迭代x_{i+1}=x_i+1直到f(x_i)=0)。

到目前为止,我已经观察到,如果我展开x=an+b,那么通过从输入中减去f(x)=b,就会留下x-f(x)=an

我可以对不同的输入重复这个操作,并获得一个n的不同倍数的列表,但是我无法解决如何使用它们来解决n本身的问题。

如果我使用上面的过程来获得不同的a_0na_1n,我可以计算gcd(a_0n,\,a_1n) = kn,但是不能保证k=1,不管以这种方式处理了多少a_in,情况都是一样的。

这甚至是一个可解的问题,还是需要在函数上包含额外的约束,比如对域的显式,也许是f := \mathbb{F_2}[x] \to \mathbb{F_2}[x] (二元系数多项式)?

EN

回答 2

Cryptography用户

回答已采纳

发布于 2019-12-29 11:45:04

通过发现可以获得m_i=a_i\,n的各种(未知但本质上是随机的) a_i值,您已经完成了艰苦的工作。

现在定义n_0=m_0,并计算n_i=\gcd(n_{i-1},m_i)以增加i>0n_i迟早会收敛到n

这可以得到严格的证明(尽管我们经常跳过密码上下文中的严格证明)。草图:通过归纳证明n_i=k_i\,n用于k_i将所有a_j除以0\le j\le i。然后考虑任何素数因子p of k_i,以及在假定a_i是随机的情况下,它存活到i的概率。

注:通过将“素数”改为“不可约”,这在比整数(例如多项式)更广泛的背景下起作用。

票数 1
EN

Cryptography用户

发布于 2019-12-27 00:47:29

这闻起来像是一个HW问题,所以OP应该尝试使用更多的提示。

通过在x上查询这个函数,可以很容易地判断x\geq n还是x<n。如果k是一个自然数,比如2^k<n\leq 2^{k+1},您需要多少个查询才能找到这个k?知道这个k,你怎么能算出n呢?

如果模块操作是多项式除法的一部分,则可以使用二进制搜索找到n的程度。一旦你知道了这个程度,你就可以查询另一个多项式来找到n

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/76668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档