数据加密和安全认证的一些概念

为了防止数据在通信过程中被侦听、篡改,产生了数据加密的技术。已知的两个通信主体之间可以通过预先设定的密钥进行数据加密,但长时间使用相同的密钥,必然存在泄密的风险。对于大容量的分布式系统,管理这些密钥并定时更新从管理上是不现实的。因此,对于数据加密,前人已经考虑协商临时密钥的方法。

就像我们看的很多的理论文章一样,总是举下面的例子说明:Bob和Alice要建立一个加密对话,Bob与Alice首先协商一个临时密钥,然后用这个密钥对对话过程的数据进行加密。这基本上就是非对称加密的概念。在对话过程中,临时密钥所保护的对话过程,是一个对称加密过程,也就是双方都知道密钥的情况所进行的对话。一次对话完成后,这个临时密钥就失效了。当需要再次对话时,需要再次协商密钥。

因此,我们注意到上述这种非对称加密让人困惑的几个地方:

  • 如果Bob和Alice协商密钥的过程被监听,那么临时密钥就泄露了,后续的加密不就失效了么?
  • Bob如何知道对方是Alice,Alice又如何知道与自己协商密钥的是Bob呢?

实际上这就是加密和认证的两个最关键问题。下面通过介绍一些基本概念,逐步来解开这些谜团。

1. 什么是Hash(哈希)?

密码Hash函数是一种将任意大小的数据映射到固定大小的位串(Hash函数)的数学算法,该函数也被设计为单向函数,即不可逆函数。

输入数据通常称为消息,而输出(Hash值或Hash)通常称为消息摘要或简称为摘要。

数据加密和安全认证的一些概念_第1张图片
工作中的加密Hash函数(特别是SHA-1),输入中的一个小改变(单词“over”)会大大改变输出(摘要)。这就是所谓的雪崩效应。

1.1 Hash的应用:

  • 验证文件或消息的完整性
  • 密码验证
  • 文件或数据标识符
  • 伪随机生成和密钥推导

1.2 加密哈希算法的种类:

  • 1991年提出的MD5 - 128位
  • 安全哈希算法SHA-1,160bit,由NSA,NIST FIPS PUB 180-4于1995年设计
  • SHA-2,由六个Hash函数组成,其中的摘要(Hash值)为224,256,384或512位:SHA-224,SHA-256,SHA-384,SHA-512,SHA-512 / 224,SHA-512/256,由NSA,NIST FIPS PUB 180-4于2001年设计
  • SHA-3,包括2015年发布的SHA3-224,SHA3-256,SHA3-384,SHA3-512,SHAKE128,SHAKE256,NIST FIPS PUB 202

1.3 在哪里可以得到这些算法?

MD5,SHA-256,SHA-384都有开源代码。搜索“加密代码”

2. 什么是对称加密算法?

对称加密是两个或更多方之间通过共享的密钥进行加密,可用于维护私人信息链接。与公钥加密(也称为非对称密钥加密)相比,双方都可以访问密钥的这一要求是对称密钥加密的主要缺点之一。

2.1 常用算法

  • AES - 2001年12月由NIST批准的高级加密标准算法使用128位块(与流加密相比)。
  • Blowfish
  • DES(3DES)
  • Serpent
  • Twofish

2.2 加密过程,就像魔方一样

  • 如果有16个字节b0,b1,...,b15,则这些字节表示为这个矩阵:
  • 用于AES密码的密钥大小指定将输入(称为明文)转换为最终输出(称为密文)的转换所循环的次数(请相像成打乱一个魔方,每旋转一次)
    对于128位密钥,重复10个周期。
    对于192位密钥,重复12个周期。
    对于256位密钥,重复14个周期。

  • 每轮包含几个处理步骤,每个处理步骤都包含四个相似但不同的阶段,其中包括依赖于加密密钥本身的阶段。使用相同的加密密钥应用一组反向回合将密文转换回原始明文。

2.3 对称加密的标准

  • FIPS PUB 197:高级加密标准(AES)
  • ISO / IEC 18033-3:信息技术 - 安全技术 - 加密算法 - 第3部分:分组密码

2.4 什么是操作模式(Operation Mode)?

在密码学中,针对任意长度的消息,“操作模式”是使用分组密码进行加密的算法,也就是块加密。

