《白帽子讲Web 安全》之密码算法与随机数(万字详细版,一文学会)

目录

引言

一、密码学基础概念

二、加密、编码和哈希的基本概念

2.1密码学的悠久历史与现代应用

2.2易混淆概念的清晰辨析

三、加密算法分类与要点

3.1对称加密算法

3.2非对称加密算法

3.3分组填充和 Padding Oracle 攻击

四、加密算法的安全运用与风险防范

4.1安全使用原则

4.2攻击类型及防范

五、安全使用哈希函数

5.1哈希函数的原理与应用

5.2HMAC(哈希消息认证码)

六、关于彩虹表

七、HTTPS 协议详解

(一)协议构成

(二)发展历程

(三)相关技术

HTTP 严格传输安全(HSTS)

公钥固定(Public Key Pinning)

证书透明度(Certificate Transparency)

八、安全使用随机数

8.1随机数的重要性​

8.2伪随机数​

九、密钥管理

十、信息隐藏技术

10.1隐写术​

10.2数字水印​

十一、加密算法与密钥管理最佳实践

11.1分组加密避免使用 ECB 模式​

11.2慎用流密码​

11.3使用足够长度密钥的算法​

11.4淘汰 MD5 算法,改用 SHA2 系列哈希函数​

11.5不同操作不要使用相同密钥​

11.6哈希加盐且分组加密的初始化向量随机产生且不复用​

11.7使用经过检验的加密算法及库​

11.8假设代码会被公开,不要依赖系统的保密性​

十二、总结与建议


引言

在当今数字化时代,Web 安全至关重要,而密码算法与随机数在其中扮演着核心角色。吴翰清的《白帽子讲 web 安全》一书深入探讨了这些关键领域,为我们理解和保障 Web 安全提供了宝贵的见解。

一、密码学基础概念

密码学的核心目标是保障信息安全,其发展历程见证了人类对信息保护的不断探索。在 Web 应用中,加密、编码和哈希这三个概念虽然常见,但对于初学者来说极易混淆。加密通过算法和密钥将明文转化为密文,有效防止信息被非法获取;编码侧重于数据的表示和传输,方便数据在不同环境中的处理;哈希则将数据映射为哈希值,用于校验数据完整性和防止数据被篡改,尽管存在哈希碰撞的可能性,但通过合理的设计和应用,仍然能够在 Web 安全中发挥重要作用。


二、加密、编码和哈希的基本概念

2.1密码学的悠久历史与现代应用

密码学的起源可追溯至古希腊的密码棒,这种早期加密方式开启了人类保护信息安全的历程。在现代 Web 应用中,密码算法无处不在。​

  1. Cookie 信息加密:以在线购物网站为例,当用户登录并浏览商品时,网站会在用户浏览器中存储 Cookie,其中可能包含用户的登录状态、购物车信息等。为防止这些隐私数据被窃取,网站会对 Cookie 信息进行加密。比如,某电商网站使用 AES 加密算法,将用户的购物车商品列表加密后存储在 Cookie 中。即使黑客截获了该 Cookie,由于没有解密密钥,也无法获取其中的商品信息。​
  2. 密码存储的哈希处理:许多社交平台在存储用户密码时采用哈希处理。例如,用户注册时设置密码 “myPassword123”,平台使用 SHA - 256 哈希函数对其进行处理,得到一串不可逆的哈希值,如“5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8”。当用户登录时,平台再次对用户输入的密码进行哈希计算,并与存储的哈希值比对,以验证密码的正确性。即使平台数据库泄露,黑客也难以通过哈希值反推出用户的原始密码。​
  3. 数据真实性校验的非对称加密:在电子政务系统中,政府部门与企业之间进行数据交互时,常借助非对称加密确保数据真实性。例如,企业向政府部门提交一份重要的项目申报文件,企业先用自己的私钥对文件内容进行签名,然后将文件和签名一起发送给政府部门。政府部门收到后,使用企业的公钥验证签名。若签名验证通过,说明文件在传输过程中未被篡改且确实来自该企业,因为只有该企业拥有其私钥。

