密钥派生函数 KDF(Z,klen) 输入:比特串 Z ,整数 klen (表示要获得的密钥数据的比特长度,要求该值小于 (2^{32}-1)v ) 输出:长度为 klen 的密钥数据比特串 K 初始化一个32比特构成的计数器 ct=0x00000001; 对i 从1 到 ⎡klen/v⎤ 执行: 计算H_{a_i}=H_v(Z||ct); ct++; 若klen/v 是...
将C1转化为比特串,需要考虑CPU大小端的问题,通常网络库有现成的函数。 在A3步骤中,刚开始看文档没明白 h 值是什么,后来才理解到这就是曲线参数的 cofactor,而且这个步骤主要是验证公钥PB的有效性,略过也没问题。 在A5步骤中,有个KDF函数需要实现。KDF函数的流程如下,其中的Hv函数请使用SM3: A7步骤的Hash也采用...
M为比特串获取随机数 k (x1, y1) = [k]G S=[h]P //h为余因子C1=(x2,y2)= [k]P t=KDF(x2||y2,klen);//klen为M的长度。KDF是sm2的密钥派生函数c2 = M+t C3 = Hash(x2||M||y2)C= C1||C2||C3解密C为加密后的结果,klen为密文中C2的长度C1 = C里面获取 ,验证C1是否满足椭圆...
4.计算椭圆曲线点[k]PB=(x2,y2),按本文本第1部分4.2.5和4.2.4给出的细节,将坐标x2、y2 的 数据类型转换为比特串 5.计算t=KDF(x2 ∥y2, klen),若t为全0比特串,则返回A1 6.计算C2 = M ⊕t 7.计算C3 = Hash(x2 ∥ M ∥ y2) 8.输出密文C = C1 ∥ C2 ∥ C3 加密算法流程: ②:解...
System.out.println(Util.getHexString(result,true));//将共享密钥从字节数组转换为16进制字符串,输出共享密钥}publicvoidKDF(byte[] key,byte[] Z1,byte[] Z2){SM3Digestkdf=newSM3Digest(); kdf.update(ux,0,ux.length); kdf.update(uy,0,uy.length); ...
{ } int kdf(unsigned char *zl, unsigned char *zr, int klen, unsigned char *kbuf) { } int sm2_encrypt(unsigned char *msg,int msglen, unsigned char *wx,int wxlen, unsigned char *wy,int wylen, unsigned char *outmsg) { } int sm2_decrypt(unsigned char *msg,int msglen, unsigned ...
KDF()33.CalculateC2(C2,messagePlain,t,messageSizeInBit/8);//C2 = M^t34.SM3((uint8_t*)C3,64+messageSizeInBit/8,(uint8_t*)C3);//C3 = SM3(x2||M||y2)35.36.memcpy(C,C1,65);37.memcpy(C+65,C2,messageSizeInBit/8);38.memcpy(C+65+messageSizeInBit/8,C3,32);//C = C1 ...
海泰方圆提出一种基于并行计算方法执行SM2算法的密钥派生算法KDF的方法,不仅实现密钥派生算法KDF的并行快速处理,还能进一步提升SM2加密和解密功能的执行效率。 在探究SM2加解密算法快速实现的过程中,海泰方圆公司关注到了算法关键步骤对KDF函数的使用。该函数的执行涉及到对恒定长度为512比特的SM2点坐标与32比特计数器的杂凑...
int kdf(unsigned char *zl, unsigned char *zr, int klen, unsigned char *kbuf) { } int sm2_encrypt(unsigned char *msg,int msglen, unsigned char *wx,int wxlen, unsigned char *wy,int wylen, unsigned char *outmsg) { } int sm2_decrypt(unsigned char *msg,int msglen, unsigned char *...
t ← sm2_kdf(𝑥2 ||𝑦2 , mlen, hash𝑣 ) if 𝑡为全0比特串 then 回到函数开头,重新选取𝑘 𝐶2 ← plaintext ⊕ 𝑡 𝐶3 ← hash𝑣 (𝑥2 ||plaintext||𝑦2 ) return 𝐶1 𝐶3 𝐶2 密钥派生算法 密钥派生算法sm2_kdf需要借助摘要长度为𝑣字节的哈希函数hash𝑣 ,生成指...