数据加密和安全认证的一些概念_第2张图片
块加密

最早的操作模式可追溯到1981年,并在FIPS 81,DES运作模式中进行了规定以下几种

  • ECB,
  • CBC,
  • OFB,
  • CFB。

NIST修改了其批准的操作模式列表,将AES作为分组密码并加入

  • CTR模式[1],首次引入了Counter的概念,每个块的密钥按照规则变化。

2010年NIST补充了

  • XTS-AES [2]

分组密码模式ECB,CBC,OFB,CFB,CTR和XTS提供机密性,但它们不能防止意外修改或恶意篡改。可以使用单独的消息验证代码(如CBC-MAC)或数字签名来检测修改或篡改。

  • HMAC [3]
  • CMAC [4]
  • GMAC [5]

将机密性和数据完整性组合成单一密码原语的模式。这些模式被称为“认证加密”,AE或“authenc”。AE模式的例子是

  • CCM(SP800-38C),
  • GCM(SP800-38D),
  • CWC,
  • EAX,
  • IAPM,
  • OCB

[1] SP800-38A,分组密码操作模式推荐。
[2] SP800-38E,分组密码操作模式建议:存储设备机密性的XTS-AES模式。
[3]于2002年被批准为FIPS 198,
2005年在SP800-38B发布的Keyed -Hash Message Authentication Code(HMAC)[4]中提出了分组密码操作模式推荐:CMAC认证模式
[5]根据SP800-38D,分组密码操作模式推荐:GCM/计数器模式和GMAC。

3. 为什么要采用非对称加密?

3.1 公钥和私钥对。为什么它是不对称的?

公钥加密,其中用接收者的公钥加密消息。如果接收方不具备正确的私钥,那么就不能解密该消息。因此密钥的所有者通过分发公钥给关联的人,对方使用这个公钥加密,建立协商机制,对方反馈的消息必须使用私钥才能解密,以确保通信的机密性。

数字签名,其中邮件是使用发件人的私钥签名的,授权访问邮件的收件方,使用发件人的公钥进行验证。此验证证明了发件人使用的是私钥加密,公钥关联的人员使用公钥解密,通过这种方法,确保消息没有被篡改。因为对消息的任何操纵都会导致对编码消息摘要的改变,否则在发送者和接收者之间数字签名会保持不变。

数据加密和安全认证的一些概念_第3张图片
公钥与私钥

3.2 什么是椭圆曲线?

y ^ 2 = x ^ 3 + ax + b , 其中a和b是实数。这种方程称为Weierstrass方程。

形式上,椭圆曲线是属于一类的光滑的投影代数曲线,其上有一个指定的点O.椭圆曲线实际上是一个阿贝尔变体 - 也就是说,曲线上的点满足代数定义的乘法交换律。因此它也被称为一个阿贝尔集 - 并且O作为其唯一标识。通常,曲线本身称为椭圆曲线,点O实际上是投影平面上的“无穷远点”。

ECC曲线中的公钥和私钥是什么?

对于“Q”点,“Q”的坐标(Xq,Yq)就是公钥。私钥“d”在数学上与基点“G”有关,G = dQ

数据加密和安全认证的一些概念_第4张图片
椭圆曲线

3.3 NIST椭圆曲线[FIPS186-2]

  • P-192,
  • P-224,
  • 建议使用P-256,NSA Suite B.
  • P-384,
  • P-521

3.4 算法

  • ECDSA - 椭圆曲线数字签名算法[FIPS186-3]
  • ECDH - 椭圆曲线Diffie-Hellman [SP800-56A]

从https://www.iad.gov/iad/library/ia-guidance/ia-solutions-for-classified/algorithm-guidance/index.cfm获取相关文件

3.5 重点:Diffie-Hellman算法

假设Alice想发送一个签名的消息给Bob。最初,他们必须同意曲线参数(CURVE,G,n)。除了曲线的场和方程之外,我们需要“G”曲线上的主要阶的基点;

数据加密和安全认证的一些概念_第5张图片
在预定义的曲线,一方用自己私钥和对方公钥,以及一个随机大数,就可以确定一条射线,与椭圆产生一个交点;接受方用私钥和发送方的公钥可以找到射线与椭圆曲线的交点,交点Hash的一部分就是公共密钥

