能力值:
( LV2,RANK:10 )
2 楼
分析一下
这个cm通过验证需要满足这个方程:
X^3+A*X+C = 0 mod P 1)
其中
A=0X95AC9329AC4BC9B5
P=0XFFFFFFFFFFFFFC01 是一个素数
C=F(NAME) 暂时认为是不可逆的,只跟用户名有关系的数
X=SERIAL
所以解这个三次方程就行了
解1)等价与解二次方程
X^2+CX+A^3 = 0 mod P 2)
设2)的两根为R1,R2对R1,R2求三次根得到T1,T2
那么X=T1+T2即为1)的根
得到X后,transform就可以得到序列号了
能力值:
( LV2,RANK:10 )
3 楼
分析得不错,不过对于III考察点并没有分析,再接再厉.
能力值:
( LV2,RANK:10 )
4 楼
分析得不错
谢谢
不过对于III考察点并没有分析,再接再厉
你是说模 2^64-p1=p2 (p1是另一个小素数,p2也是素数)的实现方法么?
的确廷巧妙的可以推导一下
求x=b*y+c mod p2 其中b=2^64
关键在于求b*y mod p2
即b*y%(b-p1)
所以把b*y变形为b*y-y*p1+y*p1
即为b*y = y*p1 mod p2
在II中p1=0x3B
在III中p1=0x3FF
这也就是lz在II,III中模算术的原理
能力值:
( LV2,RANK:10 )
5 楼
不是这个啊,是求模三次根.
能力值:
( LV2,RANK:10 )
6 楼
刚出去了一会想可能lz是想考察模二次跟三次根刚回来就看lz发贴了
这个问题,因为在数论书上讲得比较多,一想大家翻翻书就找到答案了所以没有详细解释
实际上求x^3 = c mod p
只要3与p-1互素就行了 设3*a = 1 mod p-1
即a是3的模逆元
那么(x^a)^3 = x^(3*a) = x^(1+k*(p-1)) = x mod p
那么就c的三次根只需求 c^a即可
这种方法可以推广到更高次的根,也可以推广到别的域里
能力值:
( LV2,RANK:10 )
7 楼
hehe,你看看这里的p-1和3互素吗?
能力值:
( LV2,RANK:10 )
8 楼
o?
呵呵,昨天搞出来的时候忘形了,都忘了验证了
这也可以解决在这里
p-1=3^4*p2*p3....
那么可以先求得x^3=c mod p的3^4=81次根
然后27次方即可
能力值:
( LV2,RANK:10 )
9 楼
实际上如果写一个kg的话,就能遇到lz提到的问题
只是以前曾经想通过在一个任意的域上该如何去解模一个素数,模一个可分解合数的问题,碰到x^3 = c mod p就没有细想了
能力值:
( LV2,RANK:10 )
10 楼
hehe,不会这么简单啊. x^81无解不等于x^3无解.
能力值:
( LV2,RANK:10 )
11 楼
不会呀,81跟(p1-1)/81是互素的,应该存在81 mod (p1-1)/81的逆元
那么如果3次根存在的话所有的81次根都是存在的呀
能力值:
( LV2,RANK:10 )
12 楼
你再想想吧.
能力值:
( LV2,RANK:10 )
13 楼
hmm,这么求
先得到c^27 = d mod p
再求 y^81 = d mod p 的81次根y
如果 c = x^3 mod p 那么y就可以求出来即为解
能力值:
( LV2,RANK:10 )
14 楼
差一点被你蒙了, (81,p-1)=81,不是互素,这和3不是一样的吗?
能力值:
( LV2,RANK:10 )
15 楼
我写的是
"81跟(p1-1)/81是互素的,应该存在81 mod (p1-1)/81的逆元"
呵呵
能力值:
( LV2,RANK:10 )
16 楼
这么求的目的就是想把x^3 跟y^81 存在等价起来
而且81跟(p1-1)/81是互素的,所以模逆元存在,比较好解
能力值:
( LV2,RANK:10 )
17 楼
既然你还这么认为,那就写个kg出来吧,让实践说明一切。
有问题我们随时可以讨论。
能力值:
( LV2,RANK:10 )
18 楼
biocrk, 请收email
能力值:
( LV2,RANK:10 )
19 楼
luxor,我没有到邮件呀,你可以发到tttt__tttt@163.com
另外我下午试验了我的想法,failed
求81次根的方法是正确的,但是x^3与y^81是不等价的
我正在想别的方法
能力值:
( LV2,RANK:10 )
20 楼
解法在教科书里应该是找不到的,需要你的创新能力。
能力值:
( LV2,RANK:10 )
21 楼
我找了一个Fp上的三次方程根的求法的paper,可以仿照它的作,不过肯定有别的方法
比如三次剩余
比如解的加罗瓦群的性质
还想再试试别的办法
这两天再找不到合适的解法的话也只能放弃了,时间上耗不起呀
能力值:
( LV2,RANK:10 )
22 楼
luxor
crackmes.de上有人回复了,用了ntl直接分解因式的寻找的
there exist so many math tools and libraries (I was thinking of solving it in pure MAPLE or
PARI/GP first).这个好像不是大家关心的结果
能力值:
( LV15,RANK:2473 )
23 楼
很好,很强大
能力值:
( LV2,RANK:10 )
24 楼
之前,我并不知道有Fp上的通用多项式分解算法。不过实现这种算法还是比较复杂的。
我会把目前3个Keygenme的算法分别解释一下。
能力值:
( LV2,RANK:10 )
25 楼
所有的f(x)=0 (mod p^n)都可以使用Berlekamp算法或者Cantor-Zassenhaus算法分解f(x)来达到求解x的目的。之前我孤陋寡闻了,居然不知道这种算法的存在。因此这里探讨的是实现起来较为简单的算法。
抛开通用算法,Keygenme III求解的关键是模为素数的三次根。其实完全可以参照求解模二次根的思想去求解模三次根,甚至是模n次根。这里不讨论算法的细节,只说一下思想。其思想就是利用非n次剩余的特性。
当p!=n*k+1时,模n次根都可以转化成模小于n次根。这个就是Keygenme II的类型。
当p=n*k+1时,因为非n剩余b满足b^((p-1)/n) != 1 (mod p)。设e=b^((p-1)/n), 那么e^n=e^(p-1)=1 (mod p),而且e,e^2,..,e^(n-1)总共有(n-1)个不等于1的解都满足x^n=1 (mod p)。
设p-1=(n^s)*t,c=e^t,然后依次去求a^((p-1)/n)到a^((p-1)/(n^s))的所有剩余情况,针对不同的e^i值,来乘C(其中C^((p-1)/n)=e^(n-i-1),C是c的某个次幂)的那个值。这样如果模n次根存在,就可以得出结果。