• RC4加密算法详解


    0x01 RC4概述

    RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。

    RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。

    在存储大量的信息时,RC4展现出它的实用性,面对大量的数据,运行简单,速度快。

    RC4的类型

    • SPRITZ: Spritz 可用于构建加密散列函数、确定性随机位生成器 (DRBG)、n 支持经过身份验证的关联数据加密 (AEAD) 的加密算法。
    • RC4A: Souraduyti Paul 和 Bart Preneel 提出了一种 RC4 变体,他们称之为 RC4A,比平均 RC4 密码更快、更强, RC4A 在其密码中没有使用真正的随机数。
    • VMPC: VMPC 是 RC4 的另一个变体,代表可变修改的排列组合。
    • RC4A+: RC4A+ 是 RC4 的修改版本,具有更复杂的三阶段密钥调度,所需时间大约是 RC4 的三倍,以及更复杂的输出函数,它为每个字节输出在 S 数组中执行四次额外查找,大约需要 1.7只要基本 RC4 倍。

    RC4的应用

    RC4 使用在各种应用。

    • 1997 年的 WEP 和 2003 年的 WPA
    • 从 1995 年开始在 SSL 中的应用,它是 1999 年 TLS 的继承者
    • RC4 因其简单、速度和简化了软件和硬件的实现

    0x02 RC4历史

    Ron Rivest在1987年提出了RC4加密方法,开始他并不打算公开此密码的加密规则,RC4 是商业机密,不公开密码的加密规则会提高安全性,不过在1994年,一位匿名人士在公共场所张贴了对密码规则的描述。之后RC4被使用,直到 2003 年和 2013 年在 RC4 中发现严重漏洞。
    RC4 依赖于:

    • 输入信息:该工具生成一个无法猜测的八位数字密码
    • 密钥流:密码对纯文本进行加扰
    • 产品:X-OR 操作将密钥流与密码组合在一起

    0x03 RC4工作规则

    RC4依赖于随机数生成器,但不需要线性反馈移位寄存器。虽然互联网很多领域已经明确禁止使用 RC4,但是RC4的加密规则还是很值得学习的。

    • 输入密钥+需要加密的信息
    • 通过密钥逐字节的对信息进行加密
    • 接收方通过密钥解密数据

    RC4 的加密工具非常复杂。它们通常包含 256 个字节,并且文本在被认为完整之前多次通过数学规则。

    0x04 RC4优缺点

    优点:

    • 与其他密码相比,RC4 的运算速度更快
    • RC4 流密码易于使用
    • 密钥大小可变
    • 不需要更多内存
    • 面向字节操作
    • RC4 流密码编码能力强,易于实现

    缺点:

    • 容易受到攻击
    • RC4 流密码不能在小数据流上实现
    • 使用相同密钥安全性更低
    • RC4 流密码不提供身份验证

    0x05 RC4加解密过程

    在加密和解密期间,不断生成密钥流字节,它们被添加到消息字节中。密钥流字节是根据T表生成的。

    执行以下步骤:

    • 创建了两个辅助变量p1和p2并将其设置为0
    • 变量p1增加1并且结果是模除以256
    • 变量p2在由临时变量p1 (T[p1])确定的位置处增加了数组T中的值。然后,结果被模除以256。
    • 数组中位置p1的值与数组中位置p2的值交换。
    • 数组中位置p1的值与数组中位置p2的值相加。然后,将结果模除以256并分配给新的辅助变量p3。
    • 数组中位置p 3处的值是一个新的密钥流字节。

    密钥流初始化

    for i from 0 to 255
        T[i] := i
    endfor
    x_temp := 0
    for i from 0 to 255
        x_temp := (x_temp + T[i] + K[i mod k_len]) mod 256
        swap(T[i], T[x_temp])
    endfor

    密钥流生成

    p1 := 0
    p2 := 0
    while GeneratingOutput
        p1 := (p1 + 1) mod 256
        p2 := (p2 + T[p1]) mod 256
        swap(T[p1], T[p2])
        send(T[(T[p1] + T[p2]) mod 256])
    endwhile
  • 相关阅读:
    Vue-cli3 通过配置 public 目录下的 config.js 和config.json 实现一次编译,修改生效
    Android数据对象序列化原理与应用
    Unirech腾讯云国际站代充-云服务器系统盘使用问题
    RabbitMQ(五)【AMQP协议】
    手机ip地址是实时位置吗
    pytorch深度学习实战lesson13
    Kafka3.x核心速查手册二、客户端使用篇-4、消息路由机制
    性能测试-01-简介
    Microsoft兼容性遥测是什么?Microsoft兼容性遥测占用高磁盘
    web中间件漏洞-weblogic漏洞-弱口令war包上传
  • 原文地址:https://blog.csdn.net/weixin_43211186/article/details/125438478