热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

zuc密码算法(密码算法)

信息安全是近年来的热门话题,特别是最近随着物联网的全民化,安全已经成为移动支付,智能家居等领域发展的核心议题,而安全的本质是算法和安全系统。读完本文,就可以让你成为安全算法领域的专


信息安全是近年来的热门话题,尤其是随着物联网的普及,安全已经成为移动支付、智能家居等领域发展的核心问题,而安全的本质是算法和安全系统。看完这篇文章,你就可以成为安全算法领域的专家。




密码安全


1.对称密码(现在最常用的基本密码算法)


对称密码是一种使用同一密钥进行加密和解密的技术,用于确保消息的机密性。




对称密码


对称算法有几类:


DES算法(此算法用于您的访问控制)


DES(数据加密标准)是1977年美国联邦信息处理标准中采用的对称码。


DES是将64位明文加密成64位密文的对称密码算法,其密钥长度为56位。虽然从技术上讲,DES的密钥长度是64位,但由于每7位设置一位用于检错,所以密钥长度实际上是56位。因为DES的密文可以在短时间内被破译,所以我们现在不应该使用DES,除了解密之前的密文。


三重DES(3DES)


三重DES是通过重复三次DES以增加DES的强度而获得的密码算法,也称为TDEA,通常缩写为3DES。虽然目前银行等机构仍在使用三重DES,但其处理速度不高,除了特别注意向后兼容的情况外,很少用于新用途。


俄歇电子能谱


AES(高级加密标准)是一种对称密码算法(Rijndael),它取代了它的前身标准(DES),成为一种新的标准。Rijndael是由比利时密码学家琼代蒙和安静的老虎Rijmen设计的分组密码算法。2000年,Rijndael被选为新一代标准密码算法——AES。Rijndael的包长度和密钥长度可以分别在32位中的128位到256位的范围内选择。但是,在AES规范中,数据包长度固定为128位,密钥长度只有128、192和256位。


2.公钥密码(非对称密码算法,一种更安全的算法,将在从银行卡取款时使用)


在公钥(非对称密码)中,密钥分为加密密钥和解密密钥。发送方用加密密钥加密消息,接收方用解密密钥解密密文。公钥算法主要应用于身份认证领域。




不对称算法


南非共和国(Republic of South Africa)


RSA是一种公钥密码算法,它的名字由它的三个开发者的姓氏首字母组成,这三个开发者分别是Ron Rivest、阿迪萨莫尔和Leonard Adleman(Riverst-Shamir-Adleman)。RSA的加密是为了“模N的e次方”,而解密是为了“模N的d次方”


密文=明文^E模n明文=密文^D模n椭圆曲线密码(ECC)


椭圆曲线密码是近年来备受关注的一种公钥密码算法。其特点是所需密钥长度比RSA短。椭圆曲线密码是通过在椭圆曲线上的特定点上执行特殊的乘法运算来实现的,这利用了这种乘法运算的逆运算非常困难的事实。使用公钥密码可以解决密钥分发问题。公钥是密码学领域的一项革命性发明。现代计算机和互联网使用的加密技术都受益于公钥加密技术。


公钥密码虽然可以解决对称密码中的密钥交换问题,但存在被中间人攻击掩盖的风险,因此需要用数字签名对公钥进行认证。即使您已经有了公钥密码,对称密码也不会消失。公钥的运行速度远低于对称密钥。因此,在一般的通信过程中,这两个密码往往是一起使用的,即使用对称密钥来提高处理速度,使用公钥来解决密钥分发问题。这种方式称为混合密码系统。


3.单向hash函数(HASH)


单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列码。单向哈希函数可以根据消息的内容计算哈希值,哈希值可以用来检查消息的完整性。哈希值的长度与消息的长度无关。无论消息是1位、100MB甚至100GB,单向哈希函数都会计算出一个固定长度的哈希值。以SHA-256单向散列函数为例。它计算的哈希值的长度总是256位(32字节)。为了确认完整性,即使消息中只有一个比特变化,也会生成不同的哈希值。


单向哈希函数输出的哈希值也称为消息摘要或指纹。



"pgc-img-caption">HASH

干货分享时间:如果想进一步了解移动设备安全方案资料,请关注本今日头条号 “物联网那些事 ”并私信索取即可免费获得独有资料哦。

MD4、MD5(记不记得电影和文件下载的MD5校验?)

MD(Messge Digest)4是由Rivest于1990年设计的单向散列函数,能够产生128比特的散列值。现在它已经不安全了。MD(Messge Digest)5是由Rivest于1991年设计的单向散列函数,能够产生128比特的散列值。MD5的强抗碰撞性已经被攻破。也就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此它也不安全了。

