主页 > imtoken限制中国用户该咋办 > 【转】密码算法揭秘,本文让你成为国际安全算法和国密算法专家

【转】密码算法揭秘,本文让你成为国际安全算法和国密算法专家

信息安全是近几年的热门话题,尤其是最近物联网的普及,安全已经成为移动支付、智能家居等领域发展的核心问题,而安全的本质是算法和安全体系. 阅读本文后,您可以成为安全算法领域的专家。

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

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

对称密钥算法,加密芯片

对称密码

对称算法有几类:

DES算法(你家门禁就是这个算法)

DES(Data Encryption Standard)是1977年美国联邦信息处理标准采用的对称编码。

DES是一种将64位明文加密为64位密文的对称加密算法,其密钥长度为56位。 虽然DES的密钥长度在规范上是64位,但由于每7位设置一个用于错误校验的位,所以实际上密钥长度是56位。 由于DES的密文可以在很短的时间内被破译,所以我们现在不应该使用DES,除非用它来解密以前的密文。

三重 DES (3DES)

三重DES是为了增加DES的强度,将DES重复三次得到的密码算法,又称TDEA,通常简称为3DES。 Triple DES虽然还在银行等机构使用,但处理速度不高,除了特别注意向后兼容的情况外比特币钱包密码,很少用于新的用途。

AES

AES(Advanced Encryption Standard)是一种对称加密算法(Rijndael),取代了它的前身标准(DES),成为一个新的标准。 Rijndael 是由比利时密码学家 Joan Daemen 和 Vincent Rijmen 设计的分组密码算法。 2000年被选为新一代标准密码算法——AES。 Rijndael 的块长度和密钥长度可以从 128 位到 256 位的范围内以 32 位为单位进行选择。 但是在AES规范中,包长度固定为128位,而密钥长度只有128、192、256位。

2、公钥密码(非对称密码算法,安全性较高的算法,银行卡取款时会用到)

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

非对称算法、加密芯片和身份认证算法

非对称算法

RSA

RSA 是一种公钥密码算法,其名称由其三位开发者 Ron Rivest、Adi Shamir 和 Leonard Adleman (Rivest-Shamir-Adleman) 姓氏的首字母组成。 RSA的加密是求“mod N的E次方”,解密是求“mod N的D次方”

密文=明文^E模N 明文=密文^D模N

椭圆曲线密码术 (ECC)

椭圆曲线密码术(ECC)是最近引起广泛关注的一种公钥密码算法。 它的特点是所需的密钥长度比 RSA 更短。 椭圆曲线密码学是通过对椭圆曲线上的特定点进行特殊的乘法运算来实现的,它利用了这种乘法运算的逆运算非常困难的特点。 使用公钥密码术可以解决密钥分发问题。 公钥密码术是密码学领域的一项革命性发明。 现代计算机和 Internet 使用的密码技术都受益于公钥密码术。

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

3. 单向哈希函数(HASH)

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

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

HASH算法,比特币硬件钱包

散列值

如果想了解更多移动设备安全解决方案,可以加微信“seciot”交流。

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,您必须有一个共享密钥。 没有共享密钥的人无法计算MAC值。 消息认证码使用该属性完成认证。 另外,和单向散列函数的散列值一样,即使报文中有一位发生变化,MAC值也会发生变化,报文认证码就是利用这个属性来确认完整性。 消息认证码可以说是与密钥关联的单向散列函数。

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

MAC和HASH比较,加密芯片

MAC与HASH的比较

MAC进程,加密芯片

MAC进程

HMAC

HMAC是一种利用单向哈希函数构造消息认证码的方法,其中HMAC中的H表示Hash。

消息认证码并不能解决所有问题,比如“向第三方证明”和“防止否认”,这两个问题是消息认证码无法解决的。

5.数字签名

消息认证码不能防止否认的原因是消息认证码需要在发送方和接收方之间共享一个密钥。

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