2.2易混淆概念的清晰辨析

  1. 加密:加密是将明文通过特定算法和密钥转换为不可读密文的过程。只有拥有相应密钥的接收者才能将密文解密还原为明文。例如,在电子邮件通信中,用户发送的邮件内容会被加密,以防止中途被第三方截获并读取。加密算法多种多样,常见的有 AES(高级加密标准)等,它通过复杂的数学运算对数据进行加密,确保信息的保密性。
  2. 编码:编码主要是为了方便数据在不同系统或环境中的表示与传输,本身并不具备保密功能。比如 URL 编码,它将 URL 中的特殊字符转换为特定的编码形式,以便在网络中准确传输。以 “http://example.com/?query=上海” 为例,其中的 “上海” 会被编码为 “% E4% B8%8A% E6% B5% B7”,这样可以避免特殊字符在传输过程中引发歧义,但数据本身的内容并未得到保护。
  3. 哈希:哈希是将任意长度的数据映射为固定长度哈希值的过程。哈希值常用于数据完整性校验和防篡改。由于哈希函数的特性,即使原始数据只有微小的变化,其哈希值也会截然不同。然而,哈希碰撞是一个需要关注的问题,即不同的输入可能产生相同的哈希值。在开源软件社区,开发者发布软件版本时会提供软件包的哈希值(如 SHA - 256)。用户下载软件包后,可使用哈希计算工具算出软件包的哈希值,并与开发者提供的哈希值比对。比如,某软件包的原始哈希值为 “c5f4a9d8e7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2”,若用户下载的软件包在传输过程中被恶意篡改,重新计算的哈希值会与原始值不同,用户即可得知软件包已被修改,从而避免使用被篡改的软件。

三、加密算法分类与要点

3.1对称加密算法

  1. 流加密算法:流加密算法中,加密和解密双方使用相同的伪随机数据流作为密钥。在实际应用中,常采用位异或操作来实现加密。常见的流加密算法有 RC4、Salsa20、SEAL 等。例如,假设要加密一个字节数据 10101010,伪随机数据流(密钥流)为 01010101,通过位异或操作,加密后的密文为 11111111。接收方用相同的伪随机数据流与密文进行位异或,即 11111111⊕01010101 = 10101010,从而还原出明文。
  2. 分组加密算法:分组加密算法以 “分组” 为基本操作单位,不同算法的分组长度有所不同。典型的分组加密算法包括 DES、3 - DES、Blowfish、IDEA、AES 等。常见的加密模式有 ECB(电码簿模式)和 CBC(密码分组链接模式)。

ECB 模式:每个分组独立加密,这种模式存在安全隐患。因为相同的明文分组会加密成相同的密文分组,攻击者可能利用这一特点进行数据篡改。例如,若攻击者知道某个密文分组对应的明文是 “账号”,且在其他地方发现相同的密文分组,就可以推测此处的明文也是 “账号”,甚至可以替换密文分组来篡改数据。在简单的文本加密示例中,假设有一段明文 “apple banana cherry”,分组长度设为 4 个字符。使用 ECB 模式的分组加密算法(如 DES)加密时,“appl”“e ban”“ana ”“cherry” 会分别独立加密。若攻击者知道某个密文分组对应 “appl”,当在其他地方发现相同密文分组时,就能推测此处明文也是 “appl”,甚至可替换密文分组篡改数据。这种模式在实际应用中存在较大安全风险,现已较少单独使用。


CBC 模式:通过将分组串联,并引入初始化向量 IV 来增强安全性。在加密第一个分组时,先将明文分组与 IV 进行异或,然后再进行加密。后续分组则是前一个密文分组与当前明文分组异或后再加密。每次加密需要使用不同的 IV,这样即使相同的明文分组在不同位置出现,对应的密文也会不同,从而提高了安全性。在网络文件传输加密场景中,若要传输一个大文件,采用 CBC 模式的 AES 算法进行加密。首先,生成一个随机的初始化向量 IV,如 “1010101010101010”。文件按 16 字节分组,第一个分组 “file content1” 与 IV 异或后加密,得到密文分组 C1。后续分组如 “file content2” 与前一个密文分组 C1 异或后加密,得到密文分组 C2,以此类推。由于每次加密使用不同 IV,即使文件中存在重复的明文分组,对应的密文分组也不同,大大提高了安全性。

3.2非对称加密算法

非对称加密算法在加密和解密过程中分别使用不同的密钥,即公钥和私钥。常用的非对称加密算法 RSA、DSA(数字签名算法)、ECC(椭圆曲线加密)、DH(Diffie - Hellman)等。这种算法适用于安全通信场景,能够有效解决对称加密中密钥共享的难题。同时,它还可用于数字签名,确保信息的真实性与不可抵赖性。例如,在电子合同签署过程中,签署方使用自己的私钥对合同内容的哈希值进行签名,接收方使用签署方的公钥来验证签名的真实性。如果签名验证通过,说明合同内容未被篡改,且确实是由声称的签署方签署的,因为只有签署方拥有其私钥。

