当前位置: 首页 > news >正文

做棋牌网站建设jsp网站制作详细教程

做棋牌网站建设,jsp网站制作详细教程,安装wordpress linux,什么网站可以找人做设计师一、知识准备 PBOC3.0规范就是《中国金融集成电路#xff08;IC#xff09;卡规范》3.0版本。SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法。本身是基于ECC椭圆曲线算法的#xff0c;所以要讲SM2, 先要弄懂ECC。 完全理解ECC算法需要一定的数学功底…一、知识准备 PBOC3.0规范就是《中国金融集成电路IC卡规范》3.0版本。SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法。本身是基于ECC椭圆曲线算法的所以要讲SM2, 先要弄懂ECC。   完全理解ECC算法需要一定的数学功底因为涉及到射影平面坐标系齐次方程求解, 曲线的运算规则等概念。   本篇的主旨还是希望能以简单通俗的语言讲清楚PBOC3.0认证过程中所用到的SM2的相关概念包括它的实现使用等。   1、椭圆曲线到底是什么样的   图1 图2 上面是两个不同椭圆曲线在坐标系中的几何表示, 不过这个坐标系不是二维坐标系而是射影坐标系。可以用空间思维想像一下(但是注意不是三维坐标系),打个比方你晚上站在一个路灯前面地上有你的影子你本身是在一个二维坐标系(把你想像成一个纸片)和你的影子一起构成一个射影坐标系。   曲线的每一个点, 用三个参量表示, (X,Y,Z)。我们知道在二维坐标系里的每个图形都遵循一个方程比如直接的二元一次方程是ykxb, 圆的方程是(xa)2(yb)2r2, 椭圆曲线在射影坐标系里也有自己的定义:   Y2Za1XYZa3YZ2X3a2X2Za4XZ2a6Z3   所有椭圆曲线上的点都满足上述方程a1,a2,a3,a4,a6是系数决定曲线的形状和位置。   二维坐标和射影坐标有一个对应关系即xX/Z, yY/Z, 这样就可以把上面的方程转成普通的二维坐标系方程: y2a1xya3y x3a2x2a4xa6   2、离散的椭圆曲线 上面的坐标系都是基于实数的椭圆曲线看起来都是平滑的如果我们限制曲线的点都必须是整数曲线就变成离散的了如图3所示: 图3   再进一步限制要求整数必须大于0, 小于某个大整数P, 这样就形成了一个有限域Fp.然后我们在这个有限域里定义一些点与点之间的加减乘除运算规则比如A点加B点得到C点(记做AB≡C (mod p))或者A点乘以n得到K点(记做A×n≡K (mod p))。至于具体规则细节可以不用关心只要知道有这样的操作即可。   选一条曲线比如 y2x3axb 把它定义在Fp上, 要求a,b满足 4a327b2≠0 (mod p)   我们把这样的曲线记为Ep(a,b)   加解密是基于这样的数学难题KkG其中 K,G为Ep(a,b)上的点k是整数小于G点(注意区分不是我们平常说的那个意思)的阶(不用关心什么是点的阶)。给定k和G计算K很容易但给定K和G求k就困难了。这样G就叫做基点k是私钥K是公钥。   最后总结。描述一条Fp上的椭圆曲线有六个参量  T(p,a,b,G,n,h)。  p 、a 、b 用来确定一条椭圆曲线  G为基点  n为点G的阶  h 是椭圆曲线上所有点的个数m与n相除的整数部分   知识准备阶段知道这么多就可以了。   二、SM2在PBOC认证中的使用   1、签名和验签的原理   前面提到根据系数的不同ECC曲线可以有很多SM2使用其中一种这就表明它的曲线方程,以及前面说到的六个参量都是固定的。根据国密局给出的规范定义如下 [cpp] view plain copy y2x3axb       pFFFFFFFE FFFFFFFFFFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFF   aFFFFFFFE FFFFFFFFFFFFFFFF FFFFFFFF FFFFFFFF 00000000 FFFFFFFF FFFFFFFC   b28E9FA9E 9D9F5E344D5A9E4B CF6509A7 F39789F5 15AB8F92 DDBCBD41 4D940E93   nFFFFFFFE FFFFFFFFFFFFFFFF FFFFFFFF 7203DF6B 21C6052B 53BBF409 39D54123   Gx32C4AE2C 1F198119 5F990446 6A39C994 8FE30BBF F2660BE1 715A4589 334C74C7   GyBC3736A2 F4F6779C 59BDCEE3 6B692153 D0A9877C C62A4740 02DF32E5 2139F0A0   这里容易引起一个误解会认为参数都固定了公私钥是不是只能有一对当然不是注意前面提到的KkG的模型K才是公钥所以公钥其实是曲线在离散坐标系中满足条件的一个曲线上的点。可以有很多个。另外, 从这几个参量可以获知PBOC 3.0的公钥长度都是256位。   基于这种离散椭圆曲线原理的SM2算法一般有三种用法签名验签加解密, 密钥交换。PBOC 3.0中的脱机数据认证只用到签名验签的功能。终端关心的是如何验签卡片则要考虑如何实现生成签名。   2、基于openssl实现sm2 这里给出一个基于openssl的sm2实现, 如果不了解openssl可以先搜索一下相关知识这里不讲解。openssl已经实现ECC算法接口也就是核心已经有了实现sm2其实并不难关键是理解它里面各种接口如何使用。下面就分析一个终端验签的sm2实现。另外需要说明这里给出的只是代码片段仅供理解用。   函数接口 [cpp] view plain copy int SM2_Verify(BYTE* Px,BYTE* Py, BYTE* DataIn,DWORD DataLen, BYTE* sigrs)   前两个参数是K的坐标值也就是公钥。Datain和datalen分别是明文数据和其长度最后一个参数是待验证的签名。   曲线的参数常量定义如下: [cpp] view plain copy    static const char *group_p FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF;   static const char *group_a FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC;   static const char *group_b 28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93;   static const char *group_Gx 32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7;   static const char *group_Gy BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0;   static const char *group_n  FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123;   static const char *ENTL_ID 008031323334353637383132333435363738;   #define SM2_KEY_LENGTH 32 //256位曲线      ENTL_ID是pboc规范中指定的用于SM3产生摘要的报文头数据。 [cpp] view plain copy strcpy(szBuff, ENTL_ID);   strcat(szBuff,group_a);   strcat(szBuff,group_b);   strcat(szBuff,group_Gx);   strcat(szBuff,group_Gy);   AscToBcd(szDataForDigest,(unsigned char *)szBuff, nLen);             ….       SM3(szDataForDigest,nLenSM2_KEY_LENGTH*2, digestZA);       memcpy(szDataForDigest,digestZA, ECC_LENGTH);   memcpy(szDataForDigestECC_LENGTH,DataIn, DataLen);       SM3(szDataForDigest,DataLenECC_LENGTH, digestH);   第一步对上述数据用sm3做摘要摘要的结果与数据拼接后再做摘要。 [cpp] view plain copy p  BN_new();   a  BN_new();   b  BN_new();   group  EC_GROUP_new(EC_GFp_mont_method());       BN_hex2bn(p, group_p))   BN_hex2bn(a, group_a))   BN_hex2bn(b, group_b))   这里是把定义的曲线常量转换成大数表式这样才能使用openssl中的接口。 Group是ECC中的曲线组它是ECC算法的核心为什么这么说呢 因为这个group里的所有字段就确定了曲线的所有信息 后面会看到这里只是用EC_GROUP_new生成一个空的group, 然后由p,a,b等参数来填充group, 再以这个group为基础去生成曲线上的点。 [cpp] view plain copy if (!EC_GROUP_set_curve_GFp(group, p, a, b,ctx))   {                      gotoerr_process;   }       P  EC_POINT_new(group);   Q  EC_POINT_new(group);   R  EC_POINT_new(group);   if (!P || !Q || !R)   {            gotoerr_process;   }   这一段就确定了group的所有信息并且根据group生成三个曲线上的点(点一定在曲线上这个很重要)。 [cpp] view plain copy span stylewhite-space:pre    /spanx  BN_new();            y BN_new();            z BN_new();            if(!x || !y || !z)            {                      gotoerr_process;            }                //Gx            if(!BN_hex2bn(x, group_Gx))            {                      gotoerr_process;            }                if(!EC_POINT_set_compressed_coordinates_GFp(group, P, x, 0, ctx))            {                      gotoerr_process;            }                       if(!BN_hex2bn(z, group_n))            {                      gotoerr_process;            }            if(!EC_GROUP_set_generator(group, P, z, BN_value_one()))            {                      gotoerr_process;            }                if(!EC_POINT_get_affine_coordinates_GFp(group, P, x, y, ctx))            {                      gotoerr_process;            }   这一段首先是设置n到group, n前面讲过是曲线的阶。另外就是由G点坐标x,y确定点P这里我其实也有点不太明白G点坐标y本来就是已知的为什么要再通过曲线变换表式生成y是不是想要对比前面的group信息是否正确只是为了校验 [cpp] view plain copy if ((eckey  EC_KEY_new())  NULL)            {                      gotoerr_process;            }            if(EC_KEY_set_group(eckey, group)  0)            {                      gotoerr_process;            }       EC_KEY_set_public_key(eckey, P);            if(!EC_KEY_check_key(eckey))            {                      gotoerr_process;            }                    if(SM2_do_verify(1, digestH, SM2_KEY_LENGTH, signature, sig_len, eckey) ! 1)            {                      gotoerr_process;            }   这段比较好理解生成公钥eckey,并由eckey最终验签。验签的执行函数sm2_do_verify有点复杂这里不做过多的解释(其实是我解释不清楚, 哇哈哈)在一个国外的网站上找到一个比较好的描述拿过来用用。   3、脱机数据认证使用sm2的具体流程 我假设看这篇文章的人对PBOC 2.0中基于RSA国际算法的脱机数据认证流程已经比较了解相关概念不再过多描述重点关注二者的差异性。   另外简单说一下sm3,因为下面会用到。sm3是一个类似hash的杂凑算法即给定一个输入(一般很长)产生一个固定长度的输出(sm3是32个字节hash是20个字节)。它有两个特点: 1 不可逆性即无法由输出推导出输入。 2 不同的输入产生不同的输出。   下面就拿终端SDA认证卡片来看看sm2如何在pboc中使用的。   首先发卡行公钥等数据(还包括公钥算法标识有效期等信息)被CA私钥签名(注意不是加密)生成发卡行公钥证书这个证书会个人化到ic卡中。这些数据如下图所示: 图4   签名其实就是对这个表里的数据做一系列运算最终生成一个64字节的数据分别由各32字节的r和s拼接而成r和s只是个符号而已没有特别意思。这64字节的签名拼接到图4后面就是发卡行公钥证书。   这里与国际算法的公钥证书就有明显的区别了。国际算法证书是密文的发卡行公钥用rsa加密。而国密的公钥证书完全是明文。用数据举例下面这些数据来自pboc3.0的卡片送检指南,就是检测时要求个人化到卡里的数据。 [plain] view plain copy 【发卡行公钥】 :   173A31DD681C6F8FE3BA6C354AD3924A4ADFD15EB0581BC1B37A1EB1C88DA29B47155F62FCF4CCCD201B134351A049D77E81F6A6C66E9CB32664F41348DA11F       【CA哈希值】(r||s) :   3499A2A0A7FED8F74F119B416FF728BA98EF0A32A36BCCB8D0110623D466425CA44C68F8E49121D9BFA9484CAEF9B476C5EB576D1A8DD6BC4A0986AF4134ABAF       【Tag_90 】(发卡行公钥证书) :   1262280001122000000204001140173A31DD681C6F8FE3BA6C354AD3924A4ADFD15EB0581BC1B37A1EB1C88DA29B47155F62FCF4CCCD201B134351A049D77E86A6C66E9CB32664F41348DA11F63499A2A0A7FED8F74F119B416FF728BA98EF0A32A36BCCB8D0110623D466425CA44C68F8E49121D9BFA9484CAEF9B476C5E56D1A8DD6BC4A0986AF4134ABAF   可以自己的解析一下看看是否和上面表格中的数据一致, 并且都是明文。   终端在读记录阶段获取发卡行公钥证书国际算法需要用rsa公钥解密整个证书然后验证hash,通过后取出发卡行公钥。而国密算法终端只要用sm2公钥验64字节的签名通过后直接取明文发卡行公钥所以国密的验签的动作其实就相当于国际里的rsa解密和hash对比两个动作。   接着终端进行静态数据签名的验证情况类似对于国密这些数据都是明文形式后面拼接64字节的sm2签名这64字节是用发卡行私钥对明文数据签名得到的。终端要做的就是拿刚刚获取的发卡行公钥对这64字节数据验证即可验证通过就表示SDA通过。   四、PBOC为什么要选择国密   首先从技术角度实现同样的计算复杂度ECC的计算量相对RSA较小所以效率高。RSA现在在不断的增加模长目前都用到了2048位。并不是说现在一定要用2048位才是安全的只是它的安全性更高破解难度更大这个要综合考虑位数高也意味着成本高。有些不差钱的大公司比如谷歌就已经未雨绸缪的把2048位用在了它们的gmail邮箱服务中。PBOC3.0 认证中目前只用到1984位其实也是相对安全的。   不过这个观点目前还存在争议。前段时间在清华大学听了一个关于密码算法的课清华有个教授认为sm2并不见得比rsa更高级只是sm2的原理比rsa难理解所以大部分人认为它会相对安全些。一旦椭圆曲线被大家研究透了sm2的光环也可能就此褪去。当然这个也是他个人的观点。   另外一个因素要从国家战略的角度考虑RSA之前一直被传与美国安全局合作在算法中加入后门这种事是宁可信其有的。国密算法咱起码是自己研发的东西,所有的过程细节都一清二楚, 不用担收后门的事情。 央行现在非常重视国产安全芯片的推进工作前些天央行的李晓枫还公开强调未来金融IC卡芯片要国产化国密算法是其中很关键的一步。未来国产芯片加国密算法才会有真正自主, 安全的国产金融IC卡产品。 转自http://blog.csdn.net/pony_maggie/article/details/39780825
http://www.zqtcl.cn/news/184955/

