我正在编写一个椭圆曲线加密的小项目,当我使用仿射坐标系时,该程序运行良好,这意味着每个点由2个坐标(x',y')表示.
现在我试图用雅可比坐标系代替仿射坐标系,其中每个点由3个坐标(x,y,z),x'= x /z²和y'= y /z³表示.
我想知道如何将仿射坐标转换为雅可比坐标**.在一些教程中,人们使用公式:(x,y)=(x,y,1),这意味着z坐标始终设置为1.但我不确定它是否正确.
然后,对于椭圆曲线上的点加法,计算P(x1,y1,z1)+ Q(x2,y2,z2)= R(x3,y3,z3).我在我的程序中使用了以下公式:
u1 = x1.z2²
u2 = x2.z1²
s1 = y1.z2³
s2 = y2.z1³
h = u2 - u1
r = s2 - s1
x3 = r² - h³ - 2.u1.h²
Y3 = r. (U1.h² - x3) - s1.h³
z3 = z1.z2.h
Run Code Online (Sandbox Code Playgroud)
但是当我测试我的程序时,我会得到一些负坐标,例如(-2854978200,-5344897546224,578).当我尝试使用公式(x'= x /z²,y'= y /z³)将结果转换回仿射坐标系时,我得到(-8545,-27679),实际上x坐标是-8545.689. ... jacobian x坐标不能被z²整除.
如果坐标不是整数,我该怎么办?如果他们是负面的?我已经尝试用我的曲线的字段大小MOD,但结果也不正确.
所以使用雅可比坐标的点(x,y,1)是正确的,但不是唯一的.所有满意(a^2.x,a^3.y,a)的点都是等价的.在我的程序中,曲线是在素数场中定义的,所以当我计算时u1, u2, s1, s2 ...我应该将MOD p应用于每个变量?
并且为了将最终结果转换回仿射坐标,例如x坐标,实际上它不是一个除法,它是一个模块化逆?例如,我的曲线是在有限素域定义p=11,并予使用雅可比坐标有一个点(15,3,2),变换雅可比x坐标仿射x坐标,我要计算2^2 = …
我正在编写一个带有JPasswordField的小applet,我想知道是否可以保护我的JPasswordField的内容,以防用户的PC被键盘记录器攻击...
我知道Java无法进行内核级操作,因此无法加密用户的键盘.最终还有其他替代解决方案吗?
非常感谢.