数字签名中也使用由公钥和私钥组成的密钥对,但这两个密钥的用法与公钥密码学相反,即用私钥加密等同于生成签名,而用公钥解密就相当于生成了一个签名。 相当于验证签名。

PKI签名及验证加密芯片

生成签名和验证签名

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

RSA

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

RSA生成签名和验证签名的过程可以用下面的公式表示:

签名 = 消息 ^D mod N 签名消息 = 密文 ^E mod N

EIGamal

EIGamal 方法是由 Taher EIGamal 设计的公钥算法。 使用了模 N 下求离散对数的难度。 EIGamal 方法可用于公钥加密和数字签名。

动态数据分析

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

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

ECDSA

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

拉宾方式

Rabin方法是MORabin设计的一种公钥算法。 利用求模 N 平方根的难度。Rabin 的方法可用于公钥加密和数字签名。

使用数字签名不仅可以识别篡改和伪造,还可以防止抵赖,但不能确认用于验证签名的公钥是否属于真正的发送者。

为确认公钥是否合法,可以对公钥进行数字签名,即证书。

6.证书

公钥证书(Public-Key Certificate,PKC)其实很像驾照。 它包含姓名、组织、电子邮件、地址和属于该人的公钥等个人信息,由证书颁发机构 (CA) 强制执行。 电子签名。 我们只要看到公钥证书,就可以知道认证机构认为公钥确实属于这个人。 公钥证书也简称为证书。

证书颁发机构是可以确认“公钥确实属于此人”并可以生成数字签名的个人或组织。

PKI认证

消息发送方使用认证权限将密文发送给消息接收方

X.509

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

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

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

钥匙

各种键

1.对称加密的密钥和公钥加密的密钥

2、消息认证码的密钥和数字签名的密钥

3.保密密钥和认证密钥

4.会话密钥和主密钥

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

与每次通信都改变的会话密钥相比,被重复使用的密钥称为主密钥。

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

一般来说,加密的对象是用户直接使用的消息(内容)。 在这种情况下,使用的密钥称为 CEK(内容加密密钥); 相比之下,用于加密密钥的密钥称为 KEK(密钥加密密钥)。

上面提到的会话密钥用作CEK,而主密钥用作KEK。

一张图文让你成为密码算法安全专家:国密算法与国际算法大揭秘

CEK 和 KEK

CEK 和 KEK.png

Diffe-Hellman 密钥交换

Diffe-Hellman 密钥交换是 Whitfield Diffe 和 Martin Hellman 于 1976 年共同发明的一种算法。利用该算法,通信中的双方可以通过交换一些公开的信息来生成一个共享的秘密号码,这个秘密号码可以被使用作为对称密码的密钥。

一张图文让你成为密码算法安全专家:国密算法与国际算法大揭秘

Diffee-Hellman 密钥交换

8. Nonce(比特币钱包最爱)

随机数的用处

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

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

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

生成nonce:用于防御replay攻击和block ciphers的CTR模式等。

生成 OTP:用于基于密码的密码等。

(笔者去年工作的比特币硬件钱包项目核心是测试硬件安全和随机数安全,目前被盗的比特币钱包和手机支付很多都与该算法有关。)

随机数的性质

随机性(弱伪随机数)

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

不可再现性(真随机数)

真随机数发生器

硬件产生的随机数序列是根据传感器收集到的热量、声音的变化等实际上无法预测和再现的自然现象信息产生的。 像这样的硬件设备称为随机数生成器。

伪随机数发生器

可以生成随机数的软件称为伪随机数生成器。 因为单靠软件无法产生真正的随机数,所以加了一个“伪”字。

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 可以破解。 国密算法SM2和SM4也是如此,都是遵循国际算法。

因此,金融领域的产品必须通过算法的安全认证。 在这里,具有独立算法引擎的安全硬件非常重要。 认证过程是通过多种算法实现的安全性进行认证。 具体就是做各种攻击,看看能不能拿到密钥。 同样,国家保密局要求,内置国密算法的安全产品要想通过国密认证,就必须实现算法的安全性。