密码学与离散对数问题

现代的重要组成部分密码学是使用单向函数对于公钥系统。这些(大致)是数学规则,很容易在一个方向上执行,但意义重大(理想情况下,以指数形式)更难逆转。一种流行的方法是RSA公司密码体制;它的主要竞争对手是椭圆曲线 离散对数问题(ECDLP),已进入各种政府标准由于它比RSA具有某些优势。

然而,目前还没有任何功能经过证实的是单向的。离散对数问题(DLP)并不特定于椭圆曲线;它可以应用于任何这是一个数学结构,它有一个规则,即组操作,用于将两个组对象组合成另一个组对象。当然,如果我们可以这样做一次,我们可以再做一次标量乘法:将[2]g写成g?g,将[3]g写成g?g,依此类推。我们可以在对数中快速计算h=[n]g2(n) 集团运营。DLP要求我们执行相反的操作:给定g和h,其中h=[n]g,恢复n摘要使用设置组首要的元素N的数量,可以证明这个问题至少需要平方英尺(N) 群运算求解;即在正向方向上比标量乘法指数地长。这不是矛盾我早先的断言;任何密码实现都需要选择一个特定的组,并且可能有额外的结构可用于更快地解决DLP。因此,尽管有证据表明,一般来说,不可能有一条捷径通过ECDLP。

婴儿步、巨大步

婴儿步,巨人步(BSGS)算法是一个通用算法属于平方根算法-也就是说,那些在不利用特定组的属性的情况下具有最佳性能的组。让我们先来看一个例子。

假设我们知道[n]g=h,n在0…99范围内。然后天真确定n的方法将是简单地从标识[0]g开始,然后执行连续的组操作以找到[1]g、[2]g、[3]g等,将每个值与h进行比较,直到找到匹配为止。最坏的情况下,这将需要100步;平均50岁。

但是如果n是一个两位数的数字,我们可以把它看作是10a+b,表示0到9范围内的a和b。那么我们有

h=[n]g=[10a+b]g=[10a]g?[b]g

所以

hŞ[-b]g=[10a]g

(其中[-b]g=[b](-g)对于-g是g的群逆)

因此,我们可以考虑此表达式左侧和右侧的所有可能值,因为我们知道会有一个公共值。这有什么好处?由于b的范围从0到9,因此h[-b]g只有10种可能性。我们将其描述为婴儿步h、 h?-g,h&oplus[-2]g…h?[-9]g。然后我们可以开始计算巨大的台阶对于右手侧-[10]g、[20]g、[30]g等。直到我们获得匹配。

每个步骤(婴儿或巨人)只需要一个组操作(假设u=[10]g,那么巨大的步骤是u、[2]u、[3]u……),因此,尽管我们预先承诺10个组操作来列出婴儿步骤,但我们最多需要20个操作,平均需要15个操作来恢复n。

一般情况下(由余数定理),对于一个固定的s,总是有a,b,使得n=as+b,b在0..s范围内;因此,我们可以在生成巨大的台阶之前,为每个b形成s个婴儿台阶克,2秒g中,3秒g.…-最多N/s,其中N是跳跃n(最坏情况下基数组的)。为了平衡形成婴儿步态所花费的时间和拥有更大(因而更少)的巨大步态的速度最佳的s的选择是围绕sqrt(N),最坏情况下是围绕2sqrt的(N)组操作。

请注意,有一个时空权衡required:naive方法一次只存储一个group元素,而我们需要存储s=sqrt(N)元素(baby steps)。最佳性能还取决于将巨大步骤与这些值进行比较的有效方法,例如哈希表.

算法摘要

输入:N阶群的元素g,以及h=[N]g的群中的一些h。
输出:n的值。

  1. 设置=地板(平方米(n))+1。
  2. 设置b=h,并将(b,0)存储在哈希表中。
  3. 对于j从1到s:
    设置b=b?(-g),并将(b,j)存储在哈希表中

  4. (哈希表现在包含了从0到s的j的子步骤对(b_j=h敇[-j]g,j))

  5. 将i设置为0,将G设置为组标识([0]G)
  6. While(真)执行:
    • 如果G=b_j,对于某些j(G点击的哈希表查找),返回是+j
    • 设置i=i+1和G=G[s]G

变体和改进

BSGS可以在有更多信息可用的情况下进行调整,例如当n被限制位于特定位置时间隔,或其等价类 其他一些值是已知的。也可以从中获得收益并行化通过分解婴儿步态的生成,然后在其中测试巨大的步态多处理器节点.

自适应宽度变量还允许在n上没有已知边界时进行BSGS搜索,从较小的s值开始,并定期增加它,根据需要加满Baby Steps。沿着这些路线(Terr,2000),一种特别优雅的方法使用三角形数0,1,3,6,10……作为大步,因此每大步只需要一个额外的婴儿步。

BSGS的基本策略适用于其他领域:事实上,它最初由Shanks(1971)记录,用于计算理想类群。寻找元素顺序可以被视为离散对数问题的一个实例,但最近(Sutherland,2007)针对这一问题开发了BSGS的一个变体,它超出了DLP的下限,使得顺序问题比一般DLP更容易。

BSGS不是唯一的平方根算法;一个流行的替代方案是波拉德罗法,基于生日悖论,具有较小的内存需求。

登录登记在这里写点什么或联系作者。