ReStr0
Venom战队队员 Chamd5安全团队
ReStr0-Blog

Rabbit 加密官方文档

Rabbit流密码算法的描述

  1. 关于下段备忘本备忘录为互联网社区提供信息。是的不指定任何类型的Internet标准。本文件的分发备忘录是无限的。版权公告版权所有(C)互联网协会(2006年)。摘要本文档介绍加密算法Rabbit。这是一个具有128位密钥和64位初始化的流密码算法载体(IV)。该方法于2003年发表,并已被批准对公共安全和绩效进行修订。它的高性能使其特别适合与Internet协议一起使用需要处理大量数据的地方。翻译by:ReStr0
  • 目录1.导言…………………………………………….2
  • 2.算法说明 …………………………………….2
  • 2.1. 符号 …………………………………….2
  • 2.2. 内部状态 …………………………………………3
  • 2.3. 密钥设置方案 …………………………………………3
  • 2.4. IV设置方案 …………………………………………3
  • 2.5. 计数器系统 …………………………………………4
  • 2.6. 下一状态功能 …………………………………………4
  • 2.7. 提取方案 …………………………………………5
  • 2.8. 加密/解密方案 …………………………………………5
  • 3.安全注意事项 …………………………………………6
  • 3.1. 消息长度 …………………………………………6
  • 3.2. 初始化向量 …………………………………………6
  • 4.参考资料 …………………………………………7
  • 附录A:测试向量 …………………………………………8
  • A.1。无IV设置的测试 …………………………………………8
  • A.2。使用IV设置进行测试 …………………………………………8
  • 附录B:调试向量 …………………………………………9
  • B.1。测试圆形功能和按键设置…………………………………………9
  • B.2。测试IV设置…………………………………………10

[Page 1]

  1. 1.导言Rabbit是一种流密码算法,专为高性能应用而设计软件实现中的性能。键设置和加密速度非常快,使得算法特别适合适用于需要大量数据或大量数据的所有应用程序数据包必须加密。示例包括,但不是限于,服务器端加密,多媒体加密,硬盘加密和有限资源设备上的加密。密码是基于某些人的行为而产生的想法混沌地图。这些地图经过仔细的离散化,结果在紧凑的流密码中。《Rabbit》于2003年公开出版[1] 到目前为止还没有表现出任何弱点写作。为了确保持续的安全评估,还提交给ECRYPT eSTREAM项目[2]。从技术上讲,Rabbit由伪随机比特流生成器组成它将128位密钥和64位初始化向量(IV)作为输入并生成128位块的流。加密是通过使用独占或操作。解密以完全相同的方式执行就像加密一样。关于Rabbit的更多信息,包括参考实施,测试向量、性能数据和安全白皮书可从http://www.cryptico.com/. //网站目前失去维护

2.算法描述

2.1. 符号

本文档使用以下基本运算符:

 +     integer addition.
 *     integer multiplication.
 div   integer division.
 mod   integer modulus.
 ^     bitwise exclusive-OR operation.
 <<   left rotation operator.
 ||   concatenation operator.

标记变量a的位时,最低有效位为由[0]表示。符号A[h..g]表示变量A,其中h比g更重要。相似变量

[Page 2]

标记为A0、A1、,。。。用符号A(0),A(1),。。。being used

如果这提高了可读性,则表示这些相同的变量。给定64位字,函数MSW将提取最重要的32位,而函数LSW提取最低有效32位

位。

前缀为0x的常量采用十六进制表示法。在里面具体而言,常量字号定义为0x100000000。

2.2. 内部状态

流密码的内部状态由513位组成。512位在八个32位状态变量X0、…、X7和X7之间划分八个32位计数器变量,C0,…,C7。此外,还有一个

计数器进位,b。

2.3. 密钥设置方案

计数器进位b初始化为零。国家和计数器字从键K[127..0]派生而来。该键分为子键K0=K[15..0],K1=K[31..16]。。。K7=K[127..112]。初始状态初始化如下:

  for j=0 to 7:
    if j is even:
      Xj = K(j+1 mod 8) || Kj
      Cj = K(j+4 mod 8) || K(j+5 mod 8)
    else:
      Xj = K(j+5 mod 8) || K(j+4 mod 8)
      Cj = Kj || K(j+1 mod 8)

然后对系统进行四次迭代,每次迭代包括计数器更新(第2.5节)和下一状态功能(第2.6节)。之后,计数器变量将重新初始化为

  for j=0 to 7:
    Cj = Cj ^ X(j+4 mod 8)