n是点G的乘法阶。Alice创建一个密钥对,由在区间[1,n]中随机选择的私有密钥整数dA组成,即:1 =< dA <= n,由此创建的公共密钥曲线点QA = dA G

对于Alice签署消息m,她遵循以下步骤:

  • 计算e = Hash(m),其中HASH是加密Hash函数,如SHA-2
  • 设z是e的Ln最左边的比特,其中Ln是组次序n的比特长度。
    从[1,n]中选择一个密码安全的随机整数k。
    计算曲线点(x1,y1)= kG。
  • 计算r = X1 mod n。如果r = 0,返回重新生成随机数.
    计算s = k-1(z + rdA)mod n。如果s = 0,返回重新生成随机数.
    签名是成对(r,s)。

为了验证Alice的签名,他必须有一个她的公钥曲线点QA的副本。Bob可以验证QA是一个有效的曲线点,如下所示:

  • 检查QA是否与标识元素O不相等,并且其坐标是否有效
  • 检查QA是否位于曲线上
  • 检查n QA <> O

之后,Bob遵循以下步骤:

  • 验证r和s是[1,n-1]中的整数。否则,签名无效。
  • 计算e = HASH(m),其中HASH与签名生成中使用的函数相同。
    设z是e的Ln最左边的位。
    计算w = s-1mod n。
    计算u1 = zw mod n和u2 = rw mod n。
    计算曲线点(x1,y1)= u1 G + u2 QA。
    如果r = x1 mod n,签名有效,否则无效。

假设Alice想要与Bob建立共享密钥,但唯一可用于他们的信道可能会被第三方窃听。最初,域参数(p,a,b,G,n,h)(即在素数情况下(m,f(x),a,b,G,n,h)或二进制情况)必须达成一致。另外,每一方都必须有一个适用于椭圆曲线密码学的密钥对,它由私钥“d”(区间[1,n-1]中随机选择的整数)和公钥“Q”(其中Q = dG,即将点“G”加在一起d次的结果)。设Alice的密钥对为(dA,QA),Bob的密钥对为(dB,QB)。在执行协议之前,每方都必须知道对方的公钥。

Alice计算(xk,yk)= dAQB。Bob计算(xk,yk)= dBQA。共享秘密是xk(点的x坐标)。大多数基于ECDH的标准化协议通过使用一些基于Hash的密钥导出函数来导出对称密钥。

由双方计算的共享秘密是相等的,因为dAQB = dA dBG = dB dAG = dBQA。
关于Alice最初公开的私人密钥的唯一信息是她的公钥。因此除Alice之外的任何一方都不能确定Alice的私钥,除非该方法能解决椭圆曲线离散对数问题。Bob的私钥也同样安全。除Alice或Bob以外的任何一方都不能计算共享密钥,除非该方能解决椭圆曲线Diffie-Hellman问题。

前面说了那么多,其实关键只有上面这一段。因为数学上dAQB = dBQA,Bob的公钥乘Alice的私钥与相反的一对乘积相等,求解等式两边都指向曲线上的一个交点,因此发起方,随机确定一个因子后,Bob和Alice将得到相同的结果,这个结果根本不需要在网络上传输,双方即已经得到了密钥!Get it?没关系~根本不需要每个人都懂得其中复杂的数学原理,我们只要知道密钥协商的关键是:

  • 公钥私钥对
  • 私钥必须绝对安全
  • 产生密钥的因子是一个随机数,因此每个会话密钥会发生变化

3.6 椭圆曲线随机数生成过程中可能的后门程序

一旦确定公钥和私钥对,能够攻破加密的唯一后门就是随机数的生成了。美国国家标准与技术研究院已经发布了一系列“确定性随机数字发生器”,它推荐为NIST SP 800-90。其中随机数生成器Dual_EC_DRBG受到了国家安全局NSA的特别青睐:Dual_EC_DRBG使用椭圆曲线技术,并包含一组推荐的常量。

令人震惊的是:2007年8月,微软的Dan Shumow和Niels Ferguson表示,常量的构建方式可以成为算法创建一个秘密后门,也就是说NSA可能会掌握随机数建立的规则,私钥将不再安全,对话过程就会被解密并监控(因此NSA的核心技术就在于此,并不是屈打成招,而是完全靠信息战的策略)。

