APP下载

基于RC4算法的流密码原理与实现

2018-10-13刘程远

网络安全与数据管理 2018年9期
关键词:重置明文密文

刘程远

(深圳中电长城信息安全系统有限公司,广东 深圳 518057)

0 引言

在加密通信中,单密钥密码被广泛应用于一对一的双边通信中。在单密钥密码中,通信双方使用同一密钥进行加密与解密,即加密运算与解密运算互为逆运算,双方必须持有同一密钥,并保守秘密。流密码作为一种单密码体制密码,它与传统单密钥密码最大的不同点是不使用固定密钥,而是使用不断变化的密钥流进行加密与解密,通信双方只需商议初始密钥,然后根据相同的密钥流生成算法,生成随机性强、不可预测性强且相同的密钥流即可,避免了密钥在公网上传输的风险。流密码有着实现简单、速度快、方便软件和硬件实现、密钥管理安全性高等优点。本文将介绍基于RC4算法的密码体制实现原理和实现方法。

1 基本原理

1.1 流密码

流密码是密码体制中的重要一支,也是手工和机械密码时代的主流。20世纪50年代以来,由于数字电子技术的发展,使密钥流可以方便地利用以位移寄存器为基础的电路来产生,促进了线性和非线性移位寄存器理论的迅速发展。代数和谱分析等数学工具的引入,使得流密码理论迅速发展并走向较成熟的阶段。由于具有实现简单和速度快的优势,以及在通信传播中几乎没有或只有有限的错误,因此流密码在实际应用中,特别是在专用机和机密机构中仍保持优势[1]。

流密码目前没有标准化的算法,大多数流密码是以硬件为基础实现的专用算法,例如银行产品的中银e令等。

流密码的最大特点是采用由非固定的不断变化的密钥组成的密钥序列,称为密钥流。加密时,信息发送者将明文划分成字符或数据位,分别与密钥流进行加密运算;解密者以同样的密钥流生成器产生的同样密钥流与密文参与解密运算。流密码强度完全依赖于密钥流生成器产生序列的随机性和不可预测性[2]。基本框图如图1所示。

图1 流密码原理框架

图1中k0表示初始密钥,KG表示密钥生成器,mi表示明文流,ci表示密文流,Eki(mi)表示加密或解密算法,通信双方通过安全信道交换初始密钥后,通过密钥生成器生成密钥流,密钥流与明文流通过加密算法生成密文流,密文通过不安全信道传输到接收方,接收方用同样的密钥与密文进行解密运算,输出明文,通信成功[3]。

根据密钥的不同,流密钥可以分为同步流密钥和自同步流密钥。

基于同步流密码的流密钥独立于明文,相同的明文随着密钥的不同而被加密成不同的密文字符。此类密码只要通信双方密钥流生成器的初始密钥相同就可以生成相同的密钥。通信双方保持精确同步地更新密钥流才能保证密码系统正常工作,一旦失去同步就不能正确解密,必须恢复同步才能工作,这是同步流密码最大的缺点。但是由于其对失步的敏感性,使得系统对窜扰者的注入、删除、重放等主动攻击也很敏感,有利于检测。同步流密码在失步后如何重新同步是一个重要问题,处理不好将严重影响安全性。

基于自同步流密码的流密钥在失去同步后能自行恢复同步。如图2所示,其密文ci不仅与当前明文mi有关,还与历史明文m1,m2,……mi-1有关,一般在有限的n级存储下,每个密文字符将影响以后n个输入明文字符的加密结果。密钥流可表示为

ki=f(k1,ci-n,ci-n+1,……,ci-1)

由于密文ci与明文mi的一对一映射关系,密钥ki最终受到所有n个输入明文的影响。

图2 自同步流密钥

自同步流密码传输过程中有一位出错,它将在n级移存器中存活n个周期,继而影响其后n位密钥的正确性。但是只要继续接收正确信息,在n位正确密文以后,通信双方又会产生相同的密钥。因此,它具有自同步能力。

1.2 RC4流密码

RC4是RSA公司提出的密钥长度可变流密码,是一种同步流密钥。该算法利用8×8的S盒,在变长密钥控制下对0~255的数进行置换,通过一系列非线性运算生成密钥序列,具体算法如下:

初始化盒子S0~ S255:

i=(i+1) mod 256

j=(j+Si) mod 256

互换Si与Sj:

t=(Si+Sj) mod 256

K=St

ci=K⊕mi

i和j初始为0,Si,Sj表示第i和第j个S盒子,K为产生的随机字节,K与明文异或即可得到密文,与密文异或即可得到明文。

RC4算法对差分攻击和线性攻击具有免疫力,这是因为它采用了高度非线性算法。RC4算法有256个S盒,初始化时首先将0~255依次填入所有S盒,然后将密钥填入另一个256字节的阵列(密钥长度不足则循环填入),S盒记为S0~S255密钥阵列记为k0~k255,然后从i=0开始循环256次,取j初值为0,循环计算j=(j+Si+Sj)mod 256,并互换Si和Sj的位置,直至i=255。因此它大约有256!×2562=21 700种可能的状态。各S盒在i和j的控制下进行卷入加密。指标i保证每个元素变化,指标j保证元素的随机改变。该算法简单明了,易于实现,速度快。关于RC4的攻击方法的文献有许多,但主要针对弱密钥攻击,目前没有查明哪种方法能有效攻击足够长密钥(128 bit或以上)的RC4。

