常见密码技术简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见密码技术简介相关的知识,希望对你有一定的参考价值。

参考技术A ##

密码技术在网络传输安全上的应用

随着互联网电子商务和网络支付的飞速发展,互联网安全已经是当前最重要的因素之一。作为一名合格的软件开发工程师,有必要了解整个互联网是如何来保证数据的安全传输的,本篇文章对网络传输安全体系以及涉及到的算法知识做了一个简要的介绍,希望大家能够有一个初步的了解。

###密码技术定义

简单的理解,密码技术就是编制密码和破译密码的一门技术,也即是我们常说的加密和解密。常见的结构如图:

其中涉及到的专业术语:

1.秘钥:分为加密秘钥和解密秘钥,两者相同的加密算法称为对称加密,不同的称为非对称加密;

2.明文:未加密过的原文信息,不可以被泄露;

3.密文:经过加密处理后的信息,无法从中获取有效的明文信息;

4.加密:明文转成密文的过程,密文的长度根据不同的加密算法也会有不同的增量;

5.解密:密文转成明文的过程;

6.加密/解密算法:密码系统使用的加密方法和解密方法;

7.攻击:通过截获数据流、钓鱼、木马、穷举等方式最终获取秘钥和明文的手段。

###密码技术和我们的工作生活息息相关

在我们的日常生活和工作中,密码技术的应用随处可见,尤其是在互联网系统上。下面列举几张比较有代表性的图片,所涉及到的知识点后面都会一一讲解到。

1.12306旧版网站每次访问时,浏览器一般会提示一个警告,是什么原因导致的? 这样有什么风险呢?

2.360浏览器浏览HTTPS网站时,点开地址栏的小锁图标会显示加密的详细信息,比如百度的话会显示```AES_128_GCM、ECDHE_RSA```,这些是什么意思?

3.在Mac系统的钥匙串里有很多的系统根证书,展开后有非常多的信息,这些是做什么用的?

4.去银行开通网上支付都会附赠一个U盾,那U盾有什么用呢?

##如何确保网络数据的传输安全

接下来我们从实际场景出发,以最常见的客户端Client和服务端Server传输文件为例来一步步了解整个安全体系。

####1. 保密性

首先客户端要把文件送到服务端,不能以明文形式发送,否则被黑客截获了数据流很容易就获取到了整个文件。也就是文件必须要确保保密性,这就需要用到对称加密算法。 

** 对称加密: **加密和解密所使用的秘钥相同称为对称加密。其特点是速度快、效率高,适用于对较大量的数据进行加密。常见的对称加密算法有DES、3DES、AES、TDEA、RC5等,让我们了解下最常见的3DES和AES算法:

** DES(Data Encryption Standard): **1972年由美国IBM研制,数学原理是将明文以8字节分组(不足8位可以有不同模式的填充补位),通过数学置换和逆置换得到加密结果,密文和明文长度基本相同。秘钥长度为8个字节,后有了更安全的一个变形,使用3条秘钥进行三次加密,也就是3DES加密。

**3DES:**可以理解为对明文进行了三次DES加密,增强了安全程度。

** AES(Advanced Encryption Standard): **2001年由美国发布,2002年成为有效标准,2006年成为最流行的对称加密算法之一。由于安全程度更高,正在逐步替代3DES算法。其明文分组长度为16字节,秘钥长度可以为16、24、32(128、192、256位)字节,根据秘钥长度,算法被称为AES-128、AES-192和AES-256。