SHA-1、SHA-256、SHA-384、SHA512

SHA-1是由NIST(美国国家标准技术研究所)设计的一种能够产生160比特的散列值的单向散列函数。现在已不推荐使用。SHA-256、SHA-384、SHA512都是由NIST设计的单向散列函数,它们的散列值长度分别为256比特、384比特、和512比特。这些单向散列函数合起来统称SHA-2。

SHA-1的强抗碰撞性已于2005年被攻破,不过,SHA-2还尚未被攻破。

单向散列函数能够辨别出“篡改”,但无法辨别出“伪装”,这时就需要进行认证。

4. 消息认证码

消息认证码(Message Authentication Code)是一种确认完整性并进行认证的技术,简称为MAC。

消息认证指的是“消息来自正确的发送者”这一性质。消息认证码的输入包括任意长度的消息和一个发送者与接受者之间共享的密钥,它可以输出固定长度的数据,这个数据成为MAC值。

要计算MAC必须持有共享密钥,没有共享密钥的人就无法计算MAC值,消息认证码正是利用这一性质来完成认证的。此外,和单向散列函数的散列值一样,哪怕消息中发生1比特的变化,MAC值也会产生变化,消息认证码正是利用这一性质来确认完整性的。消息认证码可以说是一种与密钥相关联的单向散列函数。

消息认证码可以使用单向散列函数和对称密码等技术来实现。

MAC与HASH比较

MAC流程

HMAC

HMAC是一种使用单向散列函数来构造消息认证码的方法,其中HMAC的H就是Hash的意思。

消息认证码也不能解决所有的问题,例如“对第三方证明”,和“防止否认”,这两个问题就无法通过消息认证码来解决。

5. 数字签名

消息认证码之所以无法防止否认,是因为消息认证码需要在发送者和接收者两者之间共享一个密钥。

数字签名是一种能够对第三方进行消息认证,并能够防止通信对象作出否认的认证技术。

数字签名中也同样会使用公钥和私钥组成的密钥对,不过这两个密钥的用法和公钥密码是相反的,即用私钥加密相当于生成签名,而用公钥解密则相当于验证签名。

生成签名和验证签名

实现数字签名使用的算法如下:

RSA

RSA是一种公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的(Rivest-Shamir-Adleman)。

用RSA生成签名和验证签名的过程可用下列公式来表述:

签名 = 消息^D mod N由签名得到的消息 = 密文^E mod N

EIGamal

EIGamal方式是由Taher EIGamal设计的公钥算法。利用了mod N 下求离散对数的困难度。EIGamal方式可以被用于公钥密码和数字签名。

DSA

DSA(Digital Signature Algorithm)是一种数字签名算法,是由NIST于1991年制定的数字签名规范。

DSA是Scnorr算法与EIGammal方式的变体,只能被用于数字签名。

ECDSA

ECDSA(Elliptic Curve Digital Signature Algorithm)是一种利用椭圆曲线密码来实现的数字签名算法。

Rabin方式

Rabin方式是由M.O.Rabin设计的公钥算法。利用了在mod N下求平方根的困难度。Rabin方式可以被用于公钥密码和数字签名。

用数字签名既可以识别出篡改和伪装,还可以防止否认,但是无法确认用于验证签名的公钥属于真正的发送者的。

要确认公钥是否合法,可以对公钥施加数字签名,这就是证书。

6.证书

公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱、地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority,CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书。

认证机构就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织。

消息发送者利用认证机构向消息接收者发送密文

X.509

X.509是一种证书生成和交换的标准规范。

7.PKI(身份认证,银行U盾就是这个体系啦)

PKI(Public-Key Infrastructure)是为了能够更有效地运用公钥而制定的一系列规范和规格的总称。X.509也是PKI的一种。

密钥

各种不同的密钥

1.对称密码的密钥与公钥密码的密钥

2.消息认证码的密钥与数字签名的密钥

3.用于确保机密性的密钥与用于认证的密钥

4.会话密钥与主密钥

当我们访问以 https:// 开头的网页时,Web服务器和浏览器之间会进行基于SSL/TLS的加密通信。在这样的通信中所使用的密钥是仅限于本次通信的一次性密钥,下次通信时就不能使用了。像这样每次通信只能使用一次的密钥称为会话密钥(session key)。

相对于每次通信都更换的会话密钥,一直被重复使用的密钥称为主密钥(master key)。

5.用于加密内容的密钥与用于加密密钥的密钥

