APP下载

基于JSON的RSA-PKCS#1加密算法的安全性研究*

2018-01-29建,蒋琳,廖清,王

网络安全与数据管理 2018年1期
关键词:明文加密算法密文

何 建,蒋 琳,廖 清,王 轩

(哈尔滨工业大学深圳研究生院 计算机科学与技术学院,广东 深圳 518055)

0 引言

互联网中数据的安全性可以分为数据在传输过程中的安全与数据在端点存储的安全两类[1]。通常情况下,互联网中的数据在传输过程中是通过SSL/TLS协议来保证其安全性的。但是,SSL/TLS协议只能够保证数据在端到端的传输过程中的安全性,并不能保证数据在端点的存储是安全的[2]。因为数据被传输到端点后就要经过SSL/TLS协议解密成明文,然后以明文形式存储于端点。这样,如果端点是不可信的,那么,就意味着数据完全暴露在危险之下,有极大的可能被恶意的攻击者利用。基于JSON的加密标准的提出,恰好可以解决上述存在的安全问题。基于JSON的加密标准是针对应用层数据进行的加密操作,可以将敏感数据的所有权和控制权牢牢地掌握在用户自己的手中。

基于JSON的RSA-PKCS#1加密算法是基于JSON的加密标准中的一种加密算法,且被作为第一推荐算法使用。它利用JSON的特有结构,对应用层数据进行RSA加密运算生成密文,并最终生成符合JSON结构特点的序列。它不依赖任何解析器可以独立完成数据的解析。但因为其在加密明文前需要进行符合公钥密码学标准的填充预处理[3],而此填充预处理因为不够充分的安全考虑,使得攻击者可以利用选择密文攻击破解密文。

目前针对基于JSON的安全算法的研究包括针对JSON结构的签名绕过攻击[4]和利用JSON结构漏洞的Web劫持攻击[5]。另外,还有若干针对SSL/TLS协议、XML协议等实施选择密文攻击的研究[6-8]。结合国内外研究者的研究经验,本文展开针对基于JSON的RSA-PKCS#1加密算法的选择密文攻击的研究。由于JSON协议具有轻量级、自解析等特点,使得它成为了应用开发者数据交换格式的首选,其未来的前景也更加令人期待,所以,针对基于JSON的RSA-PKCS#1加密算法的安全性研究具有重要的现实意义。

1 预备知识

1.1 JSON的基本概念

JavaScript对象标记(JavaScript Object Notation, JSON)是一种轻量级的数据交换格式。它采用完全不依赖于计算机程序语言的文本格式来存储和表示数据。简单的结构使得 JSON 成为数据交换类型语言中的首选。JSON方便人们编写,同时也易于机器的解析,可以有效地提升网络传输效率[9]。

在JSON结构当中,其整体结构需要用大括号“{}”括起来,数据结构表示为键值对的形式。在数组结构当中,其整体结构需要用中括号“[]”括起来。

表1为一个使用JSON结构表示的事物,通过属性-值的方式来对此事物进行描述。

表1 使用JSON结构描述事物

目前,绝大多数的计算机语言都已经支持JSON,包括ASP、C/C++、Java、JavaScript、Python以及Go语言等。同时,目前JSON的应用场景也非常丰富,包括Apache CXF、OpenID Connect等都实现了通过JSON进行数据传输的功能。

1.2 基于JSON的RSA-PKCS#1加密算法

针对表1中的内容,使用基于JSON的RSA-PKCS#1加密算法对其加密生成密文。同时分别对header、payload以及生成的密文进行base64url编码,并用“.”进行连接,得到的结果如表2所示。

表2 基于JSON的RSA-PKCS#1加密的结果

结果按照顺序依次为:

(1)header:用于标注使用的加密算法,也可能会用于存储加密密钥,或其他与加密密钥相关的信息。

