发布日期:2020-07-24 来源:百度文库 浏览次数:2286
密码学是研究编制密码和破译密码的技术科学,起源于隐秘消息传输,在编码和破译中逐渐发展起来。密码学是一个综合性的技术科学,与语言学、数学、电子学、声学、信息论、计算机科学等有着广泛而密切的联系。密码学的基本思想是对敏感消息的保护,主要包括机密性,鉴别,消息完整性和不可否认性,从而涉及加密,杂凑函数,数字签名,消息认证码等。
一.密码学简介
密码学中应用最为广泛的的三类算法包括对称算法、非对称算法、杂凑算法。
1.1 对称密码
对称密码学主要是分组密码和流密码及其应用。分组密码中将明文消息进行分块加密输出密文区块,而流密码中使用密钥生成密钥流对明文消息进行加密。世界上应用较为广泛的包括DES、3DES、AES,此外还有Serpent,Twofish,MARS和RC6等算法。对称加密的工作模式包括电码本模式(ECB 模式),密码反馈模式(CFB 模式),密码分组链接模式(CBC 模式),输入反馈模式(OFB 模式)等。
1.2 非对称密码
公钥密码体制由Diffie和Hellman所提出。1978年Rivest,Shamir和Adleman提出RAS密码体制,基于大素数分解问题。基于有限域上的离散对数问题产生了ElGamal密码体制,而基于椭圆曲线上的离散对数问题产生了椭圆曲线密码密码体制。此外出现了其他公钥密码体制,这些密码体制同样基于困难问题。目前应用较多的包括RSA、DSA、DH、ECC等。
1.3杂凑算法
杂凑算法又称hash函数,就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一个安全的杂凑函数应该至少满足以下几个条件。
1) 输入长度是任意的;
2) 输出长度是固定的,根据目前的计算技术应至少取128bits长,以便抵抗生日攻击;
3) 对每一个给定的输入,计算输出即杂凑值是很容易的;
4) 给定杂凑函数的描述,找到两个不同的输入消息杂凑到同一个值是计算上不可行的,或给定杂凑函数的描述和一个随机选择的消息,找到另一个与该消息不同的消息使得它们杂凑到同一个值是计算上不可行的。
杂凑函数主要用于完整性校验和提高数字签名的有效性,目前已有很多方案。这些算法都是伪随机函数,任何杂凑值都是等可能的。输出并不以可辨别的方式依赖于输入;在任何输入串中单个比特的变化,将会导致输出比特串中大约一半的比特发生变化。
二.商用密码算法
为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法那等等。其中SSF33、SM1、SM4、SM7、祖冲之密码是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。目前已经公布算法文本的包括祖冲之序列密码算法、SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法等。
2.1 SM1对称密码
SM1 算法是分组密码算法,分组长度为128位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与 AES 相当,算法不公开,仅以 IP 核的形式存在于芯片中。
采用该算法已经研制了系列芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
2.2 SM2椭圆曲线公钥密码算法
SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。
SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及示例。
在总则的基础上给出了数字签名算法(包括数字签名生成算法和验证算法),密钥交换协议以及公钥加密算法(包括加密算法和解密算法),并在每个部分给出了算法描述,算法流程和相关示例。
数字签名算法适用于商用应用中的数字签名和验证,可满足多种密码应用中的身份认证和数据完整性,真实性的安全需求。密钥交换协议适用于商用密码应用中的密钥交换,可满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话秘钥)。公钥加密算法适用于国家商用密码应用中的消息加解密,消息发送者可以利用接收者的公钥对消息进行加密,接收者用对应的私钥进行解,获取消息。
数字签名算法,密钥交换协议以及公钥加密算法都使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器。数字签名算法,密钥交换协议以及公钥加密算法根据总则来选取有限域和椭圆曲线,并生成密钥对,具体算法,流程和示例见SM2标准。
SM2算法和RSA、对称算法等强度对比如下。
保密级别 | 对称密钥长度 | RSA密钥长度 | ECC密钥长度 | 保密年限 |
80 | 80 | 1024 | 160 | 2010 |
112 | 112 | 2048 | 224 | 2030 |
128 | 128 | 3072 | 256 | 2040 |
192 | 192 | 7680 | 384 | 2080 |
256 | 256 | 15360 | 512 | 2120 |
2.3 SM3杂凑算法
SM3密码杂凑算法给出了杂凑函数算法的计算方法和计算步骤,并给出了运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2,SM9标准中使用。此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。具体算法及运算示例见SM3标准。
2.4 SM4对称算法
此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。此算法采用非线性迭代结构,每次迭代由一个轮函数给出,其中轮函数由一个非线性变换和线性变换复合而成,非线性变换由S盒所给出。
SM4算法的具体描述和示例见SM4标准。
2.5 SM7对称密码
SM7算法,是一种分组密码算法,分组长度为 128 比特,密钥长度为 128 比特。SM7的算法文本目前没有公开发布。SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通)。
2.6 SM9非对称算法
SM9是基于对的标识密码算法,与SM2类似,包含四个部分:总则,数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法。在这些算法中使用了椭圆曲线上的对这一个工具,不同于传统意义上的SM2算法,可以实现基于身份的密码体制,也就是公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。
SM2中的总则部分同样适用于SM9,由于SM9总则中添加了适用于对的相关理论和实现基础。
基于总则中的椭圆曲线以及对的基本选取,给出系统参数组,系统主密钥和用户密钥的产生。用户密钥由系统的主密钥和用户标识共同产生。SM9给出了数字签名算法(包括数字签名生成算法,数字签名验证算法),密钥交换协议,以及密钥封装机制和公钥加密算法(包括密钥封装算法,加密盒解密算法)。数字签名算法适用于接收者通过签名者的标识验证数据的完整性和数据发送者的身份,也适用于第三方确定签名及所签数据的真实性。密钥交换协议可以使用通信双方通过双方的标识和自身的私钥经过两次或者可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。密钥封装机制和公钥加密算法中,利用密钥封装机制可以封装密钥给特定的实体。公钥加密和解密算法即基于标识的非对称秘密算法,该算法使消息发送者可以利用接收者的标识对消息进行加密,唯有接收者可以用相应的私钥对该密文进行解密,从而获取消息。基于对的算法中同样使用了国家密管理局批准的SM3密码杂凑算法和随机数发生器,密钥封装机制和公钥加密算法中使用了国家密码管理局批准的对称密码算法和消息认证码函数。基于对的数字签名算法,密钥交换协议以及密钥封装机制和公钥加密算法的具体算法,流程图和示例见SM9标准。
2.7祖冲之对称算法
祖冲之密码算法由中国科学院等单位研制,运用于下一代移动通信4G网络LTE中的国际标准密码算法。祖冲之密码算法(ZUC)的名字源于我国古代数学家祖冲之,祖冲之算法集是由我国学者自主设计的加密和完整性算法,是一种流密码。它是两个新的LTE算法的核心,这两个LTE算法分别是加密算法128-EEA3和完整性算法128-EIA3。ZUC算法由3个基本部分组成,依次为:1、比特重组;2、非线性函数F;3、线性反馈移位寄存器(LFSR)。