Linux crypto相关知识的汇总 Linux加密框架crypto中的算法和算法模式(一)

Linux加密框架中的算法和算法模式

对称密码算法

  • 对称密码算法分为分组密码算法和序列密码算法两种,其中分组密码算法将是对称密码算法的发展趋势重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成,其中密钥扩展算法将b字节的密钥扩展成r个子密钥。加密算法有一个密码学上的弱函数f与r个子密钥迭代r次实现。
  • 加密框架中支持的对称密码算法基本上都是分组密码算法,但是也支持序列密码算法,只是将序列密码算法定义为分组长度为1的特殊的分组密码算法。

DES和3DES算法

  • DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标注(FIPS),并授权在非密级政府通信中使用。3DES(即Triple DES)是DES向AES过渡的加密算法,是比DES更安全的一种变形,3DES使用2条56位的密钥对数据执行三次DES算法,加密过程是加密e-解密d-加密e,解密过程是解密e-加密d-解密e。
  • 加密框架支持DES算法和3DES算法,记为des和3des_ede,实现源码为des_generic.c。
  • des_generic.c - crypto/des_generic.c - Linux source code (v5.15.11) - Bootlin

AES算法

  • AES全称Advanced Encryption Standard,即高级加密标准,在密码学上又称为Rijndeal算法,是美国联邦政府采用的一种区块加密标准,用来替代原先的DES算法。AES的基本要求是采用对称分组密码体制,密钥的长度最少支持128、186、256位,分组长度为128位。
  • 2000年10月2日,美国政府正式宣布选中比利时密码学家Joan Deamen和incent Rijmen提出的Rijndeal算法组为AES。严格地说,AES和Rijndeal算法并不完全一样,虽然在实际应用中二者可以互换,因为Rijndeal算法支持更大的分组和密钥长度。Rijndeal算法使用的密钥和分组长度均为32的整数倍,下限为128位,上限位256位。性能而言,AES的运算速度远大于3DES,安全性不低于3DES。
  • 加密框架支持AES算法,记为aes,实现源码为aes_generic.c。
  • aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.11) - Bootlin

Blowfish算法

  • Blowfish(河豚)算法是由Bruce Schneier设计的一个完全开源的算法。Blowfish算法是一个分组长度为64位、密钥长度可变的对称分组密码算法。Blowfish算法具有加密速度快、紧凑、密钥长度可变、可免费使用等特点,已被广泛应用于众多加密软件。由于Blowfish算法采用变长密钥,这在给用户带来极大便利的同时也有隐患。由于算法加解密核心在于密钥的选择和保密,但在实际应用中经常使用一些弱密钥对信息资源进行加密,导致存在很大的安全隐患。
  • 加密框架支持Blowfish算法,记为blowfish,实现源码为blowfish_generic.c和blowfish_common.c。 
  • blowfish_common.c - crypto/blowfish_common.c - Linux source code (v5.15.11) - Bootlin
  • blowfish_generic.c - crypto/blowfish_generic.c - Linux source code (v5.15.11) - Bootlin

Twofish算法

RC4算法

  • RC4算法是Ronald Rivest在1987年设计的密钥长度可变的流加密算法簇,之所以称其为簇,是因为其核心部分的sbox可为任意长度,但一般为256字节。RC4算法的速度可达到DES算法速度的10倍左右,且具有很高级别的非线性。RC也成为ARC4(Alleged RC4,即所谓的RC4),因为RSA从未正式发布过这个算法。
  • 加密框架支持RC4算法,记为arc4,实现源码为arc4.c。 
  • arc4.c - crypto/arc4.c - Linux source code (v5.15.11) - Bootlin