(2)payload:需要加密的内容,加密算法由header中的“alg”所指定,本文中为RSA1_5(RSA-PKCS#1)。

(3)ciphertext:加密生成的密文。

1.3 选择密文攻击

在针对密码学安全分析的研究当中,选择密文攻击指的是一种攻击方式。选择密文攻击要求攻击者掌握对解密机的访问权限,攻击者具有一定的能力来获取或者构造一定数量的密文,然后可以利用解密机对这些密文进行解密,通过一定的运算最终可以在未获取密钥的情况下破解出密文所对应的明文,此攻击被称为选择密文攻击。

与选择密文攻击密切相关的一个问题是密文的可延展性。例如,如果一个加密方案拥有这样一个属性:给定未知消息m的密文c,可得到未知消息m′的密文c′,其中m′和m具有某种已知的关联。例如给定m的密文c,可以构造2m对应的密文c′,c′=X*c,其中X表示利用密文的可延展性所产生的与2有关系的中间变量。我们称符合上例中的特性为可延展性。RSA加密算法具有此类可延展性。

利用选择密文攻击,恶意攻击者可以通过事先任意搜集或构造一定数量的密文,让这些密文透过被攻击的加密算法进行解密运算,然后利用某些规则可以在未破解出加密算法私钥的情况下,获取到密文对应的明文。

2 基于JSON的RSA-PKCS#1加密算法的选择密文攻击

在针对基于JSON的RSA-PKCS#1加密算法的选择密文攻击的场景中,攻击者的目的就是在不知道RSA算法私钥的情况下,成功破解出由RSA加密的密文c。为了达到这一目的,攻击者利用选择密文攻击原理,通过不断地调整中间变量值s来调整密文c的值,并利用前一次服务器的反馈信息调整下一次的密文c′,c″,…,再继续进行攻击,如此过程循环,直到破解出密文c的值。

选择性密文攻击具体可分为以下两个步骤:

(1)验证函数库是否存在可攻击的漏洞

为了验证本攻击所针对的漏洞是否存在,构造多个攻击向量,这些攻击向量都是密文消息,但是这些密文消息都故意在某一部分不符合PKCS#1填充规则,比如不加空字节、在Padding部分中加入空字节、前两个字节不是0x00和0x02等,其具体内容如表3所示。

表3 基于JSON的PKCS#1加密算法的攻击向量

攻击者利用上述攻击向量,构造假的密文发送给服务器,然后通过服务器的返回消息判断是否存在漏洞。

(2)利用找到的利用点实施选择密文攻击

当攻击者确定服务器存在漏洞后,将会进行选择密文攻击。

现假设某攻击者截获一条使用RSA-PKCS#1算法加密的数据c,并想要破解出其对应明文m。已知m与c的关系为m=cd(modn)。此时,攻击者随机生成一个整数s,使得:

c'=cse(modn)

(1)

由RSA的可延展性,可以得到:

m'=ms(modn)

(2)

攻击者将此c'发送至目标服务器。目标服务器先对其进行RSA解密,之后再对解密得到的数据进行PKCS#1编码检验。如果服务器向攻击者返回消息称c'符合PKCS#1标准,则攻击者可以获得到对攻击有利消息,即ms的头两个字节为00和02。现设辅助变量B:

B=28(k-2)

(3)

其中,k为n的字节长度。

如果ms符合PKCS#1标准,则可以得到如下关系:

2B≤ms(modn)<3B

(4)

进一步,攻击者可以通过选取恰当的s值,不断地缩小m的取值范围,最终将范围缩小至一个区间,此时即可得出m的值。攻击的实施过程如图1所示。

图1 选择密文攻击图解

攻击算法为,攻击者需要按照上述格式构造基于JSON的解密请求,并且通过选择密文攻击的方法构造攻击请求消息,发送给服务器。具体实施如算法1。

算法1:基于JSON的RSA-PKCS#1加密算法的选择密文攻击输入:给定密文c值、RSA-PKCS#1加密算法公钥(n,e)输出:密文c值所对应的明文m值步骤:Step1:盲试。对于给定的密文c值,随机选取不同的s0,检查c(s0)e(modn)是否符合PKCS#1标准。知道第一次成功选取到符合要求的s0,此时我们可以得到以下关系式c0←c(s0)e(modn)M0←{[2B,3B-1]}i←1Step2:寻找符合PKCS#1标准的消息。Step2.a:初级寻找阶段。如果i=1,然后取最小的s1,使得s1⩾n3B,使得c0(s1)e(modn)符合PKCS#1标准Step2.b:寻找至只剩一个间隔阶段。如果i>1,同时Mi-1集合中区间个数大于1,则需要重新选取si值,使得si⩾si-1,同时si使得c0(si)e(modn)符合PKCS#1标准Step2.c:间隔内寻找。当Mi集合中区间个数为1时(假设Mi-1={[a,b]}),然后选取较小的si,ri值,且满足以下关系式ri⩾2bsi-1-2Bn2B+rinb£si<3B+rina根据上述两个不等式,知道找到si满足c0(si)e(modn)符合PKCS#1标准Step3:缩小寻找范围。有上step2.c找到恰当的si值,根据此si计算Mi集合Mi←∪{[maxa,2B+rnsi(),min(b,3B-1+rnsi]}foralla,b[]∈Mi-1andasi-3B+1n⩽si

3 结果及加固方案

3.1 结果

利用上述攻击算法,实现了攻击程序。本攻击针对一个提供RSA解密服务的服务器实施攻击。使用RSA-PKCS#1算法加密一则消息“My666”,生成密文,作为HTTP的Payload值发送至服务器,然后构造用于测试服务器是否存在漏洞的攻击向量,并发送给服务器。

攻击程序利用攻击向量测试的结果实施选择密文攻击,经过多次的服务器访问,最后可以破解出RSA算法加密的密文,结果如图2所示。

图2 针对基于JSON的RSA-PKCS#1加密算法的攻击结果

通过使用不同长度的RSA密钥值,计算成功破解一条密文的攻击实施次数的最小值与平均值,具体情况如表4所示。

表4 基于JSON的RSA-PKCS#1选择密文攻击攻击结果

由表4可以得出结论:随着密钥长度的增加,导致破解一条基于JSON的RSA-PKCS#1加密密文的计算次数也随之增加。这是因为密钥长度决定明文长度,即明文的可能取值的范围增大,因此导致中间变量s的选取空间增大,增大了访问服务器所用的次数。

在本机为Linux操作系统,3.2 GHz的Intel i5处理器的计算能力下,破解一条1 024 bit的基于JSON的RSA-PKCS#1密文大概需要10 000 s。

3.2 加固方案

传统的随机填充加固方案中[10],攻击者构造假的密文需要利用前一次攻击服务器反馈回来的消息,所以,如果可以使得攻击者得到的反馈消息无差异化,即当服务器检查出请求消息不符合PKCS#1标准时,也假装此请求符合PKCS#1标准,正常进行后续的通信流程。传统加固流程可以应对的攻击者攻击方式如图3所示。

图3 随机填充方案可以阻止的攻击方式

不同的是,服务器不使用真实明文作为返回值,而是随机生成一个随机数作为替代值返回给攻击者。这样来,攻击者就无法利用构造的假消息进行选择密文攻击。

如果攻击者使用含有相同密文值的攻击请求再次向服务器发起访问,因为每次调用随机填充方法时,所产生的随机数都不相同,那么通过比对两次返回的结果,如果值不相同则可断定服务器识别出了攻击并使用了随机数替代了真实明文。攻击者由此可知,此次向服务器发起访问的攻击请求中所对应的明文值符合PKCS#1标准,因此获得了对攻击有利的反馈消息,即攻击漏洞。改进的攻击流程具体如图4所示,此情况下传统的基于随机填充的加固方式不能够抵抗攻击。

图4 改进的选择密文攻击

针对此种情况,采用以随机数替代密钥值的方式已经不能避免选择密文攻击,所以提出使用固定值代替随机数,可以使用服务器的公钥值作为替代真实明文的数据进行返回。此时,攻击者两次的攻击请求因为都使用了相同的固定值代替明文作为返回消息,攻击者并不能识别出所发送的请求是否符合PKCS#1标准,因此不能继续进行选择密文攻击。所以采用固定值而非随机填充方式的加固方案,在避免攻击者实施选择密文攻击方面更具实用意义,可以抵抗攻击者更复杂的攻击手段。

4 结论

为提升基于JSON的RSA-PKCS#1加密算法的安全性,本文通过分析选择密文攻击的原理与漏洞存在原因,结合基于JSON结构的加密算法的通信流程,提出基于JSON的RSA-PKCS#1加密算法的选择密文攻击,并通过实验证明漏洞存在。同时针对此漏洞,本文提出了一种改进的加固方案,通过分析传统的随机填充加固方案的弊端,提出使用固定值代替随机数来作为服务器返回值的改进加固方案,以使得服务器可以无差别地处理攻击请求,避免了此类攻击的威胁。

[1] 冯登国, 张敏, 李昊. 大数据安全与隐私保护[J]. 计算机学报, 2014, 37(1): 246-258.

[2] DIERKS T. The transport layer security (TLS) protocol version 1.2[J]. Network Working Group, 2008: 17-30.

[3] KALISKI B. PKCS# 1: RSA encryption version 1.5[J]. RSA Laboratories Ease, 1998: 4-20.

[4] ALVARO M, OLEKSANDR M. Friday the 13th: JSON attac-ks [C]. Proceedings of the Black Hat 2017 Conference, New York, 2017: 82-127.

[5] DAVID R. The security risks of Web 2.0[J]. Technical Report, Defcon, 2009: 25-32.

[6] MEYER C. Revisiting SSL/TLS implementations: new bleichenbacher side channels and attacks[C].USENIX Security Symposium, New York, 2014: 733-748.

[7] JAGER T, SCHINZEL S, SOMOROVSKY J. Bleichenbacher’s

attack strikes again: breaking PKCS# 1 v1.5 in XML encryption[J]. Computer Security ESORICS, 2012: 752-769.

[8] BLEICHENBACHER D. Chosen ciphertext attacks against protocols based on the RSA encryption standard PKCS#1[C].Advances in Cryptology CRYPTO'98. Springer Berlin/Heidelberg, 1998: 1-12.

[9] BRAY T. The javascript object notation (JSON) data interchange format[J]. Internet Engineering Task Force, 2014:45-67.

[10] RESCORLA E. Preventing the million message attack on cryptographic message syntax[J]. Network Working Group, 2002: 12-17.

猜你喜欢

明文加密算法密文
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
基于整数矩阵乘法的图像加密算法
基于混沌系统和DNA编码的量子图像加密算法
奇怪的处罚
混沌参数调制下RSA数据加密算法研究
一种基于密文分析的密码识别技术*
一种基于密文分析的密码识别技术*
奇怪的处罚
基于小波变换和混沌映射的图像加密算法