国产密码算法及应用
国密算法简介

版本人员时间升级内容❝课程目的◦了解国密算法的算法原理◦了解SM2、SM3、SM4的算法原理◦了解国密卡片相关API❝目标人员◦移动金融初级开发人员❝前置课程◦RSA密钥体系◦DES密钥体系❝基本知识❝对称加密算法SM2❝非对称加密算法SM4❝摘要算法SM3定义国密即国家密码局认定的国产密码算法,即商用密码,主要完成加密、解密、签名、验签、摘要等操作。
常用国密算法种类算法类型密钥长度输入数据要求输出数据特征SM2非对称加密算法公钥64字节,私钥32字节。
长度小于(2^32-1)*32=137,438,953,440字节(大约1374亿多)。
输出长度是明文长度+96,有随机数参数,每次密文不同。
SM3摘要算法--无要求。
固定长度,32字节。
SM4对称加密算法16字节分组长度16字节,需要填充到16字节整数倍。
有CBC和ECB两种模式,CBC需要设定初始值。
长度为16字节整数倍。
国密算法还有SM1、SM7、SSF33、祖冲之密码对称加密算法,SM9非对称加密算法。
国密算法与其他算法比较非对称加密算法SM2与RSA比较国密算法与其他算法比较SM2与RSA算法的一些统计数据RSA密钥强度(长度)SM2密钥强度(长度)破解时间(年)521比特106比特104(已破解)768比特132比特108(已破解)1024比特160比特10112048比特210比特1020国密算法与其他算法比较SM2与RSA算法的一些统计数据算法签名速度验签速度1024RSA2792次/秒51224次/秒2048RSA455次/秒15122次/秒256SM24095次/秒871次/秒国密算法与其他算法比较SM4与DES较从算法上看,国产SM4算法在计算过程中增加非线性变换,理论上能大大提高其算法的安全性,并且由专业机构进行了密码分析,民间也对21轮SM4进行了差分密码分析,结论均为安全性较高。
国密卡实现API类层次图class ng.Object◦class com.guomi.GMCipher◦class com.guomi.GMKeyBuilder◦class com.guomi.GMKeyPair◦class com.guomi.GMMessageDigest ◦class com.guomi.GMSignature◦class com.guomi.GMCipherExtend◦class com.guomi.GMSM2KeyExchange国密卡实现的API接口interface javacard.security.Key◦interface javacard.security.SecretKeyinterface com.guomi.SM1Keyinterface com.guomi.SM4Keyinterface com.guomi.SM7Keyinterface com.guomi.SSF33Key◦interface javacard.security.PrivateKey interface com.guomi.SM2PrivateKey ◦interface javacard.security.PublicKeyinterface com.guomi.SM2PublicKey国密卡实现的API接口interface com.unionpay.guomi.SM2Key ◦interface com.guomi.SM2PrivateKey◦interface com.guomi.SM2PublicKey目录❝算法原理❝加密❝解密❝签名❝验签算法原理❝国密SM2规定椭圆曲线参数(固定值,256比特)◦p :FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF◦a:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC◦b:28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93◦n:FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123◦gx:32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7◦gy:BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0❝各个参数意义如下椭圆曲线方程:y2=x3+ax+b,把它定义在Fp上, 要求a,b满足:4a3+27b2≠0(mod p)那么,p 、a 、b 用来确定一条椭圆曲线(确切来说应该是有限域Fp),G(gx,gy)为基点,n为点G 的阶,另外,还有一个非必要参数h,是椭圆曲线上所有点的个数m与n相除的整数部分;加密SM2公私玥结构、◦SM2公私玥关系P=d*G 或者(x ,y )=d*(gx ,gy ),即公钥P 是基点G 的d 倍点。
国密是什么

