轻量级密码研究综述.docx

上传人:b****5 文档编号:8132635 上传时间:2023-01-29 格式:DOCX 页数:12 大小:33.46KB
下载 相关 举报
轻量级密码研究综述.docx_第1页
第1页 / 共12页
轻量级密码研究综述.docx_第2页
第2页 / 共12页
轻量级密码研究综述.docx_第3页
第3页 / 共12页
轻量级密码研究综述.docx_第4页
第4页 / 共12页
轻量级密码研究综述.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

轻量级密码研究综述.docx

《轻量级密码研究综述.docx》由会员分享,可在线阅读,更多相关《轻量级密码研究综述.docx(12页珍藏版)》请在冰豆网上搜索。

轻量级密码研究综述.docx

轻量级密码研究综述

轻量级密码研究进展综述

摘要:

随着物联网的发展,RFID、无线传感器的应用越来越广泛,为了保护这类资源受限设备所传输、处理的数据,轻量级密码应运而生,并成为密码学的一个研究热点,取得了丰富的研究成果。

本文介绍了轻量级密码的研究进展,包括轻量级密码的设计要求及设计特点、典型的轻量级分组密码和流密码,并总结了轻量级密码的实现性能和安全性。

关键词:

分组密码流密码轻量级硬件效率设计分析

1.引言

随着信息技术、计算机技术以及微电子技术的高速发展,RFID技术开始被大量应用于生产自动化、门禁、公路收费、停车场管理、身份识别、货物跟踪等领域,而由RFID技术与互联网结合实现的物联网作为新一代信息化浪潮的典型代表正逐步深入到人们生活的各个领域中,例如环境监测、现代物流、智能交通等。

2009年我们国家提出建立“感知中国”中心,这一举措极大地促进了国内RFID技术和物联网应用的发展。

作为信息传递和处理的网络,全面感知、可靠传送和智能处理是物联网的核心功能。

要实现可靠数据传送必须以密码算法为基础提供相应的安全服务,所以相应的密码算法研究是保障物联网安全运行的关键技术之一。

而与物联网关系密切,也需要密码算法作为基础支撑的无线传感器网络也是近年来发展迅猛的领域之一。

作为密码算法的使用环境,无线传感器和物联网具有共同的特征:

首先,它们的应用组件不同于传统的台式机和高性能计算机,而是计算能力相对较弱的嵌入式处理器;其次,由于应用环境的关系,计算可使用存储往往较小;最后,考虑到各种设备的功能需求,能耗必须限制在某个范围之内。

因此传统密码算法无法很好地适用于这种环境,这就使得受限环境中密码算法的研究成为一个热点问题。

适宜资源受限环境使用的密码算法就是所谓的轻量级密码。

源于应用的推动,近几年,轻量级密码的研究非常热,取得了丰富的研究成果。

国际标准化组织正在制定轻量级密码的相关标准,其中包括轻量级的分组密码、流密码、数字签名等。

本文介绍轻量级密码的研究进展,包括轻量级密码的设计要求及设计特点、典型的轻量级密码算法,以及典型的轻量级密码算法的实现效率和安全性分析。

2.设计需求及特点

2.1轻量级密码的特点

轻量级密码与传统密码相比有几个特点:

首先,资源受限的应用环境通常处理的数据规模比较小,因此,对轻量级密码吞吐量的要求比普通密码要低的多;其次,RFID和传感器等应用通常对安全性的要求不是很高,适中的安全级别即可;再次,轻量级密码大多采用硬件实现,由于实现环境条件的限制,除了安全性之外,轻量级密码算法追求的首要目标是实现所占用空间及实现效率。

简单的说,就是应用环境对轻量级密码硬件实现的芯片大小有严格的限制。

在这些环境下,为了追求实现,轻量级密码有的不实现密钥扩展算法而是采用机器内置密钥;有的不提供解密算法。

这些特点使得轻量级密码的密钥长度多为64比特和80比特。

需要特别强调的是,轻量级其实是依据密码的应用环境、实现的资源需求提出的一个概念,所以严格来讲轻量级可以指密码的轻量级实现,也可以指轻量级密码。

前者是指普通环境中可以使用的传统密码(如DES、AES等)经过实现技术上的改进,可以满足资源受限环境的需求,例如,已有研究者提出了一种低功耗、低成本的AES实现,该实现仅需要等效门(GE)3200[1]。