CAST算法

  • CAST算法包括CAST5(也称CAST-128)和CAST6(也称CAST-256)两种,由Carliasle Adams和Stafford Tavares分别于1996年和1998年提出的,其中CAST5是一种类似DES的置换组合网络(SPN)加密系统,而CAST6是作为AES的竞选算法提出的。
  • CAST5是一种12或16循环的Feistel密码,块长度为64位,密钥长度可变,从40位到128位按8位递增,并且只有当密钥长度大于80位时,才允许使用16循环。CAST6是一种48循环的Feistel密码,块长度位128位,密钥长度可变,从128位到256位按32位递增。
  • 加密框架支持CAST5和CAST6算法,记为cast5和cast6,实现源码为cast5.c和cast6.c。
  • 注:CAST128和CAST5是同一的,不是指使用128位密钥。为区分不同密钥长度的操作,在算法名后需要加上密钥长度,如使用40位密钥时表示为CAST5-40,使用128位密钥时表示为CAST5-128。 
  • cast5_generic.c - crypto/cast5_generic.c - Linux source code (v5.15.11) - Bootlin
  • cast6_generic.c - crypto/cast6_generic.c - Linux source code (v5.15.11) - Bootlin

 TEA算法

  • TEA(Tiny Encryption Algorithm)算法是由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年提出的一种分组密码算法,块长度为64位,密钥长度为128位。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每次的加密结果是不同的。TEA算法的迭代次数是可变的,建议为32轮。例如腾讯公司的产品使用到了TEA算法,但迭代次数不是标准的32轮而是16轮。TEA算法简单易懂,容易实现,但存在很大的缺陷,如相关密钥攻击。TEA经历了多个版本,包括XTEA、Block TEA和XXTEA等。
  • 加密框架支持TEA算法及后续的XTEA和Block TEA算法,记为tea、xtea和xate,其实现源码为tea.c。
  • tea.c - crypto/tea.c - Linux source code (v5.15.11) - Bootlin

Khazad算法

  • Khazad算法是由Paulo.S.L.M.Barreto和Vincent Rijmen于2000年联合提出的。Khazad算法是欧洲NESSIE(new European Schemes for signature、integrity and encryption)密码计划中进入第二阶段的候选加密算法之一。Khazad算法的分组长度为64位,密钥长度为128位。Khazad算法采用对合结构,加密和解密仅在密钥生成算法上存在差异。
  • 加密框架支持Khazad算法,记为khazad,其实现源码为khazad.c。
  • 注:Khazad算法名称选自科幻小说《指环王》中的虚拟地址。 
  • khazad.c - crypto/khazad.c - Linux source code (v5.15.11) - Bootlin

 Serpent算法

  • Serpent算法是由Ross Anderson、Eli Biham和Lars Krcudsen联合开发的。Serpent算法是进入NIST第二轮AES筛选的5个算法之一,满足AES的基本要求。
  • 加密框架支持Serpent算法,记为serpent,其实现源码为serpent.c。
  • 注:Serpent意为大蛇,圣经中记载Serpent是撒旦的化身,是其引诱夏娃吃下禁果的。
  • 注:Rijndael、Serpent和Twofish是入围第三轮AES筛选的三个算法,性能方面,Serpent被认为是最安全的,Rijndael速度最快,Twofish居中。
  • serpent_generic.c - crypto/serpent_generic.c - Linux source code (v5.15.11) - Bootlin

Anubis算法

  • Anubis算法是一种分组对称算法,块长度为128位,密钥长度从128位到320位可变。
  • 加密框架支持Anubis算法,记为anubis,其实现源码位anubis.c。
  • 注:Anubis意为埃及神话中的阿努比斯神,引导亡灵的神,豺头人身神。
  • anubis.c - crypto/anubis.c - Linux source code (v5.15.11) - Bootlin

 Camellia算法

  • Camellia(山茶花)算法是由三菱和日本电报电话(NTT)联合发布的,被欧盟NESSIE项目列为选定算法,被日本CRYPTREC项目列为推荐算法。Camellia算法块长度为128位,密钥长度128位、192位和256位可选,具有和AES同等级的安全强度和运算量。
  • 加密框架支持Camellia算法,记为camellia,其实现源码为camellia.c。
  • camellia_generic.c - crypto/camellia_generic.c - Linux source code (v5.15.11) - Bootlin

哈希算法 