国密是什么
国密即国家密码局认定的国产密码算法,即商用密码。
国密主要有SM1,SM2,SM3,SM4。
密钥长度和分组长度均为128位。
1、SM1 为对称加密。
其加密强度与AES(高级加密标准,Advanced Encryption Standard)相当。
该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
2、SM2为非对称加密,基于ECC。
该算法已公开。
由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。
ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
3、SM3为消息摘要。
可以用MD5作为对比理解。
该算法已公开。
校验结果为256位。
4、SM4为无线局域网标准的分组数据算法。
对称加密,密钥长度和分组长度均为128位。
由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
国密应用
商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加
密保护。
商用密码可用于企业门禁管理、企业内部的各类敏感信息的传输加密、存储加密,防止非法第三方获取信息内容;也可用于各种安全认证、网上银行、数字签名等。
例如:在门禁应用中,采用SM1算法进行身份鉴别和数据加密通讯,实现卡片合法性的验证,保证身份识别的真实性。
安全是关系国家、城市信息、行业用户、百姓利益的关键问题。
国密芯片卡

国密芯片卡国密芯片卡,是指采用国产SM2和SM4算法的芯片卡。
它是一种新型的密码芯片卡,具有较高的安全性和可靠性,广泛应用于政府、金融、电信等领域。
国密芯片卡采用了SM2算法,是中国自主研发的一种椭圆曲线公钥密码算法,是国家密码管理局指定的我国密码标准。
相较于传统的RSA算法,SM2算法具有更高的安全性和效率。
它利用了椭圆曲线上的离散对数问题,在保证安全性的同时,提高了加密和解密速度。
国密芯片卡还采用了SM4算法,是一种分组密码算法,也是国家密码管理局指定的我国密码标准。
相较于传统的AES算法,SM4算法具有更高的安全性和效率。
它以32位的密钥为基础,通过多轮迭代和S盒变换实现数据的加密和解密。
国密芯片卡除了采用了先进的密码算法外,还具有其他一些重要的特性。
首先,它具有硬件加密功能,利用专门的加密硬件芯片来进行加密运算,实现高速、安全的数据加密和解密。
其次,它具有物理隔离功能,将关键的加密密钥和数据存储在芯片内部,防止被非法获取和篡改。
再次,它具有多重认证功能,可以在芯片卡上存储多种认证方式,如指纹、密码等,增强了系统的安全性。
国密芯片卡在应用领域上具有广泛的应用前景。
首先,在政府领域,国密芯片卡可以用于身份证、护照等身份证明文件的加密存储和认证功能,提高了身份信息的安全性。
其次,在金融领域,国密芯片卡可以用于银行卡、电子钱包等支付工具的加密和认证功能,保护了用户的资金安全。
再次,在电信领域,国密芯片卡可以用于SIM卡的加密认证,防止SIM卡被复制和篡改。
总之,国密芯片卡是一种具有较高安全性和可靠性的密码芯片卡,广泛应用于政府、金融、电信等领域。
它采用了国产的SM2和SM4算法,在保证安全性的同时,提高了加密和解密速度。
国密芯片卡具有硬件加密、物理隔离和多重认证等功能,具有广阔的应用前景。
SpringBoot中_JAVA利用国密算法_实现内容的加密_解密