对称加密算法的入参基本类似,都是明文、秘钥和模式三个参数。可以通过网站进行模拟测试:[http://tool.chacuo.net/crypt3des]()。其中的模式我们主要了解下ECB和CBC两种简单模式,其它有兴趣可自行查阅。

** ECB模式(Electronic Codebook Book): **这种模式是将明文分成若干小段,然后对每一段进行单独的加密,每一段之间不受影响,可以单独的对某几段密文进行解密。

** CBC模式(Cipher Block Chaining): **这种模式是将明文分成若干小段,然后每一段都会和初始向量(上图的iv偏移量)或者上一段的密文进行异或运算后再进行加密,不可以单独解密某一断密文。

 ** 填充补位: **常用为PKCS5Padding,规则为缺几位就在后面补几位的所缺位数。,比如明文数据为```/x01/x01/x01/x01/x01/x01```6个字节,缺2位补```/x02```,补完位```/x01/x01/x01/x01/x01/x01/x02/x02```。解密后也会按照这个规则进行逆处理。需要注意的是:明文为8位时也需要在后面补充8个```/x08```。

####2. 真实性

客户端有了对称秘钥,就需要考虑如何将秘钥送到服务端,问题跟上面一样:不能以明文形式直接传输,否则还是会被黑客截获到。这里就需要用到非对称加密算法。

** 非对称加密: **加密和解密秘钥不同,分别称为公开秘钥(publicKey)和私有秘钥(privateKey)。两者成对出现,公钥加密只能用私钥解密,而私钥加密也只能用公钥加密。两者不同的是:公钥是公开的,可以随意提供给任何人,而私钥必须保密。特点是保密性好,但是加密速度慢。常见的非对称加密算法有RSA、ECC等;我们了解下常见的RSA算法:

** RSA(Ron Rivest、Adi Shamir、Leonard Adleman): **1977年由麻省理工学院三人提出,RSA就是他们三个人的姓氏开头字母拼在一起组成的。数学原理是基于大数分解。类似于```100=20x5```,如果只知道100的话,需要多次计算才可以试出20和5两个因子。如果100改为极大的一个数,就非常难去试出真正的结果了。下面是随机生成的一对公私钥:

这是使用公钥加密后结果:

RSA的这种特性就可以保证私钥持有者的真实性,客户端使用公钥加密文件后,黑客就算截获到数据因为没有私钥也是无法解密的。

** Tips: **

+** 不使用对称加密,直接用RSA公私钥进行加密和解密可以吗? **

答案:不可以,第一是因为RSA加密速度比对称加密要慢几十倍甚至几百倍以上,第二是因为RSA加密后的数据量会变大很多。

+** 由服务端生成对称秘钥,然后用私钥加密,客户端用公钥解密这样来保证对称秘钥安全可行吗? **

答案:不可行,因为公钥是公开的,任何一个人都可以拿到公钥解密获取对称秘钥。

####3. 完整性

当客户端向服务端发送对称秘钥加密后的文件时,如果被黑客截获,虽然无法解密得到对称秘钥。但是黑客可以用服务端公钥加密一个假的对称秘钥,并用假的对称秘钥加密一份假文件发给服务端,这样服务端会仍然认为是真的客户端发送来的,而并不知道阅读的文件都已经是掉包的了。

这个问题就需要用到散列算法,也可以译为Hash。常见的比如MD4、MD5、SHA-1、SHA-2等。

** 散列算法(哈希算法): **简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。而且该过程是不可逆的,无法通过摘要获得原文。

** SHA-1(Secure Hash Algorithm 1): **由美国提出,可以生成一个20字节长度的消息摘要。05年被发现了针对SHA-1的有效攻击方法,已经不再安全。2010年以后建议使用SHA-2和SHA-3替代SHA-1。

** SHA-2(Secure Hash Algorithm 2): **其下又分为六个不同算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA512/256。其后面数字为摘要结果的长度,越长的话碰撞几率越小。SHA-224的使用如下图:

客户端通过上面的散列算法可以获取文件的摘要消息,然后用客户端私钥加密后连同加密的文件发给服务端。黑客截获到数据后,他没有服务端私钥无法获取到对称秘钥,也没有客户端私钥无法伪造摘要消息。如果再像上面一样去掉包文件,服务端收到解密得到摘要消息一对比就可以知道文件已经被掉包篡改过了。

这种用私钥对摘要消息进行加密的过程称之为数字签名,它就解决了文件是否被篡改问题,也同时可以确定发送者身份。通常这么定义:

** 加密: **用公钥加密数据时称为加密。

** 签名: **用私钥加密数据时称为签名。

####4. 信任性

我们通过对称加密算法加密文件,通过非对称加密传输对称秘钥,再通过散列算法保证文件没被篡改过和发送者身份。这样就安全了吗?

答案是否定的,因为公钥是要通过网络送到对方的。在这期间如果出现问题会导致客户端收到的公钥并不一定是服务端的真实公钥。常见的** 中间人攻击 **就是例子:

** 中间人攻击MITM(Man-in-the-MiddleAttack): **攻击者伪装成代理服务器,在服务端发送公钥证书时,篡改成攻击者的。然后收到客户端数据后使用攻击者私钥解密,再篡改后使用攻击者私钥签名并且将攻击者的公钥证书发送给服务器。这样攻击者就可以同时欺骗双方获取到明文。

这个风险就需要通过CA机构对公钥证书进行数字签名绑定公钥和公钥所属人,也就是PKI体系。

** PKI(Privilege Management Infrastructure): **支持公钥管理并能支持认证、加密、完整性和可追究性的基础设施。可以说整个互联网数据传输都是通过PKI体系进行安全保证的。

** CA(Certificate Authority): **CA机构就是负责颁发证书的,是一个比较公认的权威的证书发布机构。CA有一个管理标准:WebTrust。只有通过WebTrust国际安全审计认证,根证书才能预装到主流的浏览器而成为一个全球可信的认证机构。比如美国的GlobalSign、VeriSign、DigiCert,加拿大的Entrust。我国的CA金融方面由中国人民银行管理CFCA,非金融CA方面最初由中国电信负责建设。

CA证书申请流程:公司提交相应材料后,CA机构会提供给公司一张证书和其私钥。会把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹,并把指纹和指纹算法用自己的私钥进行加密。由于浏览器基本都内置了CA机构的根证书,所以可以正确的验证公司证书指纹(验签),就不会有安全警告了。

但是:所有的公司其实都可以发布证书,甚至我们个人都可以随意的去发布证书。但是由于浏览器没有内置我们的根证书,当客户端浏览器收到我们个人发布的证书后,找不到根证书进行验签,浏览器就会直接警告提示,这就是之前12306打开会有警告的原因。这种个人发布的证书,其实可以通过系统设置为受信任的证书去消除这个警告。但是由于这种证书机构的权威性和安全性难以信任,大家最好不要这么做。

我们看一下百度HTTPS的证书信息:

其中比较重要的信息:

签发机构:GlobalSign Root CA;

有效日期:2018-04-03到2019-05-26之间可用;

公钥信息:RSA加密,2048位;

数字签名:带 RSA 加密的 SHA-256 ( 1.2.840.113549.1.1.11 )

绑定域名:再进行HTTPS验证时,如果当前域名和证书绑定域名不一致,也会出现警告;

URI:在线管理地址。如果当前私钥出现了风险,CA机构可以在线吊销该证书。

####5. 不可抵赖性

看起来整个过程都很安全了,但是仍存在一种风险:服务端签名后拒不承认,归咎于故障不履行合同怎么办。

解决方法是采用数字时间戳服务:DTS。

** DTS(digital time-stamp): **作用就是对于成功的电子商务应用,要求参与交易各方不能否认其行为。一般来说,数字时间戳产生的过程为:用户首先将需要加时间戳的文件用Hash算法运算形成摘要,然后将该摘要发送到DTS。DTS在加入了收到文件摘要的日期和事件信息后再对该文件进行数字签名,然后送达用户。

####6. 再次认证

我们有了数字证书保证了身份的真实性,又有了DTS提供的不可抵赖性。但是还是不能百分百确定使用私钥的就是合法持有者。有可能出现被别人盗用私钥进行交易的风险。

解决这个就需要用到强口令、认证令牌OTP、智能卡、U盾或生物特征等技术对使用私钥的当前用户进行认证,已确定其合法性。我们简单了解下很常见的U盾。

** USB Key(U盾): **刚出现时外形比较像U盘,安全性能像一面盾牌,取名U盾。其内部有一个只可写不可读的区域存储着用户的私钥(也有公钥证书),银行同样也拥有一份。当进行交易时,所有涉及到私钥的运算都在U盾内部进行,私钥不会泄露。当交易确认时,交易的详细数据会显示到U盾屏幕上,确认无误后通过物理按键确认就可以成功交易了。就算出现问题黑客也是无法控制U盾的物理按键的,用户可以及时取消避免损失。有的U盾里面还有多份证书,来支持国密算法。

** 国密算法: **国家密码局针对各种算法制定了一些列国产密码算法。具体包括:SM1对称加密算法、SM2公钥算法、SM3摘要算法、SM4对称加密算法、ZUC祖冲之算法等。这样可以对国产固件安全和数据安全进行进一步的安全控制。

## HTTPS分析

有了上面的知识,我们可以尝试去分析下HTTPS的整个过程,用Wireshark截取一次HTTPS报文:

Client Hello: 客户端发送Hello到服务端443端口,里面包含了随机数、客户端支持的加密算法、客户端的TLS版本号等;

Server Hello: 服务端回应Hello到客户端,里面包含了服务端选择的加密套件、随机数等;

Certificate: 服务端向客户端发送证书

服务端计算对称秘钥:通过ECDH算法得到对称秘钥

客户端计算对称秘钥:通过ECDH算法得到对称秘钥

开始用对称秘钥进行加密传输数据

其中我们又遇到了新的算法:DH算法

** DH(Diffie-Hellman): **1976年由Whitefield与Martin Hellman提出的一个奇妙的秘钥交换协议。这个机制的巧妙在于可以通过安全的方式使双方获得一个相同的秘钥。数学原理是基于原根的性质,如图:

*** DH算法的用处不是为了加密或解密消息,而是用于通信双方安全的交换一个相同的秘钥。 ***

** ECDH: **基于ECC(椭圆曲线密码体制)的DH秘钥交换算法,数学原理是基于椭圆曲线上的离散对数问题。

** ECDHE: **字面少了一个E,E代表了临时。在握手流程中,作为服务器端,ECDH使用证书公钥代替Pb,使用自身私钥代替Xb。这个算法时服务器不发送server key exchange报文,因为发送certificate报文时,证书本身就包含了Pb信息。

##总结

| 算法名称  | 特点 | 用处 | 常用算法名 |

| --- | :--- | :---: | ---: |

| 对称加密  | 速度快,效率高| 用于直接加密文件 | 3DES、AES、RC4 |

| 非对称加密  | 速度相对慢,但是确保安全 | 构建CA体系 | RSA、ECC |

| 散列算法 | 算出的摘要长度固定,不可逆 | 防止文件篡改 | SHA-1、SHA-2 |

| DH算法 | 安全的推导出对称秘钥 | 交换对称秘钥 | ECDH |

----

硬件安全技术——芯片安全设计技术1

一、常见的对称算法

  1. 对称密码算法
    加密和解密的秘钥是一样的
    加密过程:X是明文,K是秘钥,Y是密文
    解密过程:Y是密文,K是秘钥,X是明文
    在这里插入图片描述
  2. 常见的对称算法
  • AES (Advanced Encryption Standard)

  • DES/3DES (Data Encryption Standard)

  • SM4

  • ZUC

  • Chacha20

    按照字节来划分,前三种AES,DES, SM4可分为一类,均按照8、16字节来分组,又称为分组密码

    对于ZUC,Chacha20则没有分组,又称为流密码

  1. AES分组密码算法
    AES是目前国际使用最为广泛的对称密码算法
    其算法流程为:
    在这里插入图片描述
    AES算法有三个子类,分别为AES128、AES-192、AES-256
    区别:
    秘钥长度:128,192,256
    轮数:10,12,14
    加解密的黑盒子SBOX不同
    加解密使用轮秘钥的顺序不同

二、常见的使用模式与场景

  1. 分组密码操作模式
    ECB模式(电子密码本模式)
    在实际中,,加密数据往往大于8字节,16字节,最简单的方式就是将数据分割为若干个分组后,对这些分组数据分别进行加密,也就是ECB模式。

    关于操作模式说明:对于很长的数据,如1M,那么使用SM4,AES等对称密码算法,输入只能为固定字节数,如8字节或16字节。那么最简单的解决方式即为ECB模式。
    在这里插入图片描述
    ECB模式的缺点:采用ECB模式及每个数据都分别进行加密,各个加密之间互不干扰,因此,可以从密文中可以看出对应的结构变化趋势,这对于抵抗攻击来说是不安全的。
    类似于一个模糊的图片,虽然被加密了,但还是能够看出其中的一些信息:
    在这里插入图片描述

  2. CBC模式
    为了解决ECB模式的缺点,此外还有其他的模式,如CBC模式:
    在这里插入图片描述
    对于CBC加密过程,每一个分组异或后会与上一个得到的结果,在进行下一次的黑盒运算。这样可以打乱每一个分组的结构信息。

  3. 常见的对称算法加密模式

  • ECB-Electronic Code Book
  • CBC-Cipher Block Chaining
  • CTR-CounTeR
  • GCM-Galois/Counter,用于网络通信
  • XTS-XEX-based Tweaked-codebook mode with ciphertext Stealing,用于数据存储
  1. 数据存储
    安卓7.0以及更高的版本支持文件级别的加密(FBE)。采用文件级加密时,可以使用不同的秘钥对不同的文件进行加密,也可以对加密的文件单独解密。
    在这里插入图片描述

    所有加密都基于采用XTS模式的AES-256算法。内核的加密性能必须要在使用AES XTS时至少达到50MB/s,以确保良好的用户体验。

    因为在使用数据存储加密时,会带来性能上的瓶颈,造成性能变差,因此需要对加密的算法提出合理的要求来达到良好的用户体验。

  2. 数据存储的常用模式-XTS
    在这里插入图片描述

特点:

  • NIST SP800-38E (标准化模式)
  • 无需IV,初始向量(与CBC模式不同)
  • i为sector number(与数据处理的位置相关)
  • 可以随机访问
  • 可以进行并行处理
  1. 网络通信
  • SSL/TLS(Secure Socket Layer 安全套接层)是基于HTTPS下的一个协议加密层
  • TLS通信中数据都会使用对称密码算法进行加密,密码算法的种类在握手阶段进行确认
  • TLS-AES-128-GCM-SHA256为TLS v1.3的必选算法
    在这里插入图片描述
  1. 网络通信加密中常见的模式——GCM模式
    在这里插入图片描述
    特点
  • NIST SP800-38D(标准)
  • 即可以对数据加密,也可以用于提供校验值(auth tag)
  • 处理速度可以比CBC快,因为加解密部分可以并行处理。

三、常见的抗攻击设计

  1. 侧信道攻击防护
    思想1:对中间值进行随机化或掩码。
    在这里插入图片描述
    中间值进行随机化处理,往往通过对中间值异或或掩码来达到随机化中间过程的目的:
  • 线性操作往往使用布尔掩码

  • 非线性操作使用乘法掩码、随机掩码和国定值掩码

    思想2:增加随机延迟或伪操作
    在功耗上无法区别延迟或者伪操作,使得攻击者无法对齐功耗曲线
    在这里插入图片描述

  1. FI防护(错误注入分析防护)
  • 多次操作校验是否计算结果相同

    • 可以使用加密后解密来判断明文是否一致,对运算前后几轮需要重点关注
  • 关键参数保存CRC

    • 例如秘钥的CRC值可以由硬件保存,不定时计算目前使用的秘钥CRC值是否一致

四、对称密码算法实现

  1. SBOX黑盒设计实现策略
    硬件上游两种主要实现方案:
    a. 使用查找表
    b. 二项式求逆
    在这里插入图片描述

    SMIC55, 100MHz,上面的是查找表实现,下面的是二项式求逆实现。可以看到查找表实现的面积大约为其一倍。一般是频率越高,二项式求逆的面积越小,因此,需要权衡面积和性能的关系(trade-off)。

  2. 轮秘钥的计算逻辑
    使用两个寄存器来存储轮秘钥,regA存储第一轮或最后一轮轮秘钥,regB用于存储当前的轮秘钥(非高速应用中)

    需要有标识标志regA存储的为第一轮还是最后一轮轮秘钥

    在一个时钟周期只进行一轮(或较少轮数)运算时,避免在一开始就讲坤秘钥全部扩展完成,占用大量寄存器。

  3. 密钥管理
    关键密钥:关键密钥由硬件管理,软件不可见或控制访问权限,例如根密钥

    应用密钥:应用密钥由软件协调管理,增加灵活性,例如会话秘钥

4.指令集加速
通过查看CPU信息来确认是否支持指令集加速

user@root:grep aes -o -ml /proc/cpuinfo
aes

openssl 1.0.1版本后,运行时期自动检测是否支持AES-NI
只有使用openssl EVP的接口,定义函数才能使用AES-NI

如果CPU支持AES-NI指令扩展,其性能如下:
在这里插入图片描述

五、总结:

  1. 根据应用场景选择适合的算法和模式,根据标准规范使用
  2. 大多数算法还是可以使用空间换时间的方式进行加速
  3. 物理安全设计包含前端、后端整个IC设计流程,安全性措施在设计完成后还需要经过过实验室测试
  4. 常用的硬件对密码算法往往有加速支持

以上是关于常见密码技术简介的主要内容,如果未能解决你的问题,请参考以下文章

密码技术(十一)之密钥

密码技术

硬件安全技术——芯片安全设计技术2

硬件安全技术——芯片安全设计技术2

硬件安全技术——芯片安全设计技术2

密码技术的公开密码