后者则指针对某种或是某类资源受限环境特别设计的密码算法,例如,PRESENT[2]。

当然,也有从改进实现技术和对组件进行轻量化两个方面入手的设计,比如DESL类算法[3]。

2.2轻量级密码的设计

轻量级密码的设计目的不是要代替传统密码,而是要适用于资源受限的设备,且能提供足够的安全性,并有良好的实现效率。

每个轻量级密码设计者都要在安全、成本和实现效率之间权衡。

对于分组密码,密钥长度提供一个安全和成本的平衡,而总的轮数提供一个安全和实现效率的平衡,硬件结构则提供成本和效率的平衡。

一般来说,优化这三个设计目标中的任意两个安全和成本、安全和效率或成本和效率是比较容易的;但是要同时优化三个设计目标就困难了。

例如,通过采用流水线和抗边信道的结构可以获得安全和高效的硬件实现,但结果是需要更多的面积,当然还有高成本。

另一方面,设计一种安全低成本的硬件实现也是可能的,但在效率方面会有缺点。

安全永远是密码算法追求的第一目标,但在轻量级分组密码的设计中,由于在资源受限环境中对于安全的要求一般不是特别高,所以算法实现效率就成了首要考虑的问题,轻量级分组密码设计处处都体现着安全性与效率的平衡和博弈。

首先,基于资源受限的要求,大多数轻量级密码算法采用4×4的S盒,这便是效率优先的一个抉择。

其次,扩散层一般采用易于实现的拉线方式,同时保证雪崩效应。

目前,除了改进原有密码算法的实现技术来适应受限环境的应用之外,轻量级密码的设计主要通过两种方法实现。

第一种方法就是在现有密码算法的基础上,对密码算法的组件进行轻量化的改进,例如,将不同的S盒换成相同的S盒,这样如果使用串行结构,便可以使S盒实现面积减少为原来的1/m(m为算法中使用的S盒数目),降低密码算法实现的资源需求。

第二种方法就是从零开始,设计一个全新的轻量级密码算法。

除了安全性外,要把实现作为设计的第一准则,加入每个组件时都要考虑到该组件的实现是不是符合轻量级。

第一种方法本质上是借助已有算法结构的安全性和健壮性,在尽可能不损失安全性或是提高安全性的情况下向轻量级方向进行改进。

这种方法的优点是设计工作量小,安全性分析也因为有原算法的分析而相对容易。

但是不可避免的也会有一些缺点:

首先算法实现所需的资源受到原算法结构的限制,因此选择基础算法时应该选择实现效率比较好的算法。

其次新的改动势必会使算法具有一些新的特点和弱点,所以利用这种方式设计的轻量级算法有可能遭遇新型攻击。

第二种方法更加灵活,没有固定算法的限制,设计者可以更好地利用可行的方式使得算法的实现效率尽可能少。

但是,这种方式设计出的密码算法需要进行大量的安全性分析。

3.典型的轻量级密码

3.1分组密码

3.1.1DESL

DES类轻量级密码[4]最早公布于RFIDSec06,它是在DES的基础上进行轻量化的设计,主要考虑的是使用可减少门电路复杂度的串行硬件体系结构,所以将原来DES中使用的不同S盒都换成相同S盒,这样改进后的密码算法被称为DESL。

针对DES密钥长度太短的缺陷,设计者加入了扩充密钥空间的操作,前后各加一轮白话子密钥,增加穷举攻击的难度;这样改进的DES称为DESX。

而将这两步改进同时作用于DES便得到了DESXL。

DES是面向硬件的密码算法,有数据统计[5]DES所需的逻辑资源仅仅是AES的6%,并且比AES有更短的关键路径。

所以以DES为基础的DESL也有良好的硬件特性。

在实现中DESL采用面向4比特或是6比特字的串行结构,而不是面向32比特或是48比特,虽然这种实现势必会减少吞吐量,但是也使得实现面积大幅减少。

而DESXL的实现也只需在加密前后各加一个异或门而已。

同DES的实现一样,轻量级密码算法因为对于吞吐量的要求不是很高,所以通常采取的提高实现效率的一种方法就是用减少吞吐量来换取更小的实现面积,DESL采用上面所说的方法需要的GE数可以减少到1850,比起DES的最好实现(2310GEs)减少了大约20%。

经过优化的DESL的ASIC实现需要1848GEs,加密64比特明文需要时钟周期数是144。

在频率为100Hz的环境下吞吐量是5.55kbps。

为了增强DESL的安全性,设计者除了加入DESXL版本为,在选择S盒上做了大量工作。

针对DES的差分和线型密码分析的一些结果,设计者在DESL中使用了加强版的S盒,设计S盒时增加了8个限制条件,来提高算法抵抗差分和线型密码分析的能力。

3.1.2HIGHT

HIGHT[6]是由HongD.,SungJ.,HongS.等人在CHES2006上提出的轻量级分组密码。

设计者声称HIGHT不仅包含一系列面向轻量级的简单操作,而且还能提供足够的安全性。

HIGHT是一个32轮的迭代密码,分组长度为64比特,密钥长度是128比特;HIGHT的整体结构类似于CAST-128[7],采用一种广义Feistel结构,轮函数规模非常小,输入和输出都是8比特,且轮函数没有用S盒,只使用循环移位、异或和模加操作。

HIGHT所采用的广义Feistel结构对轻量级密码来说是个好的选择。

因为既可以利用结构本身的安全特性,而且在硬件实现时不会增加代价,对于设计者来说轮函数的设计也可以自由发挥。

考虑到资源受限环境中使用的处理器,HIGHT的轮函数中使用了两个内部函数F0和F1,这两个函数提供了比特级的扩散。

既提供了良好的安全特性,而且使用了尽可能少的硬件消耗。

子密钥实在加密过程中通过密钥扩展算法得到的,所以密钥寄存器只需要存储128比特的主密钥,这使得HIGHT的应用更贴近轻量级的环境。

HIGHT的硬件实现需要3048GE,在80MHz的处理器上吞吐量为150.6Mbps。

设计者对于HIGHT的安全性进行了全面的分析。

对于差分密码分析、线型密码分析、截断差分密码分析、不可能差分密码分析、饱和攻击、飞来去器攻击、高阶差分攻击、代数攻击和相关密钥攻击都给出了相应的分析。

文献[8]对HIGHT抵抗饱和攻击的能力进行了分析,给出了22轮HIGHT的饱和攻击。

文献[9]给出了31轮HIGHT的相关密钥攻击和26轮HIGHT的不可能差分攻击。

3.1.3PRESENT

PRESENT最早发布于CHES2007,是比较有竞争力的一个轻量级分组密码,它的硬件实现需求可以和主流的流密码相媲美,所以它也被称为超轻量级密码算法。

PRESENT的整体结构采用的是31轮的SP结构,每轮由轮密钥加、混淆层、扩散层P三部分组成。

算法分组长度为64比特,密钥长度80比特或128比特。

设计者声称对于资源受限环境80比特密钥已足够,不建议使用128比特密钥。

PRESENT的混淆层由16个4×4的S盒并置而成,S盒的硬件实现性能不错,其GE数远远小于8×8的S盒,而且使用相同的S盒,可以使用串行实现,牺牲一些效率来换取更小的实现面积。

扩散层P是比特置换,这几乎可以说是硬件实现效率最高的操作,因为在硬件实现中只需要线路的变化即可完成。

PRESENT面向硬件的设计使得它有很好的硬件实现效率:

实现PRESENT-80的GE数只需要1570,在频率为100KHz的芯片上吞吐量能达到200kbps,模拟测得的能量消耗只需要5μW,这些数据使得PRESENT在轻量级密码中极具竞争力。

设计者在考虑实现效率的同时,也没有忽略安全性。

PRESENT选取的4×4的S盒具有很好的密码特性,不仅考虑了抵抗差分攻击的特性,还增加了加强雪崩效应的性质。

设计者给出证明,任何5轮差分特征至少有10个活动S盒。

而且由于扩散层P是面向比特的,所以很多杜宇AES有效的面向字节攻击都无法发挥作用。

当然PRESENT在8位处理器上的性能没有优势。

自从PRESENT提出之后,算法分析人员对其作了一系列的分析工作。

文献[9]提出了对17轮PRESNET的相关密钥矩阵攻击,攻击时间复杂度为2104次内存访问。

文献[10]采用代数攻击与侧信道攻击结合哦方法给出了PRESENT的代数侧信道攻击,在已知明密文且得到连续17轮侧信息的情况下,可以高于60%的成功率会付出密钥。

文献[11]基于立方攻击结合侧信息恢复PRESENT的密钥,如果第三轮的输出有泄漏,便能恢复PRESENT的80比特密钥。

3.1.4MIBS

密码算法MIBS[12]是MaryamIzadi等人在CANS2009上提出的一个轻量级分组算法。

分组长度为64比特,密钥长度有64比特和80比特两个版本。

整体结构采用Feistel结构,加密过程包括32轮。

轮函数包括轮密钥加、S盒替代及P扩散,各步操作均是面向4比特的结构。

S盒采用8个相同的4×4的S盒,P层采用的是4比特宽度的异或和交换。

MIBS结构简单,F函数的实现跟PRESENT的轮函数相似,都是SP结构,只不过在P扩散时,MIBS采用了异或的方式,而PRESENT是比特置换的方式。

在这一步操作中,PRESENT的硬件实现要比MIBS具有更好的实现优势。

基于简单的设计结构,MIBS-64的硬件实现只需要1400GE,而MIBS-80的实现需要1530GEs,跟PRESENT的实现差不多。

在100kHz的处理器环境下,它的吞吐量也跟PRESENT的相当,都是200kbps。

MIBS的扩散层分支数为5,设计者理论证明32轮MIBS的差分活跃S盒数目至少为44,由此得到最大差分特征概率的一个上界为2-88次方。

文献[13]给出了MIBS的4轮差分特征最大概率为2-12,并给出r(

)轮的差分特征和13轮MIBS的分析算法。

文献[14]提出了一种针对MIBS的宽度差分故障分析方法,并通过实验验证表明,由于其Feistel结构和S盒特性,MIBS易遭受宽度故障攻击,通过在第32轮和第31轮分别导入1次32位故障即可将64位主密钥降低到21.70位,经过1秒钟暴力破解恢复完整密钥。

3.1.5KATAN&KTANTAN

KATAN&KRANTAN[15]是一族轻量级密码,共包括6个密码算法,分成两组,密钥长度均为80比特。

第一组称为KATAN,包含3个算法,分组长度分别为32比特、48比特和64比特。

第二组称为KTANTAN,这一组有更好的硬件特性,与前一组不同的地方在于,密钥的存储及子密钥的生成方式。

KATAN算法族采用相同的基础组件,组件的设计融入了流密码的思想。

算法采用了流密码Trivium的两个寄存器作为分组密码轮函数的基础组件。

每一轮从寄存器取出一些比特,通过两个非线性布尔函数对取出的比特进行作用,将得到的结果放入寄存器末端。

为了保证充分的混淆,算法执行254轮。

为了更好的满足受限环境的面积限制,以及提供更好的安全性,在计算轮数时设计者没有采用传统的计数器方式,而是采用了一个8比特的线性反馈移位寄存器。

算法的这种结构设计大大降低了实现所需要的硬件面积。

KATAN-32的实现只需要802GEs,KATAN-48需要927GEs,KATAN-64需要1054GEs。

KTANTAN有更好的面向硬件的实现特性,因为考虑到很多RFID环境中的密钥在声明周期内一般不会更换,所以KTANTAN采用的是将密钥固定在设备中的方式,这一点和CGEN是相同的。

经过对密钥部分的改进,KTANTAN-32实现所需的GE数为462,KTANTAN-48需要的GE数为588,KTANTAN-64需要的为688。

可以看出KTANTAN比KATAN类需要的GE数大幅减少。

设计者对于KATAN&KTANTAN的安全性给出了详细的分析和说明。

作为设计目标,设计者提出,KATAN&KTANTAN族对于差分密码分析、线性密码分析、组合攻击,相关密钥攻击及代数攻击都是安全的。

文献[16]给出了使用80比特密钥的KATAN&KTANTAN的中间相遇攻击,其中对全轮KTANTAN-32的攻击仅需3个明密文对,对248轮KTANTAN-64和251轮KTANTAN-48的攻击仅需2个明密文对。

由于攻击所需的数据复杂度非常小,所以对于RFID等资源受限的环境是有威胁的。

3.1.6LBlock分组密码

LBlock[17]是中国科学院软件研究所吴文玲、张蕾等于2011年设计的一个轻量级分组密码,中文名称称为“鲁班锁”,LBlock是Lubanlock的缩写,也有LightweightBlockcipher的意思。

和大多数轻量级分组密码一样,LBlock的分组长度为64比特,密钥长度为80比特。

在PRESENT同样的实现环境下,设计者对LBlock算法的硬件实现性能进行了评估,并与PRESENT等其他轻量级分组密码进行了比较,结果如表1所示。

对于LBlock算法,采用最常见的并行实现方案,加密算法采用64比特数据通路,每个时钟周期加密一轮,轮函数中的8个S盒并置不重用。

则用80比特密钥加密64比特明文共需要32个时钟周期,占用1320GE。

除此之外,还可通过充分复用寄存器和S盒实现面积更加紧凑的方案,实现LBlock算法仅需要866.3GE(需借助RAM)。

此时,密钥扩展算法生成每个轮密钥需要12个时钟周期,加密算法需要192个时钟周期,因此用80比特密钥加密64比特明文共需要576时钟周期。

在LBlock算法的设计过程中,除了硬件实现性能外,还兼顾了算法在8位、32位等平台上的软件实现性能。

因此算法中的P置换没有选择常用的比特置换,而是以4比特为单位进行块的置换,同时选取循环移位数为8,使得算法在8位等平台上的实现与其他轻量级密码算法相比有较大优势。

比如,PRESENT加密一个明文分组需要10723时钟,而LBlock仅需要3955时钟。

设计者声称LBlock对差分密码分析、线性密码分析、不可能差分密码分析、相关密钥攻击等具有足够的安全冗余。

在进行不可能差分密码分析时,设计者只构造了14轮的不可能差分链,对19轮的LBlock算法进行了攻击,而文献[18]利用一个特殊的相关密钥差分特征,将相关密钥与不可能差分相结合,构造出了15轮的相关密钥不可能差分链,提高了攻击的轮数,并指出将多种攻击方法相结合有可能进一步提高对LBlock算法的攻击轮数。

3.1.7Hummingbird

Hummingbird[19]是2010年提出的一种超轻量级的加密算法,设计者声称是受到众所周知的Enigma密码机的启发而设计的,其目标平台为低成本的资源受限的智能设备。

Hummingbird具有分组密码和流密码的混合结构,所以严格说它既不是分组密码也不是流密码,而是一种具有新的转动步骤(rotor-stepping)的旋转机。

Hummingbird的设计是基于分组密码和流密码的简单结合,具有16比特的分组长度、256比特的密钥长度和80比特的内部状态。

Hummingbird的密钥长度和内部状态为许多嵌入式应用提供了足够的安全性。

设计者分别提供了Hummingbird在8位微控制器ATmega128L上和16位微控制器MSP430上的高效的软件实现,并在同样的平台上和同样是超轻量级的PRESENT算法就代码长度优化实现和速度优化实现进行了比较。

结果表明,对于代码长度优化的实现和速度优化的实现,Hummingbird的吞吐率分别是PRESENT的147倍和4.7倍。

文献[20][21]给出了Hummingbird基于FPGA的硬件实现情况。

笔者在XilinxSpartan-3系列和Vertex-5系列FPGA上实现了Hummingbird算法,并与其它已公布的轻量级分组密码在同样平台上的实现进行了比较。

实验表明Hummingbird在低成本的FPGA上的实现具有值得称赞的效率和较低的面积要求。

Hummingbird的设计者声称该轻量级密码能够抵抗目前大多数针对分组密码和流密码的攻击,包括生日攻击、差分和线性分析、结构攻击、代数攻击以及立方攻击。

2011年Hummingbird的设计者又在Hummingbird的基础上提出了具有128比特密钥和64比特初始向量的轻量级认证加密算法Hummingbird-2[22],该算法仍是为低端微控制器和轻量级硬件设备如RFID标签和无线传感器而设计的。

与先前的Hummingbird比较,为了应对针对Hummingbird的深入分析,Hummingbird-2的内部状态已经增加到128比特,并且从状态到混淆函数的平均信息量的流动也得以提升。

设计者声称Hummingbird-2能抵抗先前已知的所有密码分析攻击。