2.4. IV设置方案

如果IV用于加密,则会修改计数器变量在按键设置之后。通过IV[63..0]表示IV位,设置

收益如下:

  C0 = C0 ^ IV[31..0]        C1 = C1 ^ (IV[63..48] || IV[31..16])
  C2 = C2 ^ IV[63..32]       C3 = C3 ^ (IV[47..32] || IV[15..0])

[Page 3]

  C4 = C4 ^ IV[31..0]        C5 = C5 ^ (IV[63..48] || IV[31..16])
  C6 = C6 ^ IV[63..32]       C7 = C7 ^ (IV[47..32] || IV[15..0])

然后,系统再迭代4次,每次迭代

包括计数器更新(第2.5节)和下一状态功能

(第2.6节)。

钥匙和IV设置之间的关系如下:

-密钥设置后,生成的内部状态保存为主状态国家。然后运行IV设置以获得第一次加密起始状态。

-每当需要在新IV下重新初始化时,IV再次在主状态下运行安装程序以派生下一个加密开始状态。

2.5. 计数器系统

在每次执行下一状态功能(第2.6节)之前必须更新计数器系统。这个系统使用常量

A1、…、A7,如下所示:

  A0 = 0x4D34D34D         A1 = 0xD34D34D3
  A2 = 0x34D34D34         A3 = 0x4D34D34D
  A4 = 0xD34D34D3         A5 = 0x34D34D34
  A6 = 0x4D34D34D         A7 = 0xD34D34D3

它还使用计数器进位b来更新计数器系统,如下所示

跟随:

  for j=0 to 7:
    temp = Cj + Aj + b
    b   = temp div WORDSIZE
    Cj   = temp mod WORDSIZE

请注意,退出此循环时,必须保留变量b

用于系统的下一次迭代。

2.6. 下一状态函数

Rabbit算法的核心是下一个状态函数。它是基于函数g,该函数将两个32位输入转换为一个

32位输出,如下所示:

  g(u,v) = LSW(square(u+v)) ^ MSW(square(u+v))
  where square(u+v) = ((u+v mod WORDSIZE) * (u+v mod WORDSIZE)).

[Page 4]

使用此函数,算法将内部状态更新为

跟随:

 for j=0 to 7:
Gj = g(Xj,Cj)

X0 = G0 + (G7 <<< 16) + (G6 <<< 16) mod WORDSIZE
X1 = G1 + (G0 <<< 8) + G7 mod WORDSIZE
X2 = G2 + (G1 <<< 16) + (G0 <<< 16) mod WORDSIZE
X3 = G3 + (G2 <<< 8) + G1 mod WORDSIZE
X4 = G4 + (G3 <<< 16) + (G2 <<< 16) mod WORDSIZE
X5 = G5 + (G4 <<< 8) + G3 mod WORDSIZE
X6 = G6 + (G5 <<< 16) + (G4 <<< 16) mod WORDSIZE
X7 = G7 + (G6 <<< 8) + G5 mod WORDSIZE

2.7. 提取方案

密钥和IV设置完成后,迭代该算法以便每轮产生一个128位输出块S。每个循环包括执行步骤2.5和2.6,然后提取输出S[127..0]如下所示:

 S[15..0]    = X0[15..0]  ^ X5[31..16]
S[31..16] = X0[31..16] ^ X3[15..0]
S[47..32] = X2[15..0] ^ X7[31..16]
S[63..48] = X2[31..16] ^ X5[15..0]
S[79..64] = X4[15..0] ^ X1[31..16]
S[95..80] = X4[31..16] ^ X7[15..0]
S[111..96] = X6[15..0] ^ X3[31..16]
S[127..112] = X6[31..16] ^ X1[15..0]

2.8. 加密/解密方案

给定128位消息块,M、加密E和解密M’

通过计算

 E  = M ^ S    and
M' = E ^ S.

如果两个操作中的S相同(如果相同的键和IV),则M=M’。重复加密/解密方案,直到消息已被加密/解密。如果消息大小不是128位的倍数,仅为所需的最低有效位数来自最后一个输出块S的位用于最后一个消息块M

[Page 5]

如果应用程序需要加密较小的块(甚至单个位),使用128位缓冲区。缓冲区是通过生成新值S并将其复制到缓冲器之后,所有数据块都使用最小值加密此缓冲区中的有效位。

