首页/安全/加密与证书速查/RC4 流密码(禁止在 TLS 中使用)
加密算法基础95 条

RC4 流密码(禁止在 TLS 中使用)

曾广泛用于 SSL/TLS 与 WEP 的流密码,密钥调度存在统计偏差,已出现多种实用攻击;RFC 7465 明确禁止在 TLS 中使用 RC4 套件。

加密与证书速查安全更新于 2026-10-13

RC4 为什么被禁用

RC4 曾是 SSL/TLS 与 WEP 中广泛使用的流密码。它的密钥调度算法存在统计偏差:输出的密钥流前若干字节与密钥相关,在大量密文下可以被利用来恢复明文片段,公开研究给出了在 HTTPS 场景中恢复会话 Cookie 的可行思路。RFC 7465 因此明确禁止在 TLS 中使用 RC4 套件,WPA 也早已弃用它。

基本信息

类型流密码,字节密钥流与明文异或
密钥可变长度,常见 40-2048 位
标准依据RFC 7465(禁止在 TLS 中使用 RC4)
现状TLS 与 WPA 中均已不可用
识别方法检查协商套件列表中是否残留 RC4
遗留场景仅读取历史加密数据时可显式启用 legacy provider

典型使用场景

  • 安全检查:确认服务端与客户端协商套件里不再包含 RC4
  • 遗留数据读取:只解密历史文件,且必须显式启用 legacy provider
  • 老设备兼容评估:确认设备是否仍依赖 RC4,评估替换或隔离方案
  • 扫描结果复核:核对扫描输出与中间设备的实际协商行为是否一致

OpenSSL 3.x 中的识别与排除

OpenSSL 3.x 中的识别与排除
# 只有在读取遗留数据时才显式启用 legacy provider
openssl enc -rc4 -provider legacy -provider default -in data.bin -out data.rc4
# 评估套件列表:确认 RC4 已被排除在外
openssl ciphers -v 'HIGH:!aNULL:!RC4'
# 实际握手时强行指定 RC4,正常情况下应当协商失败
openssl s_client -connect example.com:443 -cipher RC4 </dev/null

风险与处置

风险说明处置
统计偏差密钥流前置字节与密钥相关不再用 RC4 加密任何新数据
大规模密文攻击明文重复时可恢复内容改用带认证的现代算法
中间设备降级老设备可能强制协商 RC4逐跳核对实际协商结果
历史数据遗留旧文件仍以 RC4 加密解密后立即用新算法重加密
RC4 的统计偏差在大量密文下可被利用(公开研究如 RC4 NOMORE 展示了 HTTPS 场景下的 Cookie 恢复思路),服务端与客户端都应确认协商结果里没有 RC4。
兼容性不是保留它的理由:当前主流客户端与服务器都已支持更好的套件,把 RC4 留在配置里只会给降级攻击留出口子。
遗留数据的处理原则是先解密再重加密:解密后用 AES-GCM 等认证加密重新保存,并确认旧文件已安全删除,否则风险只是被转移而不是被消除。

易错点

  • RC4 密钥与 IV 拼接不当(WEP 的经典错误)会让密钥流之间产生关联,即使算法实现正确也会被攻破
  • 部分扫描工具只检查客户端的握手套件列表,实际还要确认中间设备没有强制降级到 RC4
  • 认为只在内部使用就安全:内部链路同样会被抓包与长期存档
  • 把 legacy provider 长期开启,等于让整台服务器默认接受弱算法
  • 遗留 RC4 密文长期不重加密,风险随时间累积

数据来源与参考

  • RFC 7465(Prohibiting RC4 Cipher Suites)
  • RFC 8758(在 TLS 中弃用 RC4)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