首页
社区
课程
招聘
[求助]请教一种密钥交换技术
2011-8-22 12:53 5124

[求助]请教一种密钥交换技术

2011-8-22 12:53
5124
服务器验证用户名和密码过程如下:

1、 服务器首先向客户端发送三个数据,这三个数据分别为2,a,b。其中前两个数据是固定的,即每次发送的2和a都是固定的,而b是会变化的。这里a和b的长度都是0x100字节,例如:
a=F488FD584E49DBCD20B49DE49107366B336C380D451D0F7C88B31C7C5B2D8EF6F3C923C043F0A55B188D8EBB558CB85D38D334FD7C175743A31D186CDE33212CB52AFF3CE1B1294018118D7C84A70A72D686C40319C807297ACA950CD9969FABD00A509B0246D3083D66A45D419F9C7CBD894B221926BAABA25EC355E92F78C7(个人猜测这是一个大素数)
b=F43565BDBFF6644ABE81DDF290AE7C38B8BA2644BAFAB4ABE2AE31EC18D19434C75669077978D2731095B757045DCF1E9688FDB741A776141F5A5383A77442AFD925D1B1A58CA403A726F337CEDA5213099099DC0946346D135B9ECF7359468B442E35263585B754A12EB3F8C3CA425A70CF97A6922783D688D088923A82B96A

2、客户端随机生成一个数据c,c的长度为0x28。随后进行如下运算:
d = pow(2,c)%a,即计算2的c次方,然后摸a,得到数据d。
e = pow(b,c)%a,即计算b的c次方,然后摸a,得到数据e。

3、客户端把数据d发送给服务器。

4、客户端截取数据e的前八个字节,作为加密密钥key,对用户名和密码进行BLOWFISH加密,得到数据f。把数据f发送给服务器。

5、服务把用户名和密码的验证结果发回客户端。

通过分析,BLOWFISH是一种对称密码加密,服务器要解密数据f只有得到相应的密钥key才可以解密。而服务器得到的客户端的信息只有数据d,问题是:
如何通过数据d以及之前的2,a,b计算出key?这是一种怎样的密钥交换技术?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (6)
雪    币: 993
活跃值: (437)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
Loka 2 2011-8-22 16:32
2
0
确信是2?不是3或65537?
你说的d = pow(2,c)%a应该是用RSA公钥加密c给服务端,服务端用它的私钥解出c,再和你做同样的操作e = pow(b,c)%a,就可以解密你blowfish加密的内容。
a应该RSA大数。
雪    币: 244
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
freecsw 2011-8-22 16:40
3
0
确定是2。如果像你说的这样,那就没有办法通过数据包还原出密钥来了,哎。。。。

不过还是谢谢!
雪    币: 244
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
freecsw 2011-8-22 17:02
4
0
但是这好像不是RSA算法,看了一下RSA算法,其描述如下:
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。   
(n及e1),(n及e2)就是密钥对。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即:   A=B^e2 mod n;B=A^e1 mod n;
--------------------
如果说要加密c,那么应该是d=pow(c,2)%a,才对。。。
请密码学高手指教
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XuRubin 2011-8-23 04:38
5
0
是个基于离散对数的协议,服务器端有一个key满足b = pow(2, key) % a
直接搞是不行的,不过可以Man-in-the-middle
雪    币: 993
活跃值: (437)
能力值: ( LV12,RANK:403 )
在线值:
发帖
回帖
粉丝
Loka 2 2011-8-23 15:52
6
0
楼上正解,不好意思误导楼主了,看到模a就习惯性认为和RSA有关。sorry
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
游客 2011-8-29 21:36
7
0
算法为 ElGamal (或其引申的DH/DSA).
1. 密钥对产生办法: 选择一个素数p, 两个随机数 g 和 x, 其中 g, x < p, 计算 y = g ^ x ( mod p ), 则其公钥为 y, g 和 p, 私钥是x.
对应现实, 服务器发送的数据分别是: g = 2, p = a, y = b. x 保留在服务器.
2. 生成密钥办法: 选择一个随机数 k, k 与 p - 1 互质, 计算
a = g ^ k ( mod p )  <= 对应 d = 2 ^ c (mod a)
则共同的加密密钥为 b = y ^ k ( mod p )  <= 对应 e = b ^ c  (mod a).
由于 b = y ^ k = (g ^ x) ^ k = g ^ (x * k) = (g ^ k) ^ x = a ^ x (mod p), 由于服务器知道 x , 所以知道 a 就可以算出同样的 b 了.
游客
登录 | 注册 方可回帖
返回