每当缓冲区为空时,一个新的生成值S并将其复制到缓冲区中。

3.安全考虑

对于加密算法,提供的安全性当然是最重要的问题。没有发现任何安全弱点可以解决问题日期,既不是由设计者也不是由独立的密码学家在[1]中发表后仔细检查算法。注意Rabbit对已知密码分析的安全性探讨技术见[3]。

在下文中,我们将自己局限于一些关于如何使用的规则Rabbit算法是正确的。

3.1. 消息长度

Rabbit设计用于加密多达2到64 128位的幂次方同一密钥下的消息块。是否应该保存这一数量的数据一旦超过,必须更换钥匙。建议即使定期更换IV,也要遵循此规则。

3.2. 初始化向量

可以在没有IV设置的情况下运行Rabbit。但是在这个在这种情况下,发电机不得在同一按键下复位,因为这将破坏其安全性(有关最近的示例,请参见[4])。

但是,为了保证发送方和实际上,密码经常被重置。这意味着发送方和接收方都将密码的内部状态设置回已知值,然后使用IV.If导出新的加密状态

这样做,重要的是确保没有IV被重复使用

在同一把钥匙下。

[Page 6]

4.参考资料

[1] M。博斯加德,M。维斯特雷格,T。彼得森,J。克里斯蒂安森,O。

斯加维尼乌斯。”Rabbit:一种新的高性能流密码。

过程。Fast软件加密2003,计算机课堂讲稿

《科学》2887页。307-329.斯普林格,2003年。

[2] ECRYPT eSTREAM项目,可从

http://www.ecrypt.eu.org/stream/

[3] M。伯斯加德,T。彼得森,M。维斯特雷格,E。曾纳。”这个

兔子流密码-设计和安全性分析”。过程。

国资委2004年研讨会,可从

http://www.isg.rhul.ac.uk/research/

projects/ecrypt/stvl/sasc.html。

[4] H。吴。“在Microsoft Word和Excel中滥用RC4”。IACR

eprint存档2005/007,可从

http://eprint.iacr.org/2005/007.pdf.

[5] 琼森,J。和B。Kaliski,“公钥加密标准

(PKCS)#1:RSA加密规范版本2.1“,RFC

34472003年2月。

[Page 7]

附录A:测试向量

这是一致性测试的一组测试向量,以八位字节表示形式。对于Rabbit,必须将它们转换为整数通过转换原语OS2IP和I2OSP,如[5]所述。