2 应用实现

2.1 应用场景

RC4流密码适用于一对一的通信。如图3所示,公司某项目需要在Web服务器和app服务器之间设计一个密码系统在内网进行通信。

图3 应用场景

该密码体制具体需求有:使用AES密码系统通信作为基础;在AES基础上进行安全加固;对信道攻击(窃听、干扰、重放、伪造)敏感,有恢复能力;AES是一种单密钥密码,相关内容在此不做赘述。

2.2 总体结构

考虑到安全需求,同时使用了AES与RC4两种密码体制,64 bit RC4提供密钥流,128 bit AES进行加密与解密,如图4所示,k0表示初始密钥,ki表示当前密钥,ci表示当前明文,mi表示当前密文。RC4提供高随机性和不可预测性的密钥流,考虑到密钥从内部泄露的可能性,在这里不采用原RC4加密方法(直接按位与明文异或),使用128 bit AES增加密码系统复杂度,比简单使用RC4密码更安全。AES虽然稍微增加了算法复杂度,但对于服务器加密与解密效率影响很小。在项目后期压力测试中,项目组使用了jmeter模拟200个用户端向服务器发送udp请求,测试中每轮加密与解密均在1 s以内完成,与单独使用RC4无明显差异,且多轮压力测试中均没有发现问题,因此,使用AES算法增加的复杂度对服务器造成的负担在允许范围内。

图4 总体结构

3 详细设计

3.1 密钥同步

同步流密钥由于密文与密钥无关,因此,通信双方必须通过分析密文之外的信息来保持密钥流同步。

根据项目架构和硬件资源的实际情况,项目采用了在数据库服务器写入一位标志位的方式来检测双方密钥是否同步,如图5所示。

图5 密钥同步原理

由于RC4流密钥只要初始密钥K0相同,就能产生相同的密钥流k1k2…ki。因此,只要检测通信双方使用的密钥是否更新了相同次数,即ki的下标是否相同即可,这里把i记作标志位。通信发送方将通信密钥的标志位i写入数据库,接收方收到密文后,先检查数据库中标志位i与本地的标志位j是否相等即可。

3.2 密钥更新

RC4具有产生密钥流的能力,由于其密钥是变化的,因此需要不断更新密钥。

考虑到系统的具体安全需求,密钥更新采取了“手动更新+自动化运维更新”的方式。即用户可以手动更新密钥,将Web和app的密钥同时同步更新,更新流程如图6所示。

图6 密钥更新流程

用户在网页端点击页面更新后,向Web服务器发送一个请求。Web服务器收到请求后,更改数据库标志位为自身更新后的标志位,然后向app服务器发出命令,app服务器收到命令后查询数据库的标志位是否与自身更新一次后的标志位相同,若相同,则app服务器更新本地密钥,并返回成功信息至Web服务器,Web服务器更新本地密钥,双方均更新一次密钥,仍然保持密钥同步,密钥更新成功;若不同,则app服务器返回失败信息发送至Web服务器,Web服务器通知页面,建议用户启动密钥重置功能,此时app和Web服务器均不执行密钥更新操作,以免密钥更新不同步导致原本正常使用的密码系统无法使用。

3.3 密钥重置

同步流密码的最大问题就是失去同步后如何恢复同步。密钥重置提供了一种恢复同步的方法。

密钥重置的流程与密钥更新流程大致相同,唯一不同的是密钥重置将密钥置为初始密钥k0。该方法存在一定风险,攻击者可以通过重放攻击诱使app服务器重置密钥。因此,两个服务器对本地密钥设置了严格的保护。

3.4 密钥日志

为方便排查密钥更新故障和监控密钥安全,在密钥更新模块里加入了密钥更新日志。app服务器每次更新都将密钥更新的时间和命令内容写入日志,以便诊断故障和安全监控。

4 结论

使用单密码体系的通信者们,通常会面临密钥交换的难题:既不能长期使用同一密钥,又无法保证交换密钥时通信信道是安全的。基于此问题,RC4流密码提供了一种简单、安全、无需交换密钥的单密钥密码,使用该密码体系可以在保持密钥不断更新的同时从物理上隔绝密钥与网络环境,有效提升单密钥通信系统的安全性。该密码体系适用于所有单密钥互联网通信的应用场景,硬件要求较低,实现方便,完全免疫差分攻击与线性攻击,对重放攻击有检测能力,经过多轮测试证明具有较高的安全性和稳定性,适合作为互联网通信商业密码使用。

猜你喜欢

重置明文密文
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
重置系统微软给你“双料”选择
系统重置中途出错的解决办法
重置人生 ①
使用朗仁 H6 Pro大师版重置雷克萨斯发动机记忆
奇怪的处罚
一种基于密文分析的密码识别技术*
一种基于密文分析的密码识别技术*
奇怪的处罚