预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

国产密码算法及应用 商用密码,是指能够实现商用密码算法的加密、解密和认证等功能 的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技 术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘 密,任何单位和个人都有责任和义务保护商用密码技术的秘密。 商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又 具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如 各种安全认证、网上银行、数字签名等。 为了保障商用密码安全,国家商用密码管理办公室制定了一系列密 码标准,包括SSF33SM1(SCB2、SM2、SM3、SM4、SM7、SM9、祖冲之 密码算法等等。其中SSF33SM1、SM4SM7、祖冲之密码是对称算法; SM2、SM9是非对称算法;SM3是哈希算法。 目前已经公布算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码 杂凑算法、SM4分组密码算法等。 一、国密算法简介 1.SM1对称密码 国密SM1算法是由国家密码X局编制的一种商用密码分组标准对称 算法,分组长度为128位,密钥长度都为128比特,算法安全保密强度及 相关软硬件实现性能与AES相当,算法不公开,仅以IP核的形式存在于 芯片中。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密 卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各 个应用领域(包括国家政务通、警务通等重要领域)。 2.SM2椭圆曲线公钥密码算法 SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同 于ECDSAECDH等国际标准,而是采取了更为安全的机制。国密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:计算椭圆曲线点C仁[k]G=(X1,Y1),将C1的数据类型转换为 比特串; 步骤3:计算椭圆曲线点S=[h]P,若S是无穷远点,则报错; 步骤4:计算椭圆曲线点[k]P=(X2,Y2),将坐标X2,丫2勺数据类型转 换为比特串; 步骤5:计算t二KDFx2IIy2,len),若t为全0比特串,则返回步骤 1;步骤6:计算C2=M㊉t; 步骤7:计算C3=Hash(x2llMlly2); 步骤8:输出密文C=C1llC2llC3。 2019年底,国家密码X局公布了我国自主研制的椭圆曲线公钥密码 算法”(SM2算法)。为保障重要经济系统密码应用安全,国家密码X局于 2019年发布了《关于做好公钥密码算法升级工作的通知》,要求自2019 年3月1日期,在建和拟建公钥密码基础设施电子认证系统和密钥管理系 统应使用SM2算法。自2019年7月1日起,投入运行并使用公钥密码的 信息系统,应使用SM2算法。”近期,人民银行组织召开多次专题会议 讨论研究金融领域国产加密算法升级改造的相关工作。 3.SM3杂凑算法 又叫文摘算法,也有叫杂凑算法的。功能与MD5,SHA-1相同。产生 256位的编码。该算法位不可逆的算法。具体算法也是保密。SM3密码杂 凑算法给出了杂凑函数算法的计算方法和计算步骤,并给出了 运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认 证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。 在SM2、SM9标准中使用。此算法对输入长度小于2的64次方的比特消 息,经过填充和迭代压缩,生成长度为256比特的杂凑值, 其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过 程,消息扩展和压缩函数所构成。 SM3算法包括预处理、消息扩展和计算Hash值三部分。预处理部分 由消息填充和消息分组两部分组成。首先将接收到的消息末尾填充一个 “1”,再添加k个“0”,使得填充后的数据成为满足length =448mod512bit的数据长