A.1。无IV设置的测试

 key  = [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
S[0] = [B1 57 54 F0 36 A5 D6 EC F5 6B 45 26 1C 4A F7 02]
S[1] = [88 E8 D8 15 C5 9C 0C 39 7B 69 6C 47 89 C6 8A A7]
S[2] = [F4 16 A1 C3 70 0C D4 51 DA 68 D1 88 16 73 D6 96]

key = [91 28 13 29 2E 3D 36 FE 3B FC 62 F1 DC 51 C3 AC]
S[0] = [3D 2D F3 C8 3E F6 27 A1 E9 7F C3 84 87 E2 51 9C]
S[1] = [F5 76 CD 61 F4 40 5B 88 96 BF 53 AA 85 54 FC 19]
S[2] = [E5 54 74 73 FB DB 43 50 8A E5 3B 20 20 4D 4C 5E]

key = [83 95 74 15 87 E0 C7 33 E9 E9 AB 01 C0 9B 00 43]
S[0] = [0C B1 0D CD A0 41 CD AC 32 EB 5C FD 02 D0 60 9B]
S[1] = [95 FC 9F CA 0F 17 01 5A 7B 70 92 11 4C FF 3E AD]
S[2] = [96 49 E5 DE 8B FC 7F 3F 92 41 47 AD 3A 94 74 28]

A.2. 使用IV设置进行测试

 mkey = [00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
iv = [00 00 00 00 00 00 00 00]
S[0] = [C6 A7 27 5E F8 54 95 D8 7C CD 5D 37 67 05 B7 ED]
S[1] = [5F 29 A6 AC 04 F5 EF D4 7B 8F 29 32 70 DC 4A 8D]
S[2] = [2A DE 82 2B 29 DE 6C 1E E5 2B DB 8A 47 BF 8F 66]

iv = [C3 73 F5 75 C1 26 7E 59]
S[0] = [1F CD 4E B9 58 00 12 E2 E0 DC CC 92 22 01 7D 6D]
S[1] = [A7 5F 4E 10 D1 21 25 01 7B 24 99 FF ED 93 6F 2E]
S[2] = [EB C1 12 C3 93 E7 38 39 23 56 BD D0 12 02 9B A7]

iv = [A6 EB 56 1A D2 F4 17 27]
S[0] = [44 5A D8 C8 05 85 8D BF 70 B6 AF 23 A1 51 10 4D]
S[1] = [96 C8 F2 79 47 F4 2C 5B AE AE 67 C6 AC C3 5B 03]
S[2] = [9F CB FC 89 5F A7 1C 17 31 3D F0 34 F0 15 51 CB]

l [Page 8]

附录B:调试向量

以下一组向量描述了Rabbit的内部状态在钥匙和iv设置期间。它主要用于调试目的。八位字节字符串是根据I2OSP约定编写的。

B.1。测试圆函数和键设置

 key  = [91 28 13 29 2E ED 36 FE 3B FC 62 F1 DC 51 C3 AC]

Inner state after key expansion:
b = 0
X0 = 0xDC51C3AC, X1 = 0x13292E3D, X2 = 0x3BFC62F1, X3 = 0xC3AC9128,
X4 = 0x2E3D36FE, X5 = 0x62F1DC51, X6 = 0x91281329, X7 = 0x36FE3BFC,
C0 = 0x36FE2E3D, C1 = 0xDC5162F1, C2 = 0x13299128, C3 = 0x3BFC36FE,
C4 = 0xC3ACDC51, C5 = 0x2E3D1329, C6 = 0x62F13BFC, C7 = 0x9128C3AC

Inner state after first key setup iteration:
b = 1
X0 = 0xF2E8C8B1, X1 = 0x38E06FA7, X2 = 0x9A0D72C0, X3 = 0xF21F5334,
X4 = 0xCACDCCC3, X5 = 0x4B239CBE, X6 = 0x0565DCCC, X7 = 0xB1587C8D,
C0 = 0x8433018A, C1 = 0xAF9E97C4, C2 = 0x47FCDE5D, C3 = 0x89310A4B,
C4 = 0x96FA1124, C5 = 0x6310605E, C6 = 0xB0260F49, C7 = 0x6475F87F

Inner state after fourth key setup iteration:
b = 0
X0 = 0x1D059312, X1 = 0xBDDC3E45, X2 = 0xF440927D, X3 = 0x50CBB553,
X4 = 0x36709423, X5 = 0x0B6F0711, X6 = 0x3ADA3A7B, X7 = 0xEB9800C8,
C0 = 0x6BD17B74, C1 = 0x2986363E, C2 = 0xE676C5FC, C3 = 0x70CF8432,
C4 = 0x10E1AF9E, C5 = 0x018A47FD, C6 = 0x97C48931, C7 = 0xDE5D96F9

Inner state after final key setup xor:
b = 0
X0 = 0x1D059312, X1 = 0xBDDC3E45, X2 = 0xF440927D, X3 = 0x50CBB553,
X4 = 0x36709423, X5 = 0x0B6F0711, X6 = 0x3ADA3A7B, X7 = 0xEB9800C8,
C0 = 0x5DA1EF57, C1 = 0x22E9312F, C2 = 0xDCACFF87, C3 = 0x9B5784FA,
C4 = 0x0DE43C8C, C5 = 0xBC5679B8, C6 = 0x63841B4C, C7 = 0x8E9623AA

Inner state after generation of 48 bytes of output:
b = 1
X0 = 0xB5428566, X1 = 0xA2593617, X2 = 0xFF5578DE, X3 = 0x7293950F,
X4 = 0x145CE109, X5 = 0xC93875B0, X6 = 0xD34306E0, X7 = 0x43FEEF87,
C0 = 0x45406940, C1 = 0x9CD0CFA9, C2 = 0x7B26E725, C3 = 0x82F5FEE2,
C4 = 0x87CBDB06, C5 = 0x5AD06156, C6 = 0x4B229534, C7 = 0x087DC224

[Page 9]

 The 48 output bytes:
S[0] = [3D 2D F3 C8 3E F6 27 A1 E9 7F C3 84 87 E2 51 9C]
S[1] = [F5 76 CD 61 F4 40 5B 88 96 BF 53 AA 85 54 FC 19]
S[2] = [E5 54 74 73 FB DB 43 50 8A E5 3B 20 20 4D 4C 5E]

B.2. 测试IV设置

 key  = [91 28 13 29 2E ED 36 FE 3B FC 62 F1 DC 51 C3 AC]
iv = [C3 73 F5 75 C1 26 7E 59]

Inner state during key setup:
as above

Inner state after IV expansion:
b = 0
X0 = 0x1D059312, X1 = 0xBDDC3E45, X2 = 0xF440927D, X3 = 0x50CBB553,
X4 = 0x36709423, X5 = 0x0B6F0711, X6 = 0x3ADA3A7B, X7 = 0xEB9800C8,
C0 = 0x9C87910E, C1 = 0xE19AF009, C2 = 0x1FDF0AF2, C3 = 0x6E22FAA3,
C4 = 0xCCC242D5, C5 = 0x7F25B89E, C6 = 0xA0F7EE39, C7 = 0x7BE35DF3

Inner state after first IV setup iteration:
b = 1
X0 = 0xC4FF831A, X1 = 0xEF5CD094, X2 = 0xC5933855, X3 = 0xC05A5C03,
X4 = 0x4A50522F, X5 = 0xDF487BE4, X6 = 0xA45FA013, X7 = 0x05531179,
C0 = 0xE9BC645B, C1 = 0xB4E824DC, C2 = 0x54B25827, C3 = 0xBB57CDF0,
C4 = 0xA00F77A8, C5 = 0xB3F905D3, C6 = 0xEE2CC186, C7 = 0x4F3092C6

Inner state after fourth IV setup iteration:
b = 1
X0 = 0x6274E424, X1 = 0xE14CE120, X2 = 0xDA8739D9, X3 = 0x65E0402D,
X4 = 0xD1281D10, X5 = 0xBD435BAA, X6 = 0x4E9E7A02, X7 = 0x9B467ABD,
C0 = 0xD15ADE44, C1 = 0x2ECFC356, C2 = 0xF32C3FC6, C3 = 0xA2F647D7,
C4 = 0x19F71622, C5 = 0x5272ED72, C6 = 0xD5CB3B6E, C7 = 0xC9183140

[Page 10] //作者详情信息不翻译

Authors’ Addresses

Martin Boesgaard Cryptico A/S Fruebjergvej 3 2100 Copenhagen Denmark

Phone: +45 39 17 96 06 EMail: mab@cryptico.com URL: http://www.cryptico.com

Mette Vesterager Cryptico A/S Fruebjergvej 3 2100 Copenhagen Denmark

Phone: +45 39 17 96 06 EMail: mvp@cryptico.com URL: http://www.cryptico.com

Erik Zenner Cryptico A/S Fruebjergvej 3 2100 Copenhagen Denmark

Phone: +45 39 17 96 06 EMail: ez@cryptico.com URL: http://www.cryptico.com

[Page 11]

完整版权声明

版权所有(C)互联网协会(2006年)。

本文件受权利、许可和限制的约束包含在BCP 78中,除其中规定外,作者保留他们的所有权利。

本文件及其所含信息以书面形式提供“现状”基础和贡献者、他/她所代表的组织或由互联网协会和互联网赞助(如有)工程任务组否认所有明示或暗示的保证,

包括但不限于以下任何保证:

此处的信息不会侵犯任何权利或任何暗示针对特定目的的适销性或适用性的保证。

知识产权

IETF对任何协议的有效性或范围不采取任何立场知识产权或其他可能声称拥有的权利与实施或使用中描述的技术有关本文件或此类权利下的任何许可的范围可能可用,也可能不可用;它也不代表它有作出任何独立努力以确定任何此类权利。

问询处关于RFC文件中权利的程序,可以在BCP78和BCP79中发现。向IETF秘书处和任何提供许可证的保证,或试图获得使用的一般许可证或许可本协议的实施者或用户拥有的此类专有权利规范可从IETF在线IPR存储库获取,网址为http://www.ietf.org/ipr.

IETF邀请任何相关方提请其注意版权、专利或专利申请,或其他专有权利权利,可能涵盖可能需要实施的技术

这个标准。请将信息发送至IETF,地址为ietf-ipr@ietf.org.

确认RFC编辑器功能的资金由IETF提供行政支助活动(IASA)。

发表评论

textsms
account_circle
email

ReStr0-Blog

Rabbit 加密官方文档
Rabbit流密码算法的描述 关于下段备忘本备忘录为互联网社区提供信息。是的不指定任何类型的Internet标准。本文件的分发备忘录是无限的。版权公告版权所有(C)互联网协会(2006年)。…
扫描二维码继续阅读
2021-08-07