SM2椭圆曲线公钥密码算法(ECC)于2010年12月首次公开发布,2012年成为中国商用密码标准,2016年成为中国国家密码标准,国家公钥密码算法标准。SM2算法主要内容包括3部分:数字签名算法;密钥交换协议和公钥加密算法。在实际使用中,国密局推荐使用素数域256位椭圆曲线,其曲线方程为y^2= x^3+ax+b。a;b ∈ Fp,且(4a^3 +27b^2) modp ̸= 0。python
目前支持SM2算法的产品已达1000余款,普遍应用于电子政务、移动办公、电子商务、移动支付、电子证书等基础设施、云服务等领域。以《中华人民共和国电子签名法》为依据,各种应用数字签名/验签的旺盛需求,催生出一批支持SM2算法高性能产品,如中国科学院DCS中心研制的高性能金融数据密码机SM2签名速率超过33万次/秒;清华大学微电子所研制的单颗算法芯片SM2签名速率达81763.03次/秒。在公钥基础设施(PKI)领域,以基于SM2算法的数字证书应用最具备表明性,尤为是自2011年国家密码管理局发布公钥算法升级工做通知以来,全国总计有45家第三方电子认证服务机构(CA)完成了支持SM2算法的系统新建或升级改造,工行、农行、建行、交行、税务、海关、交通、教育等12家系统性电子认证服务系统也实现了对SM2算法的支持,累计证书发行量近亿张,支持SM2算法的智能密码钥匙、IC卡的芯片出货量达5亿颗,有力地促进了SM2算法在交通、能源、金融、税务、公安、卫生、社保、教育等多个领域的应用。SM2算法也已被纳人可信计算组织(TCG)发布的可信平台模块库规范(TPM2.0),由国民技术研制的支持TPM2.0的Z32H320TC系列芯片集成了SM2算法,被应用在微软于中国发售的Microsoft Surface Pro 3 pad中.算法
数字签名算法由一个签名者对数据产生数字签名,并由一个验证者验证签名的可靠性.每一个签名者有一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名.
SM2数字签名算法中,做为签名者的用户A的密钥对包括其私钥dA,和公钥pA =[dA]G=(xA,yA),用户A具备位长为entlenA的可辨别标识IDA,记ENTLA,是由整数entlenA转换而成的2B数据,签名者和验证者都须要用密码杂凑算法求得用户A的杂凑值zA=H256 (ENTLA || IDA || a || b || xG || yG || xA || yA). SM2数字签名算法规定H256为SM3密码杂凑算法.安全
密钥交换协议是2个用户A和B经过交互的信息传递,用各自的私钥和对方的公钥来商定一个只有他们知道的秘密密钥.这个共享的秘密密钥一般用在某个对称密码算法中.
SM2密钥交换协议中,用户A的密钥对包括其私钥dA和公钥pA=[dA]G=(xA,yA),用户B的密钥对包括其私钥dB和公钥pB=[dB]G=(xB,yB).用户A具备位长为entlenA的可辨别标识IDA,记ENTLA是由整数entLenA转换而成的2B数据;用户B具备位长为entlenB的可辨别标识IDB,记ENTLB是由整数entlenB转换而成的2B数据.A,B双方都须要用密码杂凑算法求得用户A的杂凑值ZA = H256 ( ENTLA || IDA || a || b || xG || yG || xA || yA)和用户B的杂凑值ZB = H256 ( ENTLB || IDB || a || b || xG || yG || xB || yB).网络
公钥加密算法规定发送者用接收者的公钥将消息加密成密文,接收者用自已的私钥对收到的密文进行解密还原成原始消息.
SM2公钥加密算法中,用户B的密钥对包括其私钥dB和公钥PB=[dB]G.函数
SM3密码杂凑算法采用Merkle-Damgard结构,消息分组长度为512 b,摘要长度256 b.压缩函数状态256b,共64步操做。
SM3算法做为标准杂凑算法使用很是普遍。目前支持SM3算法的产品包括安全芯片、终端、设备和应用系统,采用SM3算法的产品和系统运行安全稳定。如在智能电网领域,截至2016年10月,采用SM3算法的智能电表已经安装近6亿用户,均能安全稳定运行。在金融系统,目前大约有7亿多银行磁条卡更新为密码芯片卡,动态令牌累计发行7726万支,这些卡片及令牌均使用了SM3算法。SM3算法也支持可信计算组织(TCG)发布的可信平台模块库规范(TPM2.0)。该算法业已成为我国电子签名类密码系统、计算机安全登陆系统、计算机安全通讯系统、数字证书、网络安全基础设施、安全云计算平台与大数据等领域信息安全的基础技术。性能
SM3密码杂凑算法压缩函数总体结构与SHA-256类似,可是增长了多种新的设计技术,包括增长16步全异或操做、消息双字介人、增长快速雪崩效应的尸置换等.可以有效地避免高几率的局部碰撞,有效地抵抗强碰撞性的差分分析、弱碰撞性的线性分析和比特追踪法等密码分析。
SM3密码杂凑算法合理使用字加运算,在不显著增长硬件开销的状况下,采用P置换,加速了算法的雪崩效应,提升了运算效率。同时,SM3密码杂凑算法采用了适合32 b微处理器和8b智能卡实现的基本运算,具备跨平台实现的高效性和普遍的适用性。测试
SM3密码杂凑算法的设计主要遵循如下原则:大数据
压缩函数的设计具备结构清晰、雪崩效应强等特色,采用了如下设计技术:云计算
消息扩展算法将512b的消息分组扩展成2176b的消息分组。经过线性反馈移位寄存器来实现消息扩展,在较少的运算量下达到较好的扩展效果.消息扩展算法在SM3密码杂凑算法中做用主要是增强消息比特之间的相关性,减少经过消息扩展弱点对杂凑算法的攻击可能性。消息扩展算法有如下要求:加密
部分代码:
SMS4分组加密算法是中国无线标准中使用的分组加密算法,在2012年已经被国家商用密码管理局肯定为国家密码行业标准,标准编号GM/T 0002-2012而且更名为SM4算法,是国内官方公布的第一个加密算法。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
1.读入数据
2.计算轮密钥中间变量
3.计算轮密钥
4.SMS4算法第i+1轮加密
5.SMS4算法最终加密输出
SMS4算法做为我国专业机构设计的商用密码算法,通过充分分析和测试,能够抵抗差分攻击、线性攻击等。根据相关分析,SMS4算法的S盒设计得至关好。在设计原理上,SMS4比AES的S盒设计多了一个仿射变换,具备很高的灵活性,能够随时被替换以应对突发性安全威胁。SMS4的S盒在非线性度、自相关性、差分均匀性、代数免疫性等主要密码学指标方面都达到了至关高的水平。
执行SM4算法,测试结果保存在log_file_0.txt下: