1.一種基于SM2橢圓曲線的二分之一概率密鑰協商方法,其特征在于,包括:
協商密鑰的發起方用戶A和接收方用戶B均按照預設要求針對交換的數據進行計算和準備;
用戶A產生隨機數ra,并在SM2橢圓曲線上進行點乘運算,得到隨機點Ra,Ra=[ra]G,將隨機點Ra發送至用戶B;其中,G為SM2算法對應橢圓曲線的基點;
用戶B產生隨機數rb,且隨機產生б值0或1,根據Rb=[rb]G+б[rb]G計算出用戶B當前的隨機點,同時將[rb]G得到的坐標點Rb1回傳到用戶A;
用戶A對用戶B反饋的坐標點Rb1分別展開運算,計算得到兩個密鑰Ka1和Ka2;密鑰Ka1的計算過程為:
Xb1=2w+(xb1?(2w-1));
Ub1=[h*Ta](Pb+[Xb1]Rb1);
Ka1=KDF(Ux1||Uy1||Za||Zb,klen);
其中,xb1表示坐標點Rb1的坐標;表示兩個整數按照比特位進行與運算;w=〔(〔log2(n)〕/2)〕-1,〔m〕表示頂函數,大于或等于m的最小整數;n表示SM2橢圓曲線基點G的階;Xb1和Ta表示計算過程值;h表示SM2橢圓曲線余因子,其值為1;Pb表示用戶B的公鑰;Rb1表示用戶B分享給用戶A的點,即第一組密鑰計算參數;KDF表示密鑰派生函數;Ub1為用戶A根據Rb1計算出的點,坐標為(Ux1,Uy1);Za表示用戶A標識、SM2橢圓曲線參數和用戶A公鑰產生的哈希值;Zb表示用戶B標識、SM2橢圓曲線參數和用戶B公鑰產生的哈希值;klen為一個整數,表示要獲得密鑰的比特長度,其大小小于232-1;
密鑰Ka2的計算過程為:
Xb2=2w+(xb2?(2w-1));
Ub2=[h*Ta](Pb+[Xb2]Rb2)-?[h*Xb2*Ta]Rb1;
Ka2=KDF(Ux2||Uy2||Za||Zb,klen);
其中,Rb2=Rb1+Rb1,表示用戶A用于計算第二組密鑰參數的點;xb2表示Rb2的坐標;Xb2和Ta表示計算過程值;Ub2為根據Rb2計算出的點,其坐標為(Ux2,Uy2);
用戶A通過隨機數ra、隨機點Ra的坐標x1以及用戶A的私鑰da進行內部計算,得到Ta;Ta的計算公式為:
Ta=(da+X1?*?ra)mod?n;
X1=2w+(x1(2w-1));
其中,表示兩個整數按照比特位進行與運算;X1表示計算過程值;
用戶B對用戶A反饋的隨機點Ra進行展開運算,得到密鑰Kb,根據б的具體取值,使Kb等于Ka1或Ka2的其中一個;密鑰Kb的計算過程為:
X1=2w+(x1(2w-1));
V=[h*Tb](Pa+[X1]Ra)=(Vx,Vy);
Kb=KDF(Vx||Vy||Za||Zb,klen);
其中,V表示用戶B計算后獲取到橢圓曲線上的點;(Vx,Vy)表示V點的坐標;Pa表示用戶a的公鑰;x1表示隨機點Ra的坐標;
用戶B通過隨機數rb、隨機點Rb的坐標x2以及用戶B的私鑰db進行內部計算,得到Tb;Tb的計算公式為:
Tb=(db+X2?*?rb)mod?n;
X2=2w+(x2(2w-1));
其中,X2為計算過程值;
當б為0時,則用戶B用于參與后續運算的Rb與回傳至用戶A的Rb1相同,用戶A生成的Ka1等于Kb;當б為1時,則用戶B用于參與后續運算的Rb與回傳至用戶A的Rb1不同,A用戶生成的Ka2等于Kb。