椭圆加密算法--倍点计算

liuyang19890710 2014-09-16 05:39:44
最近在实现国密算法SM2,用的是Java语言。 在计算倍点。 P(X,Y) = K *G(A,B)
就是已知K 和 G点,求倍点P。按照SM2规范上的实现,结果总是不一致。求大神指导一下。。。。。。
...全文
1065 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang19890710 2014-09-18
  • 打赏
  • 举报
回复
引用 1 楼 xmt1139057136 的回复:
现在我们描述一个利用椭圆曲线进行加密通信的过程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私有密钥k,并生成公开密钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。 5、用户B计算点C1=M+rK;C2=rG。 6、用户B将C1、C2传给用户A。 7、用户A接到信息后,计算C1-kC2,结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M 再对点M进行解码就可以得到明文。 请问4中的编码方式是什么,具体给我一种,好用追加 这需要自己设计,如果明文空间为M,则需要构造一个映射,将M中的元素(一般为二进制序列)映射到椭圆曲线上的点。 一种可能的做法是:将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。
你好,非常感谢你耐心的解答。 我是参照Sm2的文档实现SM2算法的。在 计算倍点的时候,无法正确求取一个点的K倍点的值 很着急。 你能否加我扣扣给我点指导。不甚感激。QQ: 775499393
liuyang19890710 2014-09-18
  • 打赏
  • 举报
回复
你好,非常感谢你耐心的解答。 我是参照Sm2的文档实现SM2算法的。在 计算倍点的时候,无法正确求取一个点的K倍点的值 很着急。 你能否加我扣扣给我点指导。不甚感激。QQ: 775499393
业余草 2014-09-17
  • 打赏
  • 举报
回复
现在我们描述一个利用椭圆曲线进行加密通信的过程: 1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。 2、用户A选择一个私有密钥k,并生成公开密钥K=kG。 3、用户A将Ep(a,b)和点K,G传给用户B。 4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。 5、用户B计算点C1=M+rK;C2=rG。 6、用户B将C1、C2传给用户A。 7、用户A接到信息后,计算C1-kC2,结果就是点M。因为 C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M 再对点M进行解码就可以得到明文。 请问4中的编码方式是什么,具体给我一种,好用追加 这需要自己设计,如果明文空间为M,则需要构造一个映射,将M中的元素(一般为二进制序列)映射到椭圆曲线上的点。 一种可能的做法是:将M转化为十进制整数m,然后令椭圆曲线中点的横坐标为m,根据曲线方程计算出纵坐标,便得到了一个点。
国密算法 国密算法总结概念说明   国密算法是指我国定制的商用加密算法,用于金融行业。包括SM1、SM2、SM3、SM4。其中SM1是硬件实现的算法,我里不与讨论,而SM2、SM3、SM4等可以使用软件实现。 国际算法比较 国际加密算法:RSA、SHA/MD5、DES等常用算法,RSA是非对称算法(签名和验签),SHA/MD5为摘要算法(HASH值),DES为对称加密(数据加密)。 国密算法的SM2对应于RSA,SM2对应于SHA,SM3对应于DES。 非对称算法 RSA密钥目前建议使用2048 BIT(公钥明文256 byte私钥明文512 byte),生成的加密数据为密钥长度的整数倍,签名数据与密钥长度一致。SM2密钥长度为32字节(公钥明文64字节,私钥明文32字节),生成的加密数据结果为32*3+明文长度,签名数据与私钥长度一致64字节。 对称加密 DES加密的密钥必须是8/16/32的倍数对应于DES/3DES/3DES加密,输入数据长度必须是密钥长度的整数倍;而SM4的密钥长度是16字节,输入数据必须是16字节的倍数。 摘要算法 SM3计算结果为32字节的HASH值。 关键参数 网络安全之国密算法全文共2页,当前为第1页。SM2 椭圆曲线参数(规范推荐值)、userID(推荐值:1234567812345678)、私钥、公钥(可通过私钥生成) 网络安全之国密算法全文共2页,当前为第1页。 知识点 SM2密钥对的生成是基于一些算法参数,这些数据在规范内是有推荐值的。所以在使用SM2算法的前提是双方都使用的是相同的推荐参数,否则计算结果是不会对的。具体参数可查看规范。 SM3对称加密算法的密文数据,如果长度为明文长度+1(16字节的整数倍+1),则第一个字节是一个标识(0x04)。所以在处理SM3解密的时候要注意,有些工具或API在解密时可能需要加上标识符。 SM2加密结果数据的组成:1 BYTE(0x04) + 64 BYTE(2个大整数) + 密文(与明文长度相同) + 32 BYTE(密文的HASH值)。其中第一字节的标识数据要注意处理,其它工具或API是否要求。 SM2进行签名,对于相同的待签名数据,每次签名的结果都不同,不是固定的。因为签名过程会使用到随机数,签名过程会对明文+公钥+ID进行摘要。 SM4加密时要进行16字节的对齐。 网络安全之国密算法全文共2页,当前为第2页。在使用一些开源加密库时要注意:BYTE数组和大整数的转换 API生成的钥数据有可能出现33字节,而第1字节为0x00,这个字节表示符号(正数)。32字节密钥的本质是一个大整数(即大整数转换成字节数),而密钥只生成正整数,由于第1个字节的最高位为1时表示的是负数,所以在转换时就有了一个字节0x00表示为正数。同样的,在调用开源接口进行byte数据转换为大整数的时候,如果密钥明文是32 byte,但是第一个字节最高位为1时,必须要先添加一个0x00。 网络安全之国密算法全文共2页,当前为第2页。 网络安全之国密算法

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