zoukankan      html  css  js  c++  java
  • 流密码和RC4

    定义:流密码是对称密码算法,从明文输入流逐位或逐字节产生密文输出。

    实例:使用最广泛的流密码是RC4

    流密码结构:

      

    流密码类似于”一次一密”,不同的是”一次一密”使用的是真正的随机数流,而流密码使用的是伪随机数流。

    设计流密码的主要因素

    1、加密序列的周期要长,若出现重复的周期过短,容易被破解

    2、密钥流应该尽可能地接近真正随机数流的特征

    3、密钥长度要长,以避免琼穷举攻击

    RC4算法

    RC4算法是Ron RivestRSA公司在1987年设计的一种流密码,作为RSA的商业机密直到1994年才被匿名公布于Internet

    该算法是一个可变密钥长度、面向字节操作的流密码。该算法以随机置换作为基础,其密码周期很可能大于10100,且该算法的运行速度很快。

    RC4被用于为网络浏览器和服务器间通信而制定的SSL/TLS(安全套接字协议/传输层安全协议)标准中,以及作为IEEE 801.11无线局域网标准一部分的WEP(Wired Equivalent Privacy)协议和新的WiFi受保护访问协议(WAP)中。从这些应用来看,RC4构成了当今网络通信的非常重要的部分,因此这个算法非常重要

    RC4的逻辑结构图

    算法描述:

    1、ST的初始状态

    S中元素的值按升序被置为0-255,同时建立一个临时向量T。将密钥的值循环复制到T向量中。

    2、S的初始置换

    T产生S的初始置换,置换伪码如下

      j = 0;

      for (i = 0 ; i < 256 ; i++){

        j = (j + S[i] + T[i]) mod 256;

        swap(S[i] , S[j]);

      }

    因为对S的操作仅是交换,S仍然包含所有值为0-255的元素。

    3、密钥流的生成

    密钥流生成伪码如下

      i , j = 0;

      while (true){

        i = (i + 1) mod 256;

        j = (j + S[i]) mod 256;

        swap(S[i] , S[j]);

        t = (S[i] + S[j]) mod 256;

        k = S[t];

      }

    加密中,将k的值与明文的下一字节异或,解密时将k的值与密文的下一字节异或。

    RC4的密钥长度超过128位时,目前没有任何攻击方法能够破解。不过WEP协议易受到一种特殊的攻击方式攻击,但这个问题本质上并不在与RC4本身,而是RC4密钥的产生途径有漏洞。

  • 相关阅读:
    南阳oj 82 迷宫寻宝(一)
    杭电 oj 1016 Prime Ring Problem
    杭电 oj 3350 #define is unsafe
    南阳oj 366 全排列 D的小L
    南阳oj 32 组合数
    部分和问题 南阳oj 1058
    HNUSTOJ 1516:Loky的烦恼
    HDU-1874 畅通工程续
    T-聊天止于呵呵
    P-残缺的棋盘
  • 原文地址:https://www.cnblogs.com/block2016/p/5601925.html
Copyright © 2011-2022 走看看