目录
证书透明度(Certificate Transparency)
引言
在当今数字化时代,Web 安全至关重要,而密码算法与随机数在其中扮演着核心角色。吴翰清的《白帽子讲 web 安全》一书深入探讨了这些关键领域,为我们理解和保障 Web 安全提供了宝贵的见解。
一、密码学基础概念
密码学的核心目标是保障信息安全,其发展历程见证了人类对信息保护的不断探索。在 Web 应用中,加密、编码和哈希这三个概念虽然常见,但对于初学者来说极易混淆。加密通过算法和密钥将明文转化为密文,有效防止信息被非法获取;编码侧重于数据的表示和传输,方便数据在不同环境中的处理;哈希则将数据映射为哈希值,用于校验数据完整性和防止数据被篡改,尽管存在哈希碰撞的可能性,但通过合理的设计和应用,仍然能够在 Web 安全中发挥重要作用。
二、加密、编码和哈希的基本概念
2.1密码学的悠久历史与现代应用
密码学的起源可追溯至古希腊的密码棒,这种早期加密方式开启了人类保护信息安全的历程。在现代 Web 应用中,密码算法无处不在。
- Cookie 信息加密:以在线购物网站为例,当用户登录并浏览商品时,网站会在用户浏览器中存储 Cookie,其中可能包含用户的登录状态、购物车信息等。为防止这些隐私数据被窃取,网站会对 Cookie 信息进行加密。比如,某电商网站使用 AES 加密算法,将用户的购物车商品列表加密后存储在 Cookie 中。即使黑客截获了该 Cookie,由于没有解密密钥,也无法获取其中的商品信息。
- 密码存储的哈希处理:许多社交平台在存储用户密码时采用哈希处理。例如,用户注册时设置密码 “myPassword123”,平台使用 SHA - 256 哈希函数对其进行处理,得到一串不可逆的哈希值,如“5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8”。当用户登录时,平台再次对用户输入的密码进行哈希计算,并与存储的哈希值比对,以验证密码的正确性。即使平台数据库泄露,黑客也难以通过哈希值反推出用户的原始密码。
- 数据真实性校验的非对称加密:在电子政务系统中,政府部门与企业之间进行数据交互时,常借助非对称加密确保数据真实性。例如,企业向政府部门提交一份重要的项目申报文件,企业先用自己的私钥对文件内容进行签名,然后将文件和签名一起发送给政府部门。政府部门收到后,使用企业的公钥验证签名。若签名验证通过,说明文件在传输过程中未被篡改且确实来自该企业,因为只有该企业拥有其私钥。
2.2易混淆概念的清晰辨析
- 加密:加密是将明文通过特定算法和密钥转换为不可读密文的过程。只有拥有相应密钥的接收者才能将密文解密还原为明文。例如,在电子邮件通信中,用户发送的邮件内容会被加密,以防止中途被第三方截获并读取。加密算法多种多样,常见的有 AES(高级加密标准)等,它通过复杂的数学运算对数据进行加密,确保信息的保密性。
- 编码:编码主要是为了方便数据在不同系统或环境中的表示与传输,本身并不具备保密功能。比如 URL 编码,它将 URL 中的特殊字符转换为特定的编码形式,以便在网络中准确传输。以 “http://example.com/?query=上海” 为例,其中的 “上海” 会被编码为 “% E4% B8%8A% E6% B5% B7”,这样可以避免特殊字符在传输过程中引发歧义,但数据本身的内容并未得到保护。
- 哈希:哈希是将任意长度的数据映射为固定长度哈希值的过程。哈希值常用于数据完整性校验和防篡改。由于哈希函数的特性,即使原始数据只有微小的变化,其哈希值也会截然不同。然而,哈希碰撞是一个需要关注的问题,即不同的输入可能产生相同的哈希值。在开源软件社区,开发者发布软件版本时会提供软件包的哈希值(如 SHA - 256)。用户下载软件包后,可使用哈希计算工具算出软件包的哈希值,并与开发者提供的哈希值比对。比如,某软件包的原始哈希值为 “c5f4a9d8e7b6a5f4e3d2c1b0a9f8e7d6c5b4a3f2”,若用户下载的软件包在传输过程中被恶意篡改,重新计算的哈希值会与原始值不同,用户即可得知软件包已被修改,从而避免使用被篡改的软件。
三、加密算法分类与要点
3.1对称加密算法
- 流加密算法:流加密算法中,加密和解密双方使用相同的伪随机数据流作为密钥。在实际应用中,常采用位异或操作来实现加密。常见的流加密算法有 RC4、Salsa20、SEAL 等。例如,假设要加密一个字节数据 10101010,伪随机数据流(密钥流)为 01010101,通过位异或操作,加密后的密文为 11111111。接收方用相同的伪随机数据流与密文进行位异或,即 11111111⊕01010101 = 10101010,从而还原出明文。
- 分组加密算法:分组加密算法以 “分组” 为基本操作单位,不同算法的分组长度有所不同。典型的分组加密算法包括 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安全使用原则
- 选择成熟算法:在任何应用场景中,都不应自行发明加密算法,而应选用经过时间检验的成熟算法。例如 AES 算法,经过了广泛的研究和实践验证,具有较高的安全性。自行开发的加密算法可能存在未被发现的安全漏洞,容易被攻击者利用。注意算法限制和要点。
- 哈希结合 Salt 和随机 IV:在用户密码存储方面,许多互联网公司采用哈希结合 Salt 的方式。如腾讯在存储用户密码时,为每个用户生成一个随机 Salt 值,如 “unique_salt123”,将用户密码 “user_password” 与 Salt 拼接后进行哈希计算,即 Hash (“user_passwordunique_salt123”)。在分组加密中,如在 VPN 通信中,每次加密都随机生成初始化向量 IV,且不可复用,增强了加密的安全性。
- 淘汰 MD5 算法:在软件版本发布场景中,过去软件开发者常用 MD5 算法生成软件包的哈希值。但由于 MD5 算法存在严重安全缺陷,易产生哈希碰撞。例如,恶意软件开发者可通过精心构造两个不同的软件包,使其 MD5 哈希值相同,将恶意软件伪装成正常软件发布。如今,软件开发者已普遍改用 SHA2 系列哈希函数,如 SHA - 256,提高软件包哈希值的安全性。
- 确保密钥长度:在金融数据加密领域,分组加密的密钥长度至关重要。如银行在加密客户账户信息时,使用 AES - 256 算法,其密钥长度为 256 位,大大增加了破解难度。相比之下,若使用较短密钥长度的算法,如早期的 DES 算法(密钥长度 56 位),已能被现代计算能力在较短时间内破解。对于 RSA 密钥长度,在数字证书认证中心,为保障证书安全性,RSA 密钥长度通常大于 2048 位。
- 谨慎使用流密码:在物联网设备通信中,若使用流密码,对密钥流生成要求极高。例如,智能门锁与手机 APP 通信时,若使用的流密码生成的密钥流具有可预测性,黑客可能通过分析通信数据,预测出后续密钥流,从而破解通信内容,入侵智能门锁系统。所以,在物联网设备通信中,需谨慎选择和使用流密码,确保密钥流生成的不可预测性。
- 避免 ECB 模式:在文件加密存储场景中,若使用 ECB 模式加密文件,如存储用户的重要文档。由于 ECB 模式的特性,相同内容的文件块会加密成相同密文块。攻击者若获取到加密文件,可能通过分析密文块,推测出文件结构和部分内容,甚至篡改文件。因此,应优先选择 CBC 等更安全模式,如一些云存储服务提供商在对用户文件加密时,采用 CBC 模式的 AES 算法,确保文件安全。
4.2攻击类型及防范
- Padding Oracle 攻击防范:在一些 Web 应用的用户登录认证系统中,若使用分组加密存储用户密码哈希值,需防范 Padding Oracle 攻击。服务器应严格控制返回给用户的错误信息,避免泄露填充是否正确的信息。同时,采用安全的填充方式,并在服务器端严格校验填充过程。例如,某知名社交平台在升级系统时,加强了对填充机制的安全防护,杜绝了 Padding Oracle 攻击的可能性,保障了用户密码安全。
- 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随机数的重要性
- 生成加密密钥:在区块链加密技术中,随机数用于生成加密密钥。以比特币为例,其钱包地址生成过程中,需要使用随机数生成私钥。通过高强度的随机数生成算法,产生一个足够长且不可预测的随机数作为私钥,例如 “5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss”。基于这个私钥,通过特定的数学运算生成公钥和钱包地址。由于随机数的不可预测性,使得攻击者难以通过猜测私钥来窃取比特币,保障了用户的数字资产安全。
- 防止重放攻击:在在线支付系统中,防止重放攻击至关重要。当用户发起一笔支付请求时,支付平台会向用户的设备发送一个随机数,如 “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 应用提供全方位的安全保障。

653

被折叠的 条评论
为什么被折叠?