3.3分组填充和 Padding Oracle 攻击

在分组加密时,如果明文长度不是分组长度的整数倍,就需要进行填充。不同的填充方式有不同的标准。Padding Oracle 攻击利用了填充机制的漏洞,攻击者在不知道密钥的情况下可以解密信息。例如,2010 年 BlackHat 大会上公布的对 Oracle 的 Padding Oracle 漏洞攻击,攻击者通过向服务器发送精心构造的密文,观察服务器返回的错误信息(如填充错误提示),经过多次尝试,有可能推算出正确的填充值,进而逐步解密原始明文。

四、加密算法的安全运用与风险防范

4.1安全使用原则

  1. 选择成熟算法:在任何应用场景中,都不应自行发明加密算法,而应选用经过时间检验的成熟算法。例如 AES 算法,经过了广泛的研究和实践验证,具有较高的安全性。自行开发的加密算法可能存在未被发现的安全漏洞,容易被攻击者利用。注意算法限制和要点​。
  2. 哈希结合 Salt 和随机 IV:在用户密码存储方面,许多互联网公司采用哈希结合 Salt 的方式。如腾讯在存储用户密码时,为每个用户生成一个随机 Salt 值,如 “unique_salt123”,将用户密码 “user_password” 与 Salt 拼接后进行哈希计算,即 Hash (“user_passwordunique_salt123”)。在分组加密中,如在 VPN 通信中,每次加密都随机生成初始化向量 IV,且不可复用,增强了加密的安全性。
  3. 淘汰 MD5 算法:在软件版本发布场景中,过去软件开发者常用 MD5 算法生成软件包的哈希值。但由于 MD5 算法存在严重安全缺陷,易产生哈希碰撞。例如,恶意软件开发者可通过精心构造两个不同的软件包,使其 MD5 哈希值相同,将恶意软件伪装成正常软件发布。如今,软件开发者已普遍改用 SHA2 系列哈希函数,如 SHA - 256,提高软件包哈希值的安全性。​
  4. 确保密钥长度:在金融数据加密领域,分组加密的密钥长度至关重要。如银行在加密客户账户信息时,使用 AES - 256 算法,其密钥长度为 256 位,大大增加了破解难度。相比之下,若使用较短密钥长度的算法,如早期的 DES 算法(密钥长度 56 位),已能被现代计算能力在较短时间内破解。对于 RSA 密钥长度,在数字证书认证中心,为保障证书安全性,RSA 密钥长度通常大于 2048 位。​
  5. 谨慎使用流密码:在物联网设备通信中,若使用流密码,对密钥流生成要求极高。例如,智能门锁与手机 APP 通信时,若使用的流密码生成的密钥流具有可预测性,黑客可能通过分析通信数据,预测出后续密钥流,从而破解通信内容,入侵智能门锁系统。所以,在物联网设备通信中,需谨慎选择和使用流密码,确保密钥流生成的不可预测性。​
  6. 避免 ECB 模式:在文件加密存储场景中,若使用 ECB 模式加密文件,如存储用户的重要文档。由于 ECB 模式的特性,相同内容的文件块会加密成相同密文块。攻击者若获取到加密文件,可能通过分析密文块,推测出文件结构和部分内容,甚至篡改文件。因此,应优先选择 CBC 等更安全模式,如一些云存储服务提供商在对用户文件加密时,采用 CBC 模式的 AES 算法,确保文件安全。​

4.2攻击类型及防范

  1. Padding Oracle 攻击防范:在一些 Web 应用的用户登录认证系统中,若使用分组加密存储用户密码哈希值,需防范 Padding Oracle 攻击。服务器应严格控制返回给用户的错误信息,避免泄露填充是否正确的信息。同时,采用安全的填充方式,并在服务器端严格校验填充过程。例如,某知名社交平台在升级系统时,加强了对填充机制的安全防护,杜绝了 Padding Oracle 攻击的可能性,保障了用户密码安全。
  2. BEAST 攻击防范:在早期的 SSL 3.0 协议应用中,存在 BEAST 攻击风险。例如,一些旧版本的在线银行系统曾使用 SSL 3.0 协议,攻击者可利用该协议中 CBC 模式的缺陷获取加密信息。为防范此类攻击,各大浏览器和服务器软件不断更新升级相关协议版本。如今,主流浏览器已停止支持 SSL 3.0 协议,在线银行系统也升级到 TLS 1.2 或更高版本,有效防范了 BEAST 攻击。

五、安全使用哈希函数

5.1哈希函数的原理与应用

哈希函数将任意长度的数据映射为固定长度的哈希值。理想的哈希函数应使输入的微小变动产生差异很大的哈希值。哈希常用于数据防篡改和校验。例如,在文件存储系统中,为了确保文件的完整性,会计算并存储文件的哈希值。当需要验证文件是否被修改时,重新计算文件的哈希值并与之前存储的值进行比对。如果哈希值相同,说明文件未被修改;如果不同,则表明文件已被篡改。

5.2HMAC(哈希消息认证码)

HMAC 是一种安全使用哈希函数的方式,它结合了密钥和哈希算法,提供数据完整性和认证功能。HMAC 在计算时,先将密钥与消息按照特定的方式组合,然后再使用哈希函数进行计算。HMAC 广泛应用于网络通信和身份验证中,能够抵御中间人攻击等。例如,在客户端与服务器通信时,客户端使用与服务器共享的密钥和要发送的消息计算 HMAC 值,将消息和 HMAC 值一起发送给服务器。服务器接收后,使用相同的密钥和消息重新计算 HMAC 值,如果与接收到的 HMAC 值一致,说明消息在传输过程中未被篡改,且发送方的身份得到了验证。

六、关于彩虹表

彩虹表是一种用于破解哈希密码的技术,它通过预先计算大量哈希值和对应明文的组合并存储成表。在破解哈希密码时,攻击者直接查表,如果哈希值在表中存在,就可以获取对应的明文。

然而,彩虹表存在数据量大、更新难等问题。随着哈希算法的改进和密码策略的强化,彩虹表需要不断更新才能保持破解效率,但更新成本较高。而且,存储大量的哈希值和明文组合需要占用巨大的存储空间。

为了应对彩虹表攻击,可以使用加盐(salt)等技术增加破解的难度。加盐后,哈希值与原始密码不再是简单的一一对应关系,即使彩虹表中存在某个哈希值,由于不知道 Salt,也无法准确获取原始密码。

七、HTTPS 协议详解

(一)协议构成

HTTPS 是在 HTTP 协议的基础上,通过 SSL/TLS 协议实现加密传输,从而保障数据的机密性和完整性。

SSL/TLS 协议位于应用层和传输层之间,对 HTTP 协议进行加密包装。当用户在浏览器中访问 HTTPS 网站时,浏览器与网站服务器之间的通信首先通过 SSL/TLS 协议建立安全连接,然后 HTTP 请求和响应数据在这个安全连接中传输,防止数据被第三方窃取或篡改。

(二)发展历程

SSL 协议经历了多个版本的演进,但存在诸多安全漏洞。

早期的 SSL 协议在加密算法强度、密钥交换方式等方面存在不足,容易受到攻击。例如,SSL 3.0 协议存在 POODLE 漏洞,攻击者可以通过中间人攻击获取加密数据。

TLS 协议在 SSL 的基础上发展而来,不断增强安全性。TLS 1.3 完全废弃了 RSA 交换密钥的方式,采用更安全的密钥交换算法,如 ECDHE(椭圆曲线迪菲 - 赫尔曼密钥交换),提升了协议的安全性。目前,Chrome 浏览器已停止支持 TLS 1.0 和 TLS 1.1,建议使用 TLS 1.2 或 TLS 1.3 版本,以保障用户通信的安全。许多网站也纷纷升级到 TLS 1.2 及以上版本,如淘宝、京东等电商平台,保障了用户的网络购物安全。

(三)相关技术

HTTP 严格传输安全(HSTS)

HSTS 用于解决用户直接通过浏览器地址栏输入不带协议的网址时,默认使用 HTTP 协议访问所带来的安全风险。Web 应用通过在响应头中加入 HSTS 指令,告知浏览器在一定时间内强制使用 HTTPS 协议访问该网站。

例如,网站在响应头中设置 “Strict - Transport - Security: max - age = 63072000; includeSubDomains”,表示在未来两年(63072000 秒)内,浏览器访问该网站及其子域名都必须使用 HTTPS 协议。同时,还有 HSTS 预加载列表,浏览器预先加载一些安全网站的 HSTS 信息,进一步增强安全性。

公钥固定(Public Key Pinning)

在 SSL/TLS 协议的握手过程中,服务器向客户端发送证书进行校验。

公钥固定技术是指服务器通过特定指令,让浏览器记住公钥的哈希值。在有效期内,当用户再次访问该网站时,浏览器会校验公钥哈希值是否匹配,以防止证书被篡改。

然而,由于实施过程较为繁琐,采用该方案的网站数量相对较少。在一些对安全性要求极高的企业内部网络应用中,采用公钥固定技术。

例如,某大型企业的内部办公系统在 SSL/TLS 协议握手过程中,服务器通过特定指令让客户端浏览器记住公钥的哈希值。在有效期内,当员工再次访问办公系统时,浏览器校验公钥哈希值是否匹配,防止证书被篡改。虽然实施过程繁琐,但能极大提高系统安全性,确保企业内部敏感信息不被泄露。

证书透明度(Certificate Transparency)

在互联网安全领域,证书透明度技术用于防止证书被误签发或私钥被盗用。

例如,一些安全机构通过证书透明度工具监控证书签发情况。当某域名的证书出现异常签发时,如某知名电商平台的域名证书被恶意机构在未经授权的情况下签发,安全机构可通过证书透明度日志及时发现,并通知电商平台采取措施,如吊销异常证书、重新签发合法证书等,确保整个系统的安全性,保护用户和平台的利益。

八、安全使用随机数

8.1随机数的重要性​

  1. 生成加密密钥:在区块链加密技术中,随机数用于生成加密密钥。以比特币为例,其钱包地址生成过程中,需要使用随机数生成私钥。通过高强度的随机数生成算法,产生一个足够长且不可预测的随机数作为私钥,例如 “5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss”。基于这个私钥,通过特定的数学运算生成公钥和钱包地址。由于随机数的不可预测性,使得攻击者难以通过猜测私钥来窃取比特币,保障了用户的数字资产安全。​
  2. 防止重放攻击:在在线支付系统中,防止重放攻击至关重要。当用户发起一笔支付请求时,支付平台会向用户的设备发送一个随机数,如 “3456789012345678”。用户在后续的支付确认请求中,需要将该随机数包含在请求数据中。支付平台接收到请求后,会检查该随机数是否已经使用过。如果随机数是首次出现且与之前发送的一致,则认为该请求是合法的;若随机数已被使用或与之前发送的不一致,支付平台将拒绝该请求,视为重放攻击。这样可以有效防止攻击者截取用户的支付请求数据包,多次重发以进行恶意支付。​

8.2伪随机数​

在一些简单的游戏开发中,可能会使用伪随机数生成器来模拟游戏中的随机事件,如抽奖结果

例如,使用线性同余生成器(LCG)来生成一个 0 到 9 之间的随机数决定抽奖奖品。假设初始值 X0 = 3,a = 7,c = 5,m = 10,根据公式 Xn + 1 = (aXn + c) mod m,计算得到的随机数序列为:X1 = (7×3 + 5) mod 10 = 6,X2 = (7×6 + 5) mod 10 = 7,X3 = (7×7 + 5) mod 10 = 4 等。

然而,随着游戏进程推进,玩家可能会发现抽奖结果似乎存在某种规律,这是因为 LCG 存在周期性问题,属于弱伪随机数生成器。在更高级的游戏开发中,尤其是涉及虚拟物品交易或赌博性质的游戏,会采用基于密码学的伪随机数生成器(CPRNG),如在一些大型多人在线角色扮演游戏(MMORPG)中,使用 CPRNG 生成角色的随机属性,确保每个角色的属性都是真正随机且不可预测的,提升游戏的公平性和安全性。

九、密钥管理

在大型金融机构的核心业务系统中,密钥管理系统(KMS)发挥着关键作用。

例如,某跨国银行使用 KMS 管理海量客户的账户加密密钥。在密钥生成阶段,KMS 利用高度安全的随机数生成机制,为每个客户生成高强度的加密密钥,如长度为 256 位的 AES 加密密钥。在密钥存储方面,KMS 采用加密存储技术,将密钥存储在专用的安全硬件设备中,如加密芯片,防止密钥被非法访问。当客户进行账户交易时,KMS 根据交易需求,安全地将相应密钥提供给加密和解密模块,确保交易数据的加密和解密操作顺利进行。同时,KMS 会定期更新密钥,如每 3 个月更新一次客户的账户加密密钥,降低因密钥长期使用而被破解的风险。在密钥销毁阶段,KMS 会采用彻底的销毁方式,如多次覆盖密钥存储区域,确保密钥无法被恢复,全方位保障客户账户信息的安全。

十、信息隐藏技术

信息隐藏技术包括隐写术和数字水印等

10.1隐写术​

在军事情报传递中,隐写术有着重要应用。

例如,特工需要将一份机密文件隐藏在一张普通的风景图片中进行传递。通过专门的隐写软件,将机密文件的数据按特定算法嵌入到图片的像素点中。比如,利用最低有效位(LSB)算法,将机密文件的二进制数据逐位替换图片像素点 RGB 值的最低位。这样,从肉眼看,图片外观与原始风景图片毫无差异,但实际上已隐藏了机密信息。接收方收到图片后,使用相应的解密软件,按照嵌入算法的逆过程,提取出隐藏在图片中的机密文件,实现了秘密信息的隐蔽传输。​

10.2数字水印​

在数字音乐产业中,数字水印用于版权保护。音乐发行公司在将音乐作品发布到各大音乐平台前,会在音乐文件中嵌入数字水印。例如,将音乐作品的版权信息、作者信息等编码成特定的数字水印,并通过音频处理技术将其嵌入到音乐文件的音频信号中。当音乐平台检测到某音乐文件存在未经授权的传播或盗版行为时,可通过数字水印提取技术,从音乐文件中提取出数字水印,获取版权信息,追踪侵权源头。一些音乐平台还利用数字水印技术进行音乐作品的真伪鉴别,确保平台上的音乐作品均为正版授权,保护音乐创作者和发行公司的权益。

十一、加密算法与密钥管理最佳实践

11.1分组加密避免使用 ECB 模式​

在医疗数据存储系统中,患者的病历信息通常需要加密存储。

若采用分组加密且使用 ECB 模式,由于 ECB 模式下相同明文分组会加密成相同密文分组,攻击者可能通过分析密文,推测出病历中的敏感信息,如患者的疾病诊断结果。

例如,若多个患者的 “糖尿病诊断” 这一明文分组在 ECB 模式下加密后密文相同,攻击者就可能利用这一规律篡改密文,影响患者的诊断和治疗。

因此,医疗数据存储系统应采用更安全的 CBC 模式或其他安全模式,确保患者病历信息的保密性和完整性。​

11.2慎用流密码​

在工业控制系统中,设备之间的通信安全至关重要。若使用流密码进行通信加密,一旦密钥流生成出现问题,如因设备故障导致密钥流可预测,攻击者就可能截获通信数据并破解,进而控制工业设备,引发严重安全事故。

例如,在某化工生产厂的控制系统中,若采用的流密码生成器出现故障,使得生成的密钥流呈现一定规律,攻击者通过分析截获的通信数据,破解了密钥流,控制了化工设备的运行参数,可能导致化工原料泄漏等危险情况。

所以,在工业控制系统中,必须谨慎评估和使用流密码,确保密钥流生成的可靠性和不可预测性。

11.3使用足够长度密钥的算法​

在国家关键信息基础设施领域,如电力能源系统,数据安全关系到国家能源供应的稳定。电力系统中,对用户用电数据、电网运行数据等进行加密时,必须使用足够长度密钥的算法.

例如,采用 AES - 256 算法对电力用户的用电量数据进行加密存储,256 位的密钥长度极大地增加了破解难度,保障了用户用电数据的安全。对于涉及电力系统核心控制指令传输的加密,使用 RSA 算法时,密钥长度大于 2048 位,防止攻击者通过暴力破解等手段获取控制指令,确保电网的安全稳定运行。

11.4淘汰 MD5 算法,改用 SHA2 系列哈希函数​

在软件代码完整性校验方面,过去许多软件开发者使用 MD5 算法生成代码文件的哈希值。但由于 MD5 算法存在严重安全缺陷,易产生哈希碰撞

例如,恶意软件开发者可精心构造两个不同的代码文件,使其 MD5 哈希值相同,将恶意软件伪装成正常软件发布

如今,软件开发者已普遍改用 SHA2 系列哈希函数,如 SHA - 256。以开源软件项目为例,开发者在发布软件版本时,会同时提供软件包的 SHA - 256 哈希值,用户下载软件包后,通过计算软件包的 SHA - 256 哈希值并与开发者提供的值比对,可准确判断软件包是否被篡改,保障软件的安全性和可靠性。​

11.5不同操作不要使用相同密钥​

在银行的网上银行系统中,涉及多种安全操作,如用户登录认证、转账交易、账户信息查询等。如果这些不同操作都使用相同密钥,一旦密钥泄露,攻击者将能够获取用户的所有信息并进行各种恶意操作。例如,若登录认证和转账交易使用同一密钥,攻击者通过某种手段获取该密钥后,不仅可以登录用户账户查看账户信息,还能直接进行转账操作,给用户带来巨大经济损失。

因此,银行系统会为不同操作分配不同密钥,如登录认证使用一组密钥,转账交易使用另一组密钥,降低因密钥泄露带来的风险。​

11.6哈希加盐且分组加密的初始化向量随机产生且不复用​

在社交媒体平台的用户密码管理中,为防止用户密码被破解,采用哈希加盐技术

例如,当用户注册时,平台为每个用户生成一个随机 Salt 值,如 “user1_salt123”,将用户输入的密码 “user_password” 与 Salt 拼接后进行哈希计算,即 Hash (“user_passworduser1_salt123”)。在分组加密存储用户的聊天记录等敏感信息时,每次加密都随机生成初始化向量 IV,且不可复用。如在加密用户与好友的聊天记录时,每次加密都生成不同的 IV,如 “1010101010101010”“0101010101010101” 等,增强加密的安全性,防止攻击者通过分析密文获取用户聊天内容。​

11.7使用经过检验的加密算法及库​

在移动支付 APP 开发中,APP 开发者必须使用经过检验的加密算法及库。

例如,支付宝 APP 在开发过程中,使用了经过广泛验证的加密算法库,如 OpenSSL 库中的 AES 加密算法实现数据加密传输,以及用于数字签名验证的相关算法

这些经过检验的加密算法及库经过了大量安全测试和实际应用验证,具有较高的安全性和稳定性。相比之下,若 APP 开发者自行开发加密算法或使用未经检验的加密库,可能引入安全漏洞。

如某小型移动支付 APP 因使用了一个未经安全评估的加密库,导致用户支付信息泄露,APP 声誉受损,用户流失严重。​

11.8假设代码会被公开,不要依赖系统的保密性​

在开源项目的安全设计中,开发者假设代码会被公开,不依赖系统的保密性。

例如,Linux 操作系统作为开源项目,其代码公开透明。开发者在设计安全机制时,采用安全的加密算法、合理的权限管理等措施,而不是依靠隐藏代码中的某些安全机制来保障系统安全。即使恶意攻击者获取了 Linux 系统的全部代码,由于其安全机制设计合理,攻击者也难以轻易突破系统安全防线。同样,在一些企业内部开发的软件项目中,即使代码不对外公开,但开发者也应遵循这一原则,从设计层面确保软件的安全性,防止因代码泄露或被内部人员恶意利用而导致安全事故。​

同时,应用程序使用默认密钥或密码是常见的安全漏洞。

例如,Apache Shiro 因使用默认密钥而产生远程命令执行漏洞,给系统安全带来了严重威胁。许多基于 Apache Shiro 框架开发的应用程序,由于未及时修改默认密钥,攻击者可利用该漏洞发送精心构造的请求,在目标系统上执行任意命令,获取系统权限,导致服务器被入侵,敏感信息泄露等严重后果。

十二、总结与建议

Web 安全中密码学相关知识广泛而复杂,虽然无法涵盖所有问题,但对于开发者和安全从业者来说,掌握加密算法的正确选择和使用、有效的密钥管理以及生成强壮的随机数等技能至关重要。

同时,要意识到应用程序使用默认密钥或密码的安全风险,积极采取措施进行防范。此外,深入了解 HTTPS 相关概念、SSL/TLS 的发展历史以及其中的密码学算法和攻防手段,并通过实际试验和学习,不断提升在 Web 安全领域的实践能力和应对风险的能力,才能更好地保障 Web 应用的安全,保护用户的信息安全和隐私。开发者应将安全意识贯穿于整个软件开发周期,从需求分析、设计、编码到测试和部署,都要充分考虑密码学相关的安全因素。

安全从业者则需持续关注密码学领域的最新研究成果和安全动态,及时更新安全防护策略,为 Web 应用提供全方位的安全保障。

评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值