相关文章:

  • 百度网站推广电话眼镜网站怎么做竞价
  • 邢台建设银行官方网站为什么建设网站很多公司没有
  • 闵行做网站费用湖南正规网络营销哪家便宜
  • 找个公司做网站需要注意什么wordpress用户名长度
  • 推荐几个没封的正能量网站营销技巧和营销方法视频
  • html mip 网站桂林市临桂区
  • 做网站如何月入10万建行app怎么注册登录
  • 建设一个旅游网站毕业设计建设网站的功能定位是什么原因
  • wordpress网站导航模板杭州建设网站的公司
  • 如何做视频解析网站wordpress 关闭评论
  • 安福网站建设微信开发者工具怎么下载
  • 网罗设计网站威海网页设计制作公司
  • 网站用cmswordpress插件怎么做
  • 如何办好公司网站元器件网站搭建
  • 建设领域行政处罚查询网站wordpress数据库发文章
  • 怎么做网页的多开器宿迁seo优化
  • 别人帮做的网站怎么修改病句店铺引流的30种方法
  • 网站备案幕布怎么申请绍兴cms建站模板
  • 做网站熊掌号软件设计公司排名
  • 深圳 做网站学做西点的网站
  • 静态网站安全性百度服务平台
  • 网站vi设计公司网站建设app
  • 书店网站建设策划书总结每天看七个广告赚40元的app
  • 做网站的属于什么专业成都广告制作安装公司
  • 天津市网站建设公司网站制作费用
  • 网站制作公司 郑州wordpress图片中文不显示解决
  • 网站建设模式有哪些方面jquery做的装修网站
  • 佛山手机建网站企业网站公司单位有哪些
  • 给企业做网站的平台有没有专门做衣服搭配的网站
  • 青岛本地网站最近军事新闻大事