附 錄 B (規范性附錄) 轉換函數
B.1 八位位組串/比特串轉換:OS2BSP 和 BS2OSP
八位位組串和比特串之間的轉換函數 OS2BSP 和 BS2OSP 定義如下:
—— ——函數OS2BSP(x),輸入是八位位組串x,輸出是比特串x;
—— ——函數BS2OSP(y),輸入是比特串y,其長度是8的倍數,輸出是一個八位位組串x,所以有y= OS2BSP(x)。
B.2 比特串/整數轉換:BS2IP 和 I2BSP
比特串和整數之間的轉換函數BS2IP 和 I2BSP定義如下:
—— ——函數BS2IP(x) 把比特串x映射成一個整數x′。映射方法如下:如果x = ?xl-1,……,x0?其中x0, . . . , xl-1是比特,那么x′定義為x′ = Σ0 ≤ i < l, xi = ‘1’ 2^i^;
—— ——函數I2BSP(m, *l *) ,輸入是兩個非負整數m和l,輸出是一個長度為l的比特串x,所以如果存在x,則有BS2IP(x) = m。否則函數失敗。
非負整數n的比特長度是使用二進制表達的比特個數,例如?log2(n + 1)?。為了表達簡練,Oct(m)定義Oct(m) = I2BSP(m, 8) 。
注:當且僅當m的比特長度大于l時I2BSP(m, l)失敗。
B.3 八位位組串/整數轉換:OS2IP 和 I2OSP
八位位組串和整數之間的轉換函數OS2IP 和 I2OSP定義如下:
—— ——函數OS2IP(x),輸入是八位位組串x,輸出是整數BS2IP(OS2BSP(x));
—— ——函數I2OSP(m, l) ,輸入是兩個非負整數m和l,輸出是一個長度為l的八位位組串x,所以如果存在x,則有OS2IP(x) = m。否則函數失敗。
非負整數n的比特長度是使用基于256表達的數字個數,例如?log256(n + 1)?;長度值使用L(n)表示。
注1:當且僅當m的比特長度大于l時I2OSP(m, l )失敗。
注2:八位位組x通常使用長度為2的十六進制格式,表示為OS2IP(x);當OS2IP(x) < 16時,代表比特串0000 的“0”作為前綴。
B.4 有限域元素/整數轉換:FE2IPF
將有限域F的元素轉換為整數值的函數FE2IPF定義如下:
—— ——函數FE2IPF把元素 a∈ F 映射成整數值a′。映射方法如下:如果F的基q= p^e^,其中p為素數,e ≥ 1,那么F的元素a是e元組(a1, . . . , ae),其中對于1 ≤ i≤ e,ai∈ [0 . . p),a′定義為a′= Σ1<=i<=e ai Pi-1
B.5 八位位組串/有限域元素轉換:OS2FEPF 和 FE2OSPF
八位位組串和顯式給定有限域F的元素之間的轉換函數OS2FEPF和 FE2OSPF定義如下:
00008——函數FE2OSPF(a),輸入是有限域F的元素,輸出是八位位組串I2OSP(a′, l),其中a′ = FE2IPF(a),l是|F|?1的八位位組個數,例如l = ?log256|F|?。如上述FE2OSPF(a) 的輸出總是長度為?log256|F|?的八位位組串;
00009——函數OS2FEPF(x) ,輸入八位位組串x,輸出是(唯一的)域元素a ∈ F。所以如果存在a,則有FE2OSPF1(a) = x。否則函數失敗。
注:當且僅當x的長度不等于?log256 |F|?,或者OS2IP(x) ≥ |F|,OS2FEPF(x)失敗;長度值表示為L=F。
B.6 橢圓曲線/八位位組串轉換:EC2OSPE和 OS2ECPE
B.6.1 壓縮橢圓曲線點
顯式給定有限域F(基為p)上的橢圓曲線E。
一個點*P *≠ O(不為無窮遠點)可以使用壓縮,非壓縮或者混合形式表示。
如果P *= (x, *y) ,那么(x, y)就是P的非壓縮形式。
如上描述的橢圓曲線上的點P *= (x, *y) 。點P的壓縮形式是(x, ?),其中? ∈ {0, 1}按照如下決定:
00010——如果p *≠ 2和y = 0F,那么?*= 0;
00011——如果p *≠ 2和y ≠ 0F,那么?= ((y′/p^ f^) mod *p) mod 2,其中y′ = FE2IPF(y),f是最大的非負整數如*p^f ^| *y′;
00012——如果p *= 2和x = 0F,那么?*= 0;
00013——如果p *= 2和x ≠ 0F,那么?* = ?z′/2^f^? mod 2,其中z *= *y/x,z′ = FE2IPF(z) ,f是最大的非負整數如2^f^/ FE2IP~F ~(1F) 。
P *= (x, *y)的混合形式是(x, ?, y) ,其中?如上描述。
B.6.2 點解壓縮算法
點的解壓縮方法很多,例如從(x, ?)計算y。主要方法描述如下:
00014——假設p *≠ 2,(x, *y) 的壓縮形式是(x, ?) 。點(x, y)滿足方程y^2 ^= f *(x),f (x)是參數為x的多項式。如果f (x) = 0F,那么對于y只有一種可能的選擇,即y = 0F。否則如果f (x) ≠ 0,那么對于y有兩種可能的選擇(區別僅僅是符號不同),由?決定正確的選擇。有一些比較有名的在有限域里計算平方根的算法,所以y*的兩個選擇很容易計算;
00015——假設p *= 2,(x, *y) 的壓縮形式是(x, ?) 。點(x, y)滿足方程y^2 ^+ xy *= *x^3^+ ax^2 ^+ b。如果x *= 0F,那么得出y^2 ^= *b,y能夠唯一確定并計算。否則如果x *≠ 0F,那么設置z = *y/x,則有z^2 ^+ z *= *g(x) ,其中g(x) = (x *+ *a *+ *bx^?^^2^) 。y通過值z和x能夠唯一確定并計算。計算z:對于固定的x值,如果z是方程z^2 ^+ z *= *g(x)的一個解,則另一個解是z *+ 1F。很容易地計算z的兩個候選值,由?決定z*的正確選擇。
B.6.3 逆運算
顯式給定有限域F上的橢圓曲線E。
橢圓曲線E上的點和八位位組串之間的轉換函數 EC2OSPE和 OS2ECPE定義如下:
a) 函數EC2OSPE(P, fmt) ,輸入是橢圓曲線E上的點P和格式符fmt(壓縮,非壓縮或混合)。輸出是八位位組串EP,計算如下:
1) 如果*P *= O,那么EP = Oct(0);
2) 如果P *= (x, *y) ≠ O,壓縮格式(x, ?) ,那么EP = H *|| *X *|| *Y,其中:
i) H是格式為Oct(4U *+ *C *·(2 + *?))的八位位組,其中:
I) 如果fmt是非壓縮或混合格式,那么U *= 1,否則U *= 0;
II) 如果fmt是壓縮或混合格式,那么C *= 1,否則C *= 0。
ii) X是八位位組串FE2OSPF(x) ;
iii) 如果fmt是非壓縮或混合格式,那么Y是八位位組串FE2OSPF(y) ,否則Y是空八位位組串;
b) 函數OS2ECPE(EP) ,輸入是八位位組串EP。如果在橢圓曲線E上存在點P及格式符fmt如EC2OSPE(P, fmt) = EP,那么函數輸出P(非壓縮),否則函數失敗。注意點P如果存在,則是唯一定義的,所以函數OS2ECPE(EP) 也是確定的。
注:如果格式符fmt是非壓縮的,那么?值不需要計算。
GB/T 15851.3—2018 信息技術 安全技術 帶消息恢復的數字簽名方案 第3部分:基于離散對數的機制
推薦文章: