原文:HTTPS://ARXIV.ORG/PDF/1504.04306.PDF
编译:北京安御道合科技有限公司技术总工程师 谢依夫
摘要
本⽂旨在对适⽤于物联⽹(IoT)领域的各种密码库进⾏调查和⽐较分析。本⽂的前半部分简要介绍了密码学领域中可⽤的各种密码学库,以及库中包含的所有算法的列表。本⽂的后半部分讨论专⻔⽤于物联⽹领域的加密库。本⽂中列出的各种库及其性能分析从各种来源进⾏了合并,⽬的是提供⼀个综合的存储库,以供参考各种加密库并对其在IoT中的功能进⾏⽐较分析。
关键词:ECC, wolfSSL, RELIC, AvrCryptoLib, TinyECC, WiseLib
1、引⾔
加密领域中加密和解密的实现,为⽤户之间来回传递消息提供了⼀种可靠⽅法,同时,不会增加消息被恶意⼈员损害的⻛ 险。通过使⽤⼀组特定的算法,可以通过各种⽅式([3],[7],[15])执⾏这样的加密-解密操作。密码学库是可⽤于密码学⽬ 的的各种算法的存储库,它提供了附加功能,可根据算法的性能和功能将众多算法分类为特定的集合。在物联⽹领域,低计 算能⼒的微处理器和嵌⼊式设备在使⽤互联⽹基础设施进⾏信息交换⽅⾯起着⾄关重要的作⽤。由于计算能⼒的限制和安全 交换信息的必要性要求,需要实施专⻔优化的算法以在资源受限的环境中运⾏。因此,针对微处理器和嵌⼊式设备中使⽤的 密码库,可以为物联⽹设备提供必要的安全层、并在保护整个物联⽹基础设施⽅⾯起着⾮常重要的作⽤。
2、概述
在本⽂中,第3节将简要介绍可⽤于⼀般加密的各种加密库。它还将列出各种加密库中可⽤的所有加密算法。在第4节中,我 们将详细讨论IoT中的各种加密库。在第5节中,我们将基于第4节中讨论的各种加密库的独特功能进⾏⽐较分析。我们在第6 节中总结了本⽂。
3、密码库
包含多种加密算法的密码库,可以实现在各个领域中对不同消息进⾏加密的功能。这些密码库通过使⽤包含的算法,可以实 现各种安全措施([11])。下⾯列出了⼀些最著名的密码库([5])及其加密算法:
1) Borzoi:
“ borZoi”密码库实现基于GF2m有限域上的椭圆曲线的算法(因此称为“椭圆曲线密码术库”)([1],[4], [9],[10],[14],[36])、它实现了以下算法:
a. ECDSA(椭圆曲线数字签名算法)
b. 椭圆曲线Diffie-Hellman密钥协商⽅案
c. ECIES(椭圆曲线集成加密⽅案)
borZoi还提供基于AES对称加密⽅案和SHA-1算法的数字签名。
2) Crypto ++:
⽤C ++编写的,该密码库实现了各种算法,从经过身份验证的加密⽅案(如GCM,CCM等)到基于椭圆 曲线的算法(如ECDSA,ECNR等)[13]。Crypto ++实现的各种算法如下([2]):
a. GCM, CCM, EAX b. AES (Rijndael), RC6, MARS, CAST-256, Twofish, Serpent c. Panama, Sosemanuk, Salsa20, XSalsa20 d. IDEA, Triple-DES, Camellia, SEED, XTEA, Skipjack, SHACAL-2, RC5, Blowfish e. ECB, CBC, CTS, CFB, OFB, CTR f. VMAC, HMAC, CBC-MAC, GMAC, Two-Track-MAC g. SHA-1, SHA-2, SHA-3, WHIRLPOOL, Tiger, RIPEMD-128, RIPEMD-256, RIPEMD-160, RIPEMD-320 h. ECDSA, ECNR, ECIES, ECMQV, ECDH i. MD2, MD4, MD5, Panama Hash, Square, GOST, SAFER, SEAL 3.0, DES, ARC4, DESX, RC2, 3-WAY, WAKE-OFB, CAST-128, SHARK j. Diffie-Hellman, XTR-DH, DH2, MQV, LUCDIF k. PKCS#1 v2.0, OAEP, PSS, IEEE P1363 EMSA2-EMSA5, PSSR l. ESIGN, LUC, RSA, DSA, ElGamal, RW, NR, DLIES
3) Libmcrypt:
“ libmcrypt”加密库提供数据加密,并且是线程安全的。这个特定的库包含⼀组本质上是模块化的加密算 法和模式。这种性质允许算法和加密模式以⾮常有效的⽅式运⾏。下⾯列出了该库框架中包含的各种算法:
xTEA,CAST-128,CAST-256,DES,3DES,3-WAY,BLOWFISH, TWOFISH,WAKE,PANAMA,RC2,RC6,ARCFOUR,RIJNDAEL, CBC,ECB,SAFER,SAFER+,SAFER K-64,SAFER K-128,SAFER SK-64,ENIGMA,IDEA,SERPENT,STREAM,CFB,OFB,NOFB,NCFB,CTR
4) Botan(以前称为OpenCL):
加密库是⽤C ++编写的,并在BSD2下获得许可。后来通过“Card Verifiable Certificate”来实施 (ePassports)电⼦护照,Botan的修订版“证书” 被称为“ InSiTO”。该库包含许多加密格式,算法和协议 是:
TLS,SSL,PKCS,PKCS#3,PKCS#5,RSA,DSA,X.509CRL,Parts of1363,diffle-Hellman
5) Libgcrypt:
以C语⾔编写,“ libgcrypt”是GNU许可的多平台密码库。它具有多重精度算法实现和熵收集⼯具。
IDEA,3DES,SERPENT(128/192/256bits),CAST5,BLOWFISH,AES128/192/256,TWOFISH(128/256bits), ARCFOUR,DES,RON"s Cipher2(40/128bits),SEED,Camellia(128/192/256bits),Salsa20/12,GOST2814789,STREAM,GCM,CCM,RFC3394,CFB,CBC,ECB,OFB,CTR,RSA,DSA,ELGamal,ECDSA,EdDSA,CMAC,GMAC,HMAC,SHA1,TIGER,RIPEMD-160,MD4,MD5,TIGER/192, TIGER2,SHA-224,Whirlpool,GOSTR 34.112012(256/512bits),SHA256/384/512, ISO3309,RFC1510,RFC2440,GOSTR34.11, RFC4880,PBKDF2,SCRYT
6) Bouncy Castle:
这个特定的密码库⽤Java和C#([41])编写。设计主要⽤于计算内存较低的设备,此库包含:
PKCS#10,DANE,DVCS,OCSP,DTLS,OpenPGP,CRMF,CMP,TSP,TLS,PKCS#12,CMS,S/MIME,DTLS
7) cryptlib:
“ cryptlib”加密库是⼀个提供信息交流安全性的算法库,使其⾮常易于使⽤,其分层结构(较低层都提供抽象 层,较⾼的层涵盖算法的实现细节)。使得整个lib库⾮常安全且不受渗透、⼊侵的程度很⾼。内部的各种算法如下:
SSL,TLS,SSH,S/MIME,OpenPGP,CMP,SCEP,RTCS,OCSP,X.509V1,SET,Microsoft AuthentiCode, RPKI,SigG,Identrus,PKCS#7,RTCS,OCSP,CA,X.509v3
8) Catacomb:
“ Catacomb ”加密库使⽤gcc编写的,此密码库包含⼀组密码原语,并⽤于Linux操作系统。该库中算法的 类别与其他众多类别不同。内部的各种算法如下:
BLOCK Cipher,HASH functions,Multi-precision Maths Library,Public Key,Algorithms
9) Catacomb:Cryptix:
“ Cryptix”(例如Cx)加密库提供Java平台上的加密算法库,在Java中采⽤加密技术存在⼀些问 题,随着取消对密码的出⼝管制,使⽤“ Cryptix”(上⼀次积极开发是在2005年)加密技术的可⽤性不断提⾼内部的各种 算法如下:
Cx OpenPGP, Cx Perl Cx Perl PGP, Cx JCE, Cx SASL Cx ASN.1, Cx v3.1.3, Cx v3.1.3.PGP, Cx v3.2.0, Cx v3.2.0PGP, CxAES Kit,Cx Elliptix
10) Flexiprovider:
此加密库旨在对基于JCA(Java密码体系结构)构建的任何应⽤程序进⾏加密。该加密⼯具包:
CoreProvider(包含PKCS#1、3DES等算法),ECProvider(包含基于椭圆曲线的算法(例如ECDH密钥协商⽅ 案,ECDSA等),PQCProvider(包含四个变体的McEliece密码系统,( CFS签名⽅案等)和NFProvider(包含 IQRDSA,IQDSA,IQGQ等)
11)LibTomCrypt:
“ LibTomCrypt”加密库是具有基本加密元素的开源库
12)MatrixSSL:
“ MatrixSSL”密码术库是为占⽤空间较⼩的设备和应⽤程序⽽设计的。它是嵌⼊式SSL和TLS的实现,它包含各种对称密钥和公钥算法。该库中包含的⼀ 些流⾏算法如下所示:
RSA,Diffie-Hellman,Elliptic Curve Cryptography,AES,AES-GCM,SEED,ARC4,3DES
13)MIRACL:
是⼀个具有多精度整数和Rational算法的C加密库。设计⽤于环境和能⼒受限的场景。>14)Mozilla的 NSS:NSS(⽹络安全服务)加密库有助于实现基于服务器的加密应⽤程序。它主要⽀持以下安全性算法:
SSL,S/MIME,TLS,PKCS#11
14)OpenPGP:
此密码库是开放的PGP(⾮常好的隐私)的源代码变体,⽤于确保最终⽤户的隐私并提⾼安全性。
15)OpenSSL:
以C语⾔编写,“ OpenSSL”是加密算法的多功能、多平台库。它是根据以下条款获得许可的开源库 Apache许可证1.0和4⼦句BSD许可证。它实现各种SSL协议和TLS协议。各种种类“ OpenSSL”实现的算法如下:
3DES,RC2,RC4,RC5,BLOWFISH,Camellia,AES,SEED,CAST-128,IDEA,DES,MD2,MD4,MD5,SHA-1,SHA2,RIPEMD-160,MDC-2,DSA,RSA,Diffie-Hellman,Elliptic Curve, GOST R34.11-94,GOST R34.102001,GOST28147-89
16) Nettle:
这是⼀个低级别的多平台加密库。具有GNU Lesser General的公共许可证。其中的各种算法加密库如下:
AES BLOCK C ipher,RC4,RC2,BLOWFISH,Camellia,CAST-128,DES,3DES,ChaCha STREAM Cipher, GOSTHASH94,RSA,DSA,ECDSA,TWOFISH,SHA-3,SHA224,SHA256,SHA384,SHA512,SHA1,SERPENT,RIPEMD160,Salsa20,UMAC,POLY1305,PBKDF2,MD2,MD4,MD5,YarrowpRNG
4、IOT适⽤的密码库
1 WolfSSL:
以前称为CyaSSL,以ANSI C编写的“ wolfSSL”密码库, 其占字节数量⼩,运⾏时内存低,旨在⽤ 于嵌⼊式设备,RTOS和⾯临计算资源受约束的环境。这个lib库⽀持跨平台算法的开发,并包含⼤量算法。⽽且它 具有密钥和证书的⽣成功能。“ wolfSSL”已获得GNU通⽤公共许可证GPLv2。包含算法如下所示:
2 AvrCryptoLib:
根据GPLv3的许可,“ Avr-Crypto-Lib”密码库在AVR 8位微控制器中实现了其加密算法([34])。与旨在 ⽤于物联⽹领域的所有其他密码学库⼀样,就可⽤的计算内存和⼤⼩⽽⾔,“ Avr-Crypto-Lib”针对资源受限的环境进⾏了 优化。
除上述算法外,“ Avr-Crypto-Lib”还提供MAC功能和伪随机数⽣成器(PRNG)。
3 WiseLib
“ Wiselib”加密库是⽤C ++编写的,旨在⽤于联⽹的嵌⼊式设备([12],[35])。使⽤“ Wiselib”,个⼈可以编 译使⽤其各种内部算法(例如路由算法),包括Contiki,iSense,Shawn(传感器⽹络的模拟器)等。类似于Boost和 CGAL的模板的使⽤有助于为各种平台编写的各种通⽤代码和与平台⽆关的代码的⾼效编译。
4 TinyECC
TinyECC是⼀个基于椭圆曲线密码学的库,可以执⾏基于ECC的PKC操作([25],[29])。TinyECC的⼀ 些最突出的特征是:
1. 提供ECDSA(数字签名)
2. ECIES,公钥加密⽅案
3. ECDH,密钥交换协议
5 RelicToolKit
“ RELIC⼯具箱”加密库是根据LGPL v2.1(及更⾼版本)许可的,是⼀种⾼效且灵活的元⼯具箱 ([21])。“ RELIC⼯具箱”的主要⽤途是可⽤于构建⾃定义密码⼯具箱。
“ RELIC⼯具箱”实现的各种算法如下:
1. 多精度整数算法
2. 双线性图和扩展字段与双线性图有关
3. 椭圆曲线
4. 素数和⼆进制场算术
5. 密码协议
下表列出了RELIC实现的各种加密协议:
5、物联⽹中的密码库的⽐较分析
1 WolfSSL:WolfSSL包括OpenSSL兼容性层,以及对⽤于验证证书的OCSP和CRL的⽀持。它的运⾏时内存使⽤量在 1-36 kB之间。该库具有⾮常简单的API,它⽀持zlib压缩,IPv4和IPv6以及MySQL的集成([30])。
2 AvrCryptoLib:该密码库使⽤AVR 8位汇编语⾔中的C接⼝执⾏模块化幂运算。这导致该密码术库的执⾏时间减少。此 外,该库允许通过将这些密钥存储在闪存中来直接访问密钥。
3 WiseLib:该库仅在素数字段上实现椭圆曲线,因此避免合并汇编级别的优化程序以使其代码平台独⽴。
4 TinyECC:尽管TinyECC主要⽤于在TinyOS上运⾏的设备中运⾏,但由于可以通过⼿动更改代码部分或使⽤⼯具链将 库移植到C99,因此TinyECC可以在除TinyOS依赖的设备之外的其他设备中实现。该库还仅在素数场上实现曲线,并包 括滑动窗⼝([43])和Barrett约简([44])以进⾏验证。
5 RelicToolKit:包含多个整数算术运算符,可以轻松地在各种 平台上对该库进⾏编译。RelicToolKit在以下⽅⾯提供了⾼级定制:
1. 构建和包含所需组件仅⽤于所需平台
2. 为了在特定平台上实现⼯具包的最佳性能,需要选择各种数学优化
6、结论
通过以上对不同密码库中可⽤功能的⽐较分析,最主要的结论是,由于IoT环境中的密码库的功能不同以及针对不同特定 平台进⾏的优化,因此不能将其视为通⽤库。这导致不存在适⽤于我们周围所有物联⽹设备的单⼀通⽤标准库。此外, 每个库都包含⼀组特定于其的独特功能,并针对适⽤这些功能的平台进⾏了优化。综上所述,通过密码库的使⽤、并结 合在各种通信模式下采取的安全措施([24],[42])以及⼊侵检测系统和整体⽅案的实现([19],[27], [31]),可以保 障建设并实现更安全可靠的物联⽹基础设施,以便有更⼴泛的⼤众采⽤其设备。
参考⽂献(略)
为便于排版,已省去原文参考文献
声明:本文来自密码头条,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。