首先来看一下什么是国密算法:国密即国家密码局认定的国产密码算法,即商用密码。
国密主要有SM1,SM2,SM3,SM4。
密钥长度和分组长度均为128位。
1、SM1 为对称加密。
其加密强度与AES(高级加密标准,Advanced Encryption Standard)相当。
该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
2、SM2为非对称加密,基于ECC。
该算法已公开。
由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。
ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
3、SM3为消息摘要。
可以用MD5作为对比理解。
该算法已公开。
校验结果为256位。
4、SM4为无线局域网标准的分组数据算法。
对称加密,密钥长度和分组长度均为128位。
由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
在很多地方还是会用到的,这里说一下这个:SM21.在pom.xml中引入依赖jar包:<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.58</version></dependency>2.然后来写一个工具类,用来生成国密的,公钥和私钥这个密码对.import org.bouncycastle.jce.provider.BouncyCastleProvider;import java.security.*;import java.security.spec.ECGenParameterSpec;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;/*** @author hulala* @Description 国密公私钥对工具类public class KeyUtils {/*** 生成国密公私钥对** @return* @throws Exception*/public static String[] generateSmKey() throws Exception {KeyPairGenerator keyPairGenerator = null;SecureRandom secureRandom = new SecureRandom();ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");keyPairGenerator = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());keyPairGenerator.initialize(sm2Spec);keyPairGenerator.initialize(sm2Spec, secureRandom);KeyPair keyPair = keyPairGenerator.generateKeyPair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();//String[0] 公钥//String[1] 私钥String[] result = {new String(Base64.getEncoder().encode(publicKey.getEncoded())), new String(Base64.getEncoder().encode(privateKey.getEncoded())) };return result;}/*** 将Base64转码的公钥串,转化为公钥对象** @param publicKey* @return*/public static PublicKey createPublicKey(String publicKey) {PublicKey publickey = null;try {X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());publickey = keyFactory.generatePublic(publicKeySpec);} catch (Exception e) {e.printStackTrace();}return publickey;}/*** 将Base64转码的私钥串,转化为私钥对象** @param privateKey* @return*/public static PrivateKey createPrivateKey(String privateKey) {PrivateKey publickey = null;try {PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());publickey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);} catch (Exception e) {e.printStackTrace();}return publickey;}}3.根据公钥和私钥工具类,生成的密钥对,对数据,进行加密和解密操作import org.bouncycastle.asn1.gm.GMObjectIdentifiers;import org.bouncycastle.crypto.InvalidCipherTextException;import org.bouncycastle.crypto.engines.SM2Engine;import org.bouncycastle.crypto.params.ECDomainParameters;import org.bouncycastle.crypto.params.ECPrivateKeyParameters;import org.bouncycastle.crypto.params.ECPublicKeyParameters;import org.bouncycastle.crypto.params.ParametersWithRandom;import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.jce.spec.ECParameterSpec;import java.security.*;/*** @author hulala* @Description SM2实现工具类*/public class Sm2Util {static {Security.addProvider(new BouncyCastleProvider());}/*** 根据publicKey对原始数据data,使用SM2加密** @param data* @param publicKey* @return*/public static byte[] encrypt(byte[] data, PublicKey publicKey) {ECPublicKeyParameters localECPublicKeyParameters = null;if (publicKey instanceof BCECPublicKey) {BCECPublicKey localECPublicKey = (BCECPublicKey) publicKey;ECParameterSpec localECParameterSpec = localECPublicKey.getParameters();ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(),localECParameterSpec.getG(), localECParameterSpec.getN());localECPublicKeyParameters = new ECPublicKeyParameters(localECPublicKey.getQ(), localECDomainParameters);}SM2Engine localSM2Engine = new SM2Engine();localSM2Engine.init(true, new ParametersWithRandom(localECPublicKeyParameters, new SecureRandom()));byte[] arrayOfByte2;try {arrayOfByte2 = localSM2Engine.processBlock(data, 0, data.length);return arrayOfByte2;} catch (InvalidCipherTextException e) {e.printStackTrace();return null;}}/*** 根据privateKey对加密数据encodedata,使用SM2解密** @param encodedata* @param privateKey* @return*/public static byte[] decrypt(byte[] encodedata, PrivateKey privateKey) {SM2Engine localSM2Engine = new SM2Engine();BCECPrivateKey sm2PriK = (BCECPrivateKey) privateKey;ECParameterSpec localECParameterSpec = sm2PriK.getParameters();ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(),localECParameterSpec.getG(), localECParameterSpec.getN());ECPrivateKeyParameters localECPrivateKeyParameters = new ECPrivateKeyParameters(sm2PriK.getD(),localECDomainParameters);localSM2Engine.init(false, localECPrivateKeyParameters);try {byte[] arrayOfByte3 = localSM2Engine.processBlock(encodedata, 0, encodedata.length);return arrayOfByte3;} catch (InvalidCipherTextException e) {e.printStackTrace();return null;}}/*** 私钥签名** @param data* @param privateKey* @return* @throws Exception*/public static byte[] signByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception { Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);sig.initSign(privateKey);sig.update(data);byte[] ret = sig.sign();return ret;}/*** 公钥验签** @param data* @param publicKey* @param signature* @return* @throws Exception*/public static boolean verifyByPublicKey(byte[] data, PublicKey publicKey, byte[] signature) throws Exception {Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);sig.initVerify(publicKey);sig.update(data);boolean ret = sig.verify(signature);return ret;}}4.来测试一下,对数据进行加密解密import org.junit.Test;import java.util.Base64;/*** @author hulala* @Description Sm2Util 的测试类*/public class Sm2UtilTest {private String testStr = "wangjing";java.security.PublicKey publicKey = null;java.security.PrivateKey privateKey = null;@Testpublic void test() throws Exception {//生成公私钥对String[] keys = KeyUtils.generateSmKey();System.out.println("原始字符串:" + testStr);System.out.println("公钥:" + keys[0]);publicKey = KeyUtils.createPublicKey(keys[0]);System.out.println("私钥:" + keys[1]);privateKey = KeyUtils.createPrivateKey(keys[1]);System.out.println("");byte[] encrypt = Sm2Util.encrypt(testStr.getBytes(), publicKey);String encryptBase64Str = Base64.getEncoder().encodeToString(encrypt);System.out.println("加密数据:" + encryptBase64Str);byte[] decode = Base64.getDecoder().decode(encryptBase64Str);byte[] decrypt = Sm2Util.decrypt(decode, privateKey);System.out.println("解密数据:" + new String(decrypt));byte[] sign = Sm2Util.signByPrivateKey(testStr.getBytes(), privateKey);System.out.println("数据签名:" + Base64.getEncoder().encodeToString(sign));boolean b = Sm2Util.verifyByPublicKey(testStr.getBytes(), publicKey, sign);System.out.println("数据验签:" + b);}}5.这样就实现了利用国密,SM2进行加密解密了.。
国产密码改造方案

国产密码改造方案单位办公系统国产密码改造方案1.国产密码算法背景随着国家信息化建设的不断推进,信息安全问题越来越受到重视。
为了加强信息安全保障,国家提出了推广使用国产密码算法的目标。
在此背景下,本单位决定对办公系统进行国产密码改造。
2.网络及业务现状分析在进行密码改造前,我们对办公系统的网络及业务进行了分析。
根据分析结果,我们发现系统存在一些安全隐患,需要加强保障。
同时,系统的业务量也在不断增加,需要更高效的密码算法来支持。
3.单位密码应用现状分析3.1 单位密码应用现状我们对本单位的密码应用现状进行了详细调查,发现目前存在一些问题。
例如,密码强度不够,易被破解;密码管理不规范,存在泄露风险等。
3.2 面临的问题在密码改造过程中,我们还面临着一些问题。
例如,如何保证密码算法的安全性和可靠性;如何进行系统的平滑升级等。
4.建设原则为了确保密码改造的顺利进行,我们制定了一系列建设原则。
例如,保证密码算法的安全性和可靠性;注重用户体验,确保密码使用的便利性等。
5.建设目标我们的建设目标是,通过密码改造,提升系统的信息安全保障能力,提高密码算法的效率和安全性,为单位的业务发展提供更好的支持。
6.设计依据在制定国产密码改造方案时,我们遵循了一系列设计依据。
例如,XXX发布的密码算法标准,以及国内外密码算法的研究成果等。
7.国密改造方案7.1 技术路线选择在国密改造方案中,我们选择了国产SM2、SM3、SM4算法作为密码算法。
同时,我们采用了一系列安全技术手段,如密钥管理、加密传输等,来保障密码算法的安全性和可靠性。
7.2 总体架构在本章节中,我们将会介绍整个国产密码改造项目的总体架构。
该架构包括了可信密码认证机制、数据存储保护机制、数据传输保护机制以及运行维护保护机制等多个方面。
7.3 改造方案为了保障信息安全,我们需要对原有的密码系统进行改造。
本节将会介绍我们的改造方案,包括可信密码认证机制、数据存储保护机制、数据传输保护机制以及运行维护保护机制等多个方面。
基于国产公钥密码算法的门限签名及解密方案

第38卷第6期 计算机应用与软件Vol 38No.62021年6月 ComputerApplicationsandSoftwareJun.2021基于国产公钥密码算法的门限签名及解密方案廖会敏 王 栋 玄佳兴 杨 珂 李丽丽(国网电子商务有限公司(国网雄安金融科技集团有限公司) 北京100053)(国家电网有限公司电力金融与电子商务实验室 北京100053)收稿日期:2019-08-30。
国家电网公司总部科技项目(5700 201972227A 0 0 00);国家重点研发计划项目(2018YFB0805005)。
廖会敏,高工,主研领域:密码学,信息安全,电力信息化。
王栋,高工。
玄佳兴,硕士生。
杨珂,博士。
李丽丽,高工。
摘 要 公钥密码体系中用户的私钥保护问题至关重要,在智能终端安全存储和使用私钥成为当前面临的问题。
在门限密码学的基础上,以密码机为辅助设备,提出基于国产公钥SM2/SM9算法的门限签名和门限解密方案。
将私钥分割成两份,一份存储在客户端,一份存储在服务端密码机。
当需要使用私钥进行签名或解密运算时,由客户端和服务端密码机分别使用自己的私钥分量进行密码运算,并通过一定的交互过程后得到最终的签名或解密结果。
由于密码机的特性,攻击者获得完整私钥的可能性趋近于零,对于密码机无法存储海量私钥分量的问题亦给出解决方案。
和以往的门限方案相比,该方案私钥的安全系数更高,更贴近实际的应用场景。
关键词 SM2算法 SM9算法 门限签名 门限解密 智能终端中图分类号 TP393 文献标志码 A DOI:10.3969/j.issn.1000 386x.2021.06.050THRESHOLDSIGNATUREANDDECRYPTIONSCHEMEBASEDONCHINESEPUBLICKEYCRYPTOGRAPHYLiaoHuimin WangDong XuanJiaxing YangKe LiLili(StateGridElectronicCommerceCo.,Ltd./StateGridXiong’anFinancialTechnologyGroupCo.,Ltd.,Beijing100053,China)(PowerFinanceandE commerceLaboratory,StateGridCorporationofChina,Beijing100053,China)Abstract Inthepublickeycryptosystem,theuser sprivatekeyprotectionproblemisveryimportant.Howtosecurelystoreanduseprivatekeysinintelligentterminalshasbecomeacurrentproblem.Onthebasisofthresholdcryptography,aciphermachineisusedasanauxiliarydevice,andathresholdsignatureandthresholddecryptionschemebasedontheChinesepublickeySM2/SM9algorithmisproposed.Theprivatekeywasdividedintotwoparts:onewasstoredintheclient,andtheotherwasstoredintheserver sciphermachine.Whentheprivatekeywasusedforsignatureordecryptionoperation,theclientandtheserver sciphermachinerespectivelyusedtheirownprivatekeycomponentsforcryptographicoperations,andgotthefinalsignatureordecryptionresultafteracertaininteractionprocess.Duetothecharacteristicsoftheciphermachine,thepossibilitythattheattackerobtainsthecompleteprivatekeyapproacheszero,andthesolutionisalsosolvedfortheproblemthattheciphermachinecannotstorethemassiveprivatekeycomponent.Comparedwiththepreviousthresholdscheme,thesecuritykeyoftheschemehasahighersecurityfactorandisclosertotheactualapplicationscenario.Keywords SM2algorithm SM9algorithm Thresholdsignature Thresholddecryption Intelligentterminal0 引 言公钥密码算法也称为非对称密码算法,其密钥对由公钥和私钥组成。
数据存储及码流数据传输中的国密算法安全应用

数据存储及码流数据传输中的国密算法安全应用随着云计算和大数据技术的发展,数据的存储和传输已经成为了日常工作中不可避免的任务。
然而,如何保证数据的安全性以及隐私性就成为了一个非常重要的话题。
在数据存储和传输过程中,使用合适的加密算法可以起到保护数据安全的作用,其中国密算法被广泛应用。
国密算法是中国专门为保护国家安全信息而制定的加密算法标准,它包括了对称加密算法、非对称加密算法、哈希算法等,在数据存储和传输过程中可以起到很好的保护作用。
在数据存储中,国密算法可以使用在数据库加密、文件加密、磁盘加密等方面。
通过对数据进行加密,可以避免数据被非法获取、篡改,同时也能保护数据的隐私性。
在数据库加密方面,国密算法可以实现整个数据库的加密,也可以对特定的字段进行加密。
这样可以保证在数据备份和恢复过程中,即使数据被盗取,也能够保证数据的隐私性。
在文件加密方面,可以通过对文件进行加密来保证文件的安全,只有授权的用户才能够访问文件。
在磁盘加密方面,可以对磁盘进行加密,保护磁盘中的数据,以免被盗取或篡改。
在数据传输方面,国密算法可以使用在网络传输、流媒体传输、实时视频传输等方面。
网络传输是数据存储和传输中最常用的方式之一,国密算法可以通过在数据传输时对数据进行加密,从而保证数据传输的安全和隐私性。
在流媒体传输和实时视频传输方面,数据的实时性要求非常高,国密算法可以通过优化算法效率和提高加密速度来保证数据的实时传输和安全。
同时可以通过在传输协议中加入安全认证机制和数据完整性保护机制等方法,保证数据传输过程中不被篡改或被非法访问。
总的来说,国密算法在数据存储和传输方面具有非常重要的应用,可以保证数据的安全性和隐私性,避免数据泄露和被非法访问。
但是需要注意的是,虽然国密算法已经得到了广泛的应用,但是仍然存在着安全漏洞和攻击的可能性,因此使用国密算法时需要结合实际情况进行安全评估和加强安全措施,以保证数据的真正安全。
国产密码应用在项目建设系统中的作用研究

国产密码应用在项目建设系统中的作用研究【摘要】国密即国家密码局认定的国产密码算法。
在党政、军队、政府及企业相关领域,使用密码算法,实现数据信息安全的自主可控能力。
密码产品的普及是顺应信息技术变革的必然结果,保障系统安全成为信息产品和信息服务的基本需求,密码技术作为不可或缺的重要手段,密码应用将不断深入和拓展至项目建设中,实现其价值和意义。
【关键词】国产密码、商用密码应用、密码法、合规性、正确性及有效性。
1 引言随着云计算、移动互联网、大数据、物联网及人工智能等信息技术的发展,以密码算法、数据加解密、认证鉴别、密码管理、密码防伪等为核心功能的密码产品,实现了从“不好用、很少用”到“方便用、普遍用”的技术突破,迎来爆发式增长的新高潮。
2 现状及问题分析2.1 现状分析随着《中华人民共和国网络安全法》、《中华人民共和国密码法》、《信息安全技术网络安全等级保护基本要求》等法律法规的出台。
网络安全、密码应用受到社会各界的广泛关注。
由于各行业信息化发展程度不同,一些重要领域的网络和信息系统仍存在密码应用不规范、保障体系不健全等突出问题,密码应用安全建设迫在眉睫。
采用国产密码技术、产品及服务,或直接对现有信息系统进行密码应用改造,是提高信息系统安全的必经之路。
2.2 问题分析主要从物理和环境安全、网络和通信安全、设备和计算安全、应用与数据安全等方面分析。
(1)物理和环境方面未使用密码技术会导致物理访问身份无法鉴别、门禁进出记录的数据存在不完整性风险及无法保证视频监控影像记录的完整性。
(2)网络和通信方面可能存在实体身份的真实性无法鉴别、设备身份的真实性无法鉴别、访问控制信息的完整性无法核实、通信数据的完整性无法确认、通信数据的机密性无法保证。
(3)设备和计算安全方面设备和计算的连接可能会使机密性、完整性、真实性无法保证。
(4)应用与数据安全方面未使用密码技术会导致应用与数据安全中关于用户在身份鉴别中无法确定登陆用户的真实性、系统应用访问控制无法保证访问控制信息的完整性、重要数据在传输过程中无法保证机密性和完整性及重要数据在存储过程中无法保证机密性和完整性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国产密码算法及应用 商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。 商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如各种安全认证、网上银行、数字签名等。 为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法等等。其中SSF33、SM1、SM4、SM7、祖冲之密码 是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。 目前已经公布算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法等。
一、 国密算法简介 1. SM1对称密码 国密SM1算法是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度为128位,密钥长度都为128比特,算法安全 保密强度及相关软硬件实现性能与AES相当,算法不公开,仅以IP核的形式存在于芯片中。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
2. SM2椭圆曲线公钥密码算法 SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。国密SM2算法标准包括4个部分,第1部分为总则,主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述,第2部分为数字签名算法,这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧,第3部分为密钥交换协议,与ECDH功能相同,但复杂性高,计算量加大,第4部分为公钥加密算法,使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。对于SM2算法的总体感觉,应该是国家发明,其计算上比国际上公布的ECC算法复杂,相对来说算法速度可能慢,但可能是更安全一点。 设需要发送的消息为比特串M,len为M的比特长度。为了对明文M进行加密,作为加密者的用户应实现以下运算步骤: 步骤1:用随机数发生器产生随机数k∈[1,n -1]; 步骤2:计算椭圆曲线点C1=[k]G=(X1 ,Y1 ),将C1的数据类型转换为比特串; 步骤3:计算椭圆曲线点S=[h]P ,若S是无穷远点,则报错; 步骤4:计算椭圆曲线点[k]P =(X2,Y2),将坐标X2,Y2的数据类型转换为比特串; 步骤5:计算t=KDF(x2 ll y2 ,len),若t为全0比特串,则返回步骤1; 步骤6:计算C2 = M ⊕ t; 步骤7:计算C3=Hash(x2 ll M ll y2); 步骤8:输出密文C=C1 ll C2 ll C3。 2010年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2算法)。为保障重要经济系统密码应用安全,国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,要求“自2011年3月1日期,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用SM2算法。自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2算法。”近期,人民银行组织召开多次专题会议讨论研究金融领域国产加密算法升级改造的相关工作。
3. SM3杂凑算法 又叫文摘算法,也有叫杂凑算法的。功能与MD5,SHA-1相同。产生256位的编码。该算法位不可逆的算法。具体算法也是保密。SM3密码杂凑算法给出了杂凑函数算法的计算方法和计算步骤,并给出了 运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2、SM9标准中使用。此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。 SM3算法包括预处理、消息扩展和计算Hash值三部分。预处理部分由消息填充和消息分组两部分组成。首先将接收到的消息末尾填充一个“1” , 再添加k个“0”,使得填充后的数据成为满足length = 448mod512bit的数据长度,再在末尾附上64bit消息长度的二进制表示数, 然后将消息分成512bit的子块,最后将每个512bit的消息子块扩展成132个字用于Hash值的计算。SM3算法计算流程图如图所示。 SM3算法的Hash运算主要是在压缩函数部分,压缩函数共包含64轮,每轮包括12步运算,64轮循环计算结束后,再将计算结果与输入到本轮计算的初始数据进行异或运算,即上一次Hash运算的Hash值输出与输入到本轮计算的初始数据异或得到本次Hash值输出,Hn即为最终的Hash值,H0为设计者提供的初始值IV。 图 SM3算法流程图 4. SM4对称算法 此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 定义反序变换R为: R(A0,A1,A2,A3)=(A3,A2,A1,A0),Ai∈Z322,i = 0,1,2,3。设明文输入为(X0,X1,X2,X3)∈(Z322)4,密文输出为(Y0,Y1,Y2,Y3)∈(Z322)4 ,轮密钥为rk i ∈Z322。则本算法的加密变换为: Xi+4 = F(Xi,Xi+1,Xi+2, Xi+3,rki)= Xi⊕T(Xi+1⊕Xi+2⊕ Xi+3⊕rki),i= 0,1,2,3…,31. (Y0,Y1,Y2,Y3)= R(X32,X33,X34,X35)=(X35,X34,X33,
X32)。 本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使用顺序。 加密时轮密钥的使用顺序为:(rk0, rk1, …, rk31)。 解密时轮密钥的使用顺序为:(rk31, rk30, …, rk0)。 SM4算法的优点是软件和硬件实现容易,运算速度快,但该算法的缺点是消息安全取决于对密钥的保护,泄漏密钥就意味着任何人都能对消息进行密码和解密。由于其加密过程和解密过程互逆,这两个过程均使用相同的保密密钥,使得对称密钥加密体制的适用范围受到了很大限制。
5. SM7对称密码 SM7算法是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7的算法文本目前没有公开发布。SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
6. SM9非对称算法 SM9是基于对的标识密码算法,与SM2类似,包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。在这些算法中使用了椭圆曲线上的对这一个工具,不同于传统意义上的SM2算法,可以实现基于身份的密码体制,也就是公钥与用 户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。 双线性对的双线性的性质是基于对的标识密码SM2中的总则部分同样适用于SM9,由于SM9总则中添加了适用于对的相关理论和实现基础。 SM9给出了数字签名算法(包括数字签名生成算法,数字签名验证算法),密钥交换协议,以及密钥封装机制和公钥加密算法(包括密钥封装算法,加密盒解密算法)。数字签名算法适用于接收者通过签名者的标识验证数据的完整性和数据发送者的身份,也适用于第三方确定签名及所签数据的真实性。密钥交换协议可以使用通信双方通过双方的标识和自身的私钥经过两次或者可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。密钥封装机制和公钥加密算法中,利用密钥封装机制可以封装密钥给特定的实体。公钥加密和解密算法即基于标识的非对称秘密算法,该算法使消息发送者可以利用接收者的标识对消息进行加密,唯有接收者可以用相应的私钥对该密文进行解密,从而获取消息。基于对的算法中同样使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器,密钥封装机制和公钥加密算法中使用了国家密码管理局批准的对称密码算法和消息认证码函数。
7. 祖冲之对称算法 祖冲之密码算法由中国科学院等单位研制,运用于下一代移动通 信4G网络LTE中的国际标准密码算法。祖冲之密码算法(ZUC)的名字源于我国古代数学家祖冲之,祖冲之算法集是由我国学者自主设计的加密和完整性算法,是一种流密码。它是两个新的LTE算法的核心,这两个LTE算法分别是加密算法128-EEA3和完整性算法128-EIA3。ZUC算法由3个基本部分组成,依次为:1、比特重组;2、非线性函数F;3、线性反馈移位寄存器(LFSR)。
二、 国密算法行业应用 2014年,中国银联发布了《中国银联IC卡技术规范》和《中国银联银行卡联网联合技术规范》,在兼容最新国际通用技术标准的基础上支持国产密码,丰富了安全算法体系,促进了信息安全,自主可控水平实现提高。
1. 长沙银行 长沙银行是首批开展国密算法金融IC卡试点银行之一,此次发行金融IC卡中采用了我国安全可控的国密算法芯片。应用在长沙银行金融IC卡上的大唐CE3D系列双界面金融安全芯片采用了32位CPU内核,拥有高达80KB的EEPROM数据存储空间,符合PBOC3.0中SM2/3/4算法升级要求,支持JAVA操作技术,具有高安全、高性能、低功耗的特点,实现国密算法的金融IC卡成功跨行交易。