由于Hummingbird-2提出不久,所以其安全性是否如设计者声称的那样还有待大量的分析和攻击。

3.2流密码

3.2.1WG-7

WG-7[23]是由Y.Luo、Q.Chai、G.Gong和X.Lai等人于2010年设计的一个面向字的轻量级流密码,适合于低成本和轻量级的应用(如RFID标签和移动电话)。

密钥长度为80比特。

WG-7采用过滤生成器结构设计,其LFSR定义在有限域GF(27)上,非线性过滤函数采用WG-变换,具有理想二值自相关。

由于过滤生成器结构容易遭受快速相关攻击和代数攻击的威胁,WG-7刚发表不久就立即被攻击。

M.Orumiehchiha,J.Pieprzyk和R.Steinfeld给出两种攻击方法,其中区分攻击仅需要213.5个密钥比特,快速代数攻击仅需要219.4个密钥比特,时间复杂度为226.9。

3.2.2Grain

Grain[24]由M.Hell、T.Johansson和W.Meier等设计,整体结构由两个80比特的NFSR和LFSR构成,有Grainv1和Grain-128[25]两个版本,分别提供80比特和128比特的安全。

Grainv1是eSTREAM计划最后的7个胜选算法之一,具有很高的安全特性。

其最初版本Grainv0由于非线性反馈函数g(x)和非线性过滤函数h(x)的选择不当而受到相关攻击。

Grain结构已受到广泛的关注,被认为是一个相对安全的结构。

Grain-128a[26]是在Grain-128的基础上发展而来的。

同Grainv1及Grain-128一样,Grain-128a设计面向资源受限的硬件环境,即要求非常低的资源消耗和功率消耗。

与Grain-128相比,Grain-128a能够抵抗自发表以来各种针对Grain-128的攻击。

值得一提的是,除了最近文献[27]提出的DynamicCube攻击,其他攻击都没能对Grain-128造成有效威胁。

此外,Grain-128a能够支持认证机制。

在ISO/IECWD29167-13部分也选用Grain-128a作为空中接口的加密套件。

Grain系列算法有一个重要的特征,即通过增加少量的硬件开销能够成倍地提升算法输出的吞吐量。

文献[28]采用2倍速的Grain-128a实现方案,选用Xinlinx公司的Spartan3E系列的FPGA芯片xc3s500e-4-pq208,算法大约需要3000个门阵列。

笔者指出其实现的时钟频率能够达到176MHz,每个时钟周期输出2位数据,输出N位的密钥流(包含密钥输入及初始化过程)仅需要(65+128+N/2)个时钟周期。

如果在125kHz的RFID系统上使用,加密或解密1024位的数据大约需要5ms,能够满足实际需求。

3.2.3A2U2

A2U2[29]是由丹麦学者D.Mathieu、C.Damith和L.Torben等于2011年提出的一个轻量级流密码,拟用于RFID电子标签加密的候选算法。

A2U2具有很低的硬件实现代价,是最轻量级的流密码算法之一,其硬件实现仅需284GE。

A2U2有效密钥长度为61比特,由2个NFSR和1个计数器组成。

针对A2U2,文献[30]在选择明文攻击模式下给出了一个非常有效的攻击方法,文献[31]随后改进了上述攻击,并进一步提出了一个在已知明文攻击模式下猜测确定攻击,其时间复杂度为249×C,这里C为求解一个56比特变量的线性方程组的复杂度。

文献[32]进一步给出了在已知明文攻击模式下的实时密钥恢复攻击,其时间复杂度大幅降到224,可以在个人PC上数秒钟内恢复出全部密钥。

这意味着A2U2算法已被彻底破解。

4.轻量级密码的硬件实现效率评估

安全性通常是密码算法评估的重要部分,轻量级密码也不例外。

但是,由于资源受限环境的特点:

加密数据量小,密码算法使用频率低,对于算法安全性通常只要求中级安全,能耗、成本及存储等方面有非常严格的限制;所以在保证一定安全性的情况下轻量级密码设计的重要问题就是实现效率。

而轻量级密码算法的应用环境一般要求算法用硬件实现,所以具体来说首要考虑的是硬件实现效率。

硬件效率可以用多种不同的指标衡量,如最长路径(或最大频率)、时钟周期、能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1