MDx系列算法

  • MDx系列算法是应用范围非常广泛的一个算法家族,其中MD是Message Digest(消息摘要)的缩写,x表示算法版本(如MD2、MD3、MD4、MD5)。MDx系列算法最早由Ron Rivest(RSA公司)于1992年提出的,MD2、MD4、MD5都产生16字节(128位)的校验值(hash值)。目前主流的MDx系列算法为MD5,但已被中国山东大学王小云教授攻破,可以快速找到碰撞(摘要相同的不同消息)。
  • 加密框架支持MDx系统算法中的MD4和MD5,分别记为md4和md5,其实现代码分别为md4.c和md5.c。
  • md4.c - crypto/md4.c - Linux source code (v5.15.11) - Bootlin
  • md5.c - crypto/md5.c - Linux source code (v5.15.11) - Bootlin

 SHA系列算法

 

 Whirlpool算法

  • Whirlpool算法是由Vincent Rijmen和Paulo S.L.M.Barreto于2000年提出的,号称最安全的摘要算法,其摘要长度为512位,已被列入ISO标准。从发布至今共经历了三个版本,分别为whirlpool-O、Whirlpool-T和Whirlpool。
  • 加密框架除支持标准的摘要长度为512位的Whirlpool算法i外,还支持摘要长度分别为256和384位的Whirlpool算法,分别记为wp512、wp256和wp384,其实现代码为wp512.c
  • wp512.c - crypto/wp512.c - Linux source code (v5.15.11) - Bootlin

Tiger算法

  • Tiger算法是由Ross Anderson和Eli Biham于1996年提出的,号称最快的摘要算法,并且专门为64位机器进行了性能优化。Tiger算法的摘要长度位192位。
  • 加密框架除支持标准的摘要长度为192位的Tiger算法外,还支持摘要长度截短为128位和160位的Tiger算法,分别记为tgr192、tgr128和tgr160,其实现代码为tgr192.c。 
  • 未找到 

RIPEMD算法

  • RIPEMD(RACE Integrity Primitives Evaluation Message Digest)算法是Hans Dobbertin等3人在MD4、MD5算法基础上于1996年提出的。RIPEMD算法支持128、160、256和320位共4种摘要长度。
  • 加密框架支持摘要长度为128、160、256和320位的RIPEMD算法,分别记为rmd128、rmd160、rmd256和rmd320,其实现源码分别为rmd128.c、rmd160.c、rmd256.c和rmd320.c。
  • 只剩下 rmd160
  • rmd160.c - crypto/rmd160.c - Linux source code (v5.15.11) - Bootlin

CRC32算法

 GHASH函数

其他算法

 伪随机生成算法

  • 伪随机数生成算法(PRNG:Pseudo Random Number Generator)
    • a)符合ANSI标准的伪随机数生成算法,记为stfrng,算法驱动名为ansi_cprng,实现源码为ansi_cprng.c。
    • b)基于内核RNG的伪随机数生成算法,也记为stdrng,但其算法驱动名为krng,实现源码为krng.c。    未找到
  • ansi_cprng.c - crypto/ansi_cprng.c - Linux source code (v5.15.11) - Bootlin
  • 注:在ansi_cprng.c中,还定义了一种符合FIPS(Federal Information Processing Standard,即联邦信息处理标准)的伪随机数生成算法,记为fips(ansi_cprng),但必须在宏开关CONFIG_CRYPTO__FIPS开启时才有效。

压缩算法

  • c)zlib算法,记为zlib,实现源码为zlib.c  未找到

NULL算法

  • 除上述常规算法外,加密框架还支持一种特殊的算法,即什么都不做的NULL算法。NULL算法的实现源码为crypto_null.c,其中定义了名为digest_null、cipher_null和compress_null三种NULL算法,即NULL摘要算法、NULL加密算法和NULL压缩算法
  • 在加密框架中,NULL算法主要用作复合算法的填充算法。例如,IPSEC中ESP协议在提供加密服务的同时还提供可选的认证服务,而Linux的IPSEC实现(即XFRM框架)将ESP协议的加密服务和可选的认证服务统一定义为认证加密(AEAD)服务。认证加密服务可以由一个认证加密算法实现也可以由一个认证算法和加密算法组成的复合算法实现。由于认证服务是可选的,当一个ESP协议对应的安全关联SA未定义认证算法时说明未启用认证服务,此时复合算法中的认证算法就是上面定义的NULL摘要算法。
  • crypto_null.c - crypto/crypto_null.c - Linux source code (v5.15.11) - Bootlin

参考链接

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值