一般来说,加密的对象是用户直接使用的消息(内容),这样的情况下所使用的密钥称为CEK(Contents Encrypting Key);相对地,用于加密密钥的密钥则称为KEK(Key Encrypting Key)。

上面提到的会话密钥都是被作为CEK使用的,而主密钥则是被作为KEK使用的。

CEK与KEK

CEK与KEK.png

Diffe-Hellman密钥交换

Diffe-Hellman密钥交换是1976年由Whitfield Diffe和Martin Hellman共同发明的一种算法。使用这种算法,通信双方通过交换一些可以公开的信息就能够生成出共享的秘密数字,而这一秘密数字就可以被用作对称密码的密钥。

Diffee-Hellman密钥交换

8. 随机数(比特币钱包的最爱)

随机数的用处

生成密钥:用于对称密码和消息认证码。

生成密钥对:用于公钥密码和数字签名。

生成初始化向量(IV):用于分组密码的CBC、CFB和OFB模式。

生成nonce:用于防御重放攻击以及分组密码的CTR模式等。

生成盐:用于基于口令的密码等。

随机数的性质

随机性(弱伪随机数)

不可预测性(强伪随机数)

不可重现性(真随机数)

真随机数生成器

通过硬件生成的随机数列,是根据传感器收集的热量、声音的变化等事实上无法预测和重现的自然现象信息来生成的。像这样的硬件设备就称为随机数生成器。

伪随机数生成器

而可以生成随机数的软件则称为伪随机数生成器。因为仅靠软件无法生成真随机数,因此要加上一个“伪”字。

9. 国密算法:中国自主的密码算法标准(国家金融安全的核心,要强烈支持)

保证安全最根本的方法是基础软件和基础硬件都是自己控制,目前我国无法短期国产化的情况下,数据加密是最好的方式。如果加密算法以及实现都是外国提供的,安全性从何说起,所以我国国家密码局发布了自主可控的国密算法,包含SM1\ SM2\ SM3\ SM4算法

SM1算法

分组密码算法是分组对称加解密算法,分组长度为128位,密钥长度都为128 比特,算法安全保密强度及相关软硬件实现性能与AES 相当,算法不公开,仅以IP 核的形式存在于芯片中。采用该算法已经研制了系列芯片、智能IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。

SM4分组密码算法

是用于无线局域网和可信计算系统的专用分组密码算法,该算法的分组长度为128比特,密钥长度为128比特。SM4算法是我国制定WAPI标准的组成部分,同时也可以用于其它环境下的数据加密保护。

SM1算法和SM4算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。SM1算法和SM4算法均可以用于网络数据的加密保护,以及存储数据或文件的加密保护。

SM1算法和SM4算法还能够抵抗针对分组密码算法的各种攻击方法,包括穷举搜索攻击、差分攻击、线性攻击等,在实际应用中能够抵抗这些攻击手段。国际上常见的分组密码算法,包括国际上的DES算法、AES算法、IDEA算法等。

SM2算法

由国家密码管理局于2010年12月17日发布,全称为椭圆曲线算法。椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为它们是用三次方程来表示的,并且该方程与计算椭圆周长的方程相似。

摘要算法——国产SM3

摘要函数在密码学中具有重要的地位,被广泛应用在数字签名,消息认证,数据完整性检测等领域。摘要函数通常被认为需要满足三个基本特性:碰撞稳固性,原根稳固性和第二原根稳固性。SM3密码摘要算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。

SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂,比如压缩函数的每一轮都使用2个消息字。

现今为止,SM3算法的安全性相对较高。

当然,算法本身安全了,并不表示就安全了。 在很多流程中,都有可能出现漏洞。举个例子,保险箱虽然很牛逼,但是,保险箱的钥匙如果被偷走,那保险箱就没什么安全性了。

因此,无论算法的数学理论有多牛逼,如果运行算法的过程不是安全的,就容易泄露秘钥。

对算法的攻击,一种常见的手段是SCA(side channel attack)。可以很容易的攻击得到算法的密钥。RSA/AES/DES都可以被攻破。作为follow国际算法的国密算法SM2、SM4,也是一样的道理。

所以,金融领域的产品,都要求必须经过算法的安全认证,在这里,带独立算法引擎的安全硬件就非常重要了。认证过程就是要多算法实现的安全性进行认证。具体的,就是做各种各样的攻击,看是否能得到密钥。同样的,国密局要求,内置了国密算法的安全产品,要想过国密的认证,就必须要做到算法实现的安全性。

如果想进一步了解移动设备安全和算法安全资料,请关注本头条号 “物联网那些事 ”并私信索取即可免费获得独有资料哦。

物联网那些事


推荐阅读
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
author-avatar
手机用户2502937923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有