据路透社报道,爱德华斯诺登在2013年发布的文件显示,NSA已经向RSA安全局支付了1000万美元,使其Dual_EC_DRBG成为其加密软件的默认设置,并进一步担忧该算法可能包含NSA的后门程序。

基于这些担忧,2014年,NIST从其关于随机数生成器的指导草案中撤消了Dual_EC_DRBG,建议“尽快将Dual_EC_DRBG目前的用户转换为剩下的三种核准算法之一”。

另外一个著名的案例是:2010年12月,一个自称fail0verflow的组织宣布攻破了索尼用于为PlayStation 3游戏机签名软件的椭圆曲线数字签名算法(ECDSA)私钥。后来查明,由于索尼未能为每个签名产生一个新的随机数,导致被暴力破解成功。

4. 传输层安全性(TLS)

客户端 - 服务器应用程序使用TLS协议以防止窃听和篡改的方式通过网络进行通信。

由于应用程序可以使用或不使用TLS(或SSL)进行通信,因此客户机必须向服务器指示TLS连接的设置。目前区分的方式是使用不同的端口号,例如用于HTTPS使用443端口,以将连接切换到TLS;在使用邮件和新闻协议时,使用995或465端口,发出STARTTLS请求。

一旦客户端和服务器同意使用TLS,他们就通过握手过程协商一个有状态的连接。所述的协议与上面的描述基本相同,主体的通信过程则是使用协商好的密钥进行的对称密钥进行加密。

当客户端连接到启用TLS的服务器请求安全连接并且客户端列出支持的密码套件(密码和Hash函数)时,握手开始。从这个列表中,服务器选择一个它也支持的密码和Hash函数,并通知客户这个决定。服务器通常会以数字证书的形式提供身份证明。证书包含服务器名称,证明证书真实性的可信证书颁发机构(CA)以及服务器的公用加密密钥。客户在继续之前确认证书的有效性。
要生成用于安全连接的会话密钥,客户端要么:

  • 用服务器的公共密钥加密一个随机数并将结果发送给服务器(只有服务器应该能够用其私钥解密); 双方然后使用随机数生成一个唯一的会话密钥,在以便会话期间进行后续的数据加密解密状语从句:
  • 使用的Diffie-Hellman密钥交换来安全地生成随机唯一的加密和解密会话密钥,该密钥具有前向保密的附加属性:如果服务器的私钥在将来被披露,则它不能用于解密当前会话,该即使被会话拦截第三方并记录

握手结束并开始安全连接,使用会话密钥加密和解密 。直到连接关闭如果上述步骤中的任何一个失败,则TLS握手失败,并且不会创建连接。

TLS和SSL并不适合整合到OSI模型或TCP / IP模型的任何一层中。TLS在一些可靠的传输协议(例如TCP)上运行,“这意味着它位于传输层之上,与底层具体的传输无关,不一定是使用Ethernet,这也就是很多串行同样适用TLS的原因。它为更高层提供加密,这通常是表示层的功能。然而,即使使用TLS的应用程序必须主动控制启动TLS握手和处理交换的身份验证证书,应用程序通常使用TLS就好像它是传输层一样。

5. Bob和Alice实现安全通信了么?

目前有很多行业已经使用这些成熟的技术对数据进行加密,对身份进行安全认证。假设Bob是金融机构,会发放一个U盾(usb dongle)给Alice,实际上是金融机构发放给Alice并被金融机构认可的数字证书,他包含银行的证书公钥和艾丽斯的公钥和私钥。每次使用时,插入ü盾,与金融机构协商每次会话的加密密钥,进入对称加密状态。因此,Bob和Alice完美实现了加密通信。

小结

虽然这篇文章被“输配电世界”标记为“原创”,但作者十分忐忑,因为绝大多数内容都是已有公开的表述,而且对于深奥的数学理论远远没有达到理解。但工业控制里的众多应用,恰恰需要建立在这些公开的信息之上。网络安全说起来很奇妙,乍一看似乎应该是一个特别封闭的系统,看不透的黑盒,但实际上,往往技术越透明才越安全。

#CyberSecurity, #Encryption


长按二维码关注“输配电世界”微信公众号

你可能感兴趣的:(数据加密和安全认证的一些概念)