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

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

  • Linux加密框架中的算法和算法模式(一)_家有一希的博客-CSDN博客
  • 加密框架支持的密码算法主要是对称密码算法和哈希算法,暂时不支持非对称密码算法。除密码算法外,加密框架还包括伪随机数生成算法压缩算法等非密码算法。

对称密码算法

  • 对称密码算法分为分组密码算法和序列密码算法两种,其中分组密码算法将是对称密码算法的发展趋势重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成,其中密钥扩展算法将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算法

  • Twofish算法是Bruce Schneier的Counterpane公司设计的完全开源的算法。Twofish算法是进入NIST第二轮AES算法筛选5种算法之一,满足AES的基本要求。
  • 加密框架支持Twofish算法,记为twofish,其实现源码为twofish_generic.c和twofish_common.c。
  • twofish_common.c - crypto/twofish_common.c - Linux source code (v5.15.11) - Bootlin
  • twofish_generic.c - crypto/twofish_generic.c - Linux source code (v5.15.11) - Bootlin

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系列算法

  • SHA(Secure Hash Algorithm)是美国国家标准技术研究院(NIST)制定的。SHA系列算法的摘要长度分贝为:SHA1为20字节(160位)、SHA256为32字节(256位)、SHA384位48字节(384位)、SHA512为64字节(512位),其中SHA1应用较为广泛,主要应用于CA和数字证书中,但已被中国山东大学王小云教授攻破,可以快速找到碰撞。由于SHA系列算法的消息摘要长度较长,因此其运算速度与MD5相比也相对较慢。
  • 加密框架支持SHA系列算法中的SHA1、SHA224和SHA256以及SHA384和SHA512,分别记为sha1、sha224和sha256以及sha384和sha512,其实现源码sha1_generic.c、sha256_generic.c和sha512_generic.c。
  • sha1_generic.c - crypto/sha1_generic.c - Linux source code (v5.15.11) - Bootlin
  • sha256_generic.c - crypto/sha256_generic.c - Linux source code (v5.15.11) - Bootlin
  • sha3_generic.c - crypto/sha3_generic.c - Linux source code (v5.15.11) - Bootlin
  • sha512_generic.c - crypto/sha512_generic.c - Linux source code (v5.15.11) - Bootlin

 

 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算法

  • CRC(Cyclic Redundacy Checksum)是对数据的校验值,中文为循环冗余校验码,常用于检验数据的完整性。
  • 加密框架支持的CRC算法是CRC32,即数据校验值为32位,记为crc32c,其实现源码为crc32c.c。
  • crc32c_generic.c - crypto/crc32c_generic.c - Linux source code (v5.15.11) - Bootlin

 GHASH函数

  • 在加密框架中,将定义在伽罗华(Galois)域(仅含有限多个元素的域)的泛散hash函数定义为独立的算法,记为ghash,其实现源码为ghash_generic.c。 
  • ghash-generic.c - crypto/ghash-generic.c - Linux source code (v5.15.11) - Bootlin

其他算法

 伪随机生成算法

  • 伪随机数生成算法(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开启时才有效。

压缩算法

  • a)deflate算法,记为deflate,实现源码为deflate.c。
    • deflate.c - crypto/deflate.c - Linux source code (v5.15.11) - Bootlin

  • b)lzo算法,记为lzo,实现源码为lzo.c。
    • lzo.c - crypto/lzo.c - Linux source code (v5.15.11) - Bootlin

  • 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

参考链接

  • https://blog.csdn.net/weixin_43916535/category_10127981.html   加密框架专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式

参考链接 Linux加密框架中的算法和算法模式(二)_家有一希的博客-CSDN博客 对称算法 分组算法模式 ECB模式 ECB模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密如下图所示如果两个明文块相同&#xff0c…

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

参考链接 Linux加密框架中的算法和算法模式(三)_家有一希的博客-CSDN博客 对称算法 14 如上所示,在arc4.c中定义了两个与RC4算法相关的算法实现,分别为arc4和ecb(arc4),其中arc4是RC算法的算法实现,而ecb…

Linux加密框架crypto AES代码相关

例子 aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.11) - Bootlin static struct crypto_alg aes_alg {.cra_name "aes",.cra_driver_name "aes-generic",.cra_priority 100,.cra_flags CRYPTO_ALG_TYPE_CIPHER,.cra_blocks…

Linux加密框架 crypto RC4

参考链接 arc4.h Linux加密框架中的主要数据结构(一)_家有一希的博客-CSDN博客 头文件 arc4.h - include/crypto/arc4.h - Linux source code (v5.15.11) - Bootlin实现代码 arc4.c arc4.c - crypto/arc4.c - Linux source code (v5.15.11) - Bootlin…

Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common

参考链接 Linux加密框架中的主要数据结构(二)_家有一希的博客-CSDN博客 定义 通用算法说明数据结构crypto_alg的联合体成员变量cra_u中包含多种算法的个性化属性,如分组算法、块加密算法、压缩算法、伪随机数算法等,但不包含哈希…

Linux加密框架 crypto 哈希算法举例 MD5

参考链接 Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common_CHYabc123456hh的博客-CSDN博客Linux加密框架中的主要数据结构(二)_家有一希的博客-CSDN博客 MD5 md5.h - include/crypto/md5.h …

事务没提交的数据查的出来吗?_“金三银四”面试官:说说事务的ACID,什么是脏读、幻读?...

一、事务事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。--摘自百科在MySQL里,事务是在引擎层面实现,比如MyIsam不支持,InnoDB支持面试清单(Java岗):JavaJVM数…

Linux加密框架 crypto 算法模板

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin 定义 struct crypto_template {struct list_head list;struct hlist_head instances;struct modu…

Linux加密框架 crypto 算法模板 CBC模板举例

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客https://blog.csdn.net/CHYabc123456hh/article/details/122194754 CBC算法模板 cbc.c - crypto/cbc.c - Linux source code (v5.15.11) - BootlinCBC算法模板属性 1)CBC算法模板名…

leetcode数组汇总_LeetCode刷题实战43:字符串相乘

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家…

Linux加密框架 crypto 算法模板 HMAC模板举例

参考链接 Linux加密框架中的主要数据结构(三)_家有一希的博客-CSDN博客Linux加密框架 crypto 算法模板_CHYabc123456hh的博客-CSDN博客 HMAC算法模板 hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlinhmac.c - crypto/hmac.c - Linux…

判断非负整数是否是3的倍数_五年级数学因数与倍数知识点汇总与解题方法技巧...

在日常教学过程中,我发现孩子们和某些家长对学习数学的方法有一些误区,就是觉着数学,单纯就是逻辑思维,只要多做练习题就能学好,但是不是这样的,低年级的学生,学习数学还是以背诵为主&#xff0…

tcp通讯一次最多能发送多少数据?_关于TCP/IP,必须知道的十个知识点

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络…

Linux内核crypto子系统的调用逻辑

testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin上述代码是内核内部即crypto子系统对外提供密码服务的测试程序调用流程&#xff1a;crypto API <—> crypto core <—> crypto_register_alg处于用户态的程序想要调用处于内核态的密码算法&…

Linux加密框架 crypto算法模板 以及CBC算法模板实例

参考链接 Linux加密框架中的主要数据结构&#xff08;四&#xff09;_家有一希的博客-CSDN博客algapi.h - include/crypto/algapi.h - Linux source code (v5.15.11) - Bootlin struct crypto_instance {struct crypto_alg alg;struct crypto_template *tmpl;union {/* Node i…

tomcat temp 大量 upload 文件_渗透测试之文件上传漏洞总结

文末下载上传环境源码客户端js检查一般都是在网页上写一段javascript脚本&#xff0c;校验上传文件的后缀名&#xff0c;有白名单形式也有黑名单形式。查看源代码可以看到有如下代码对上传文件类型进行了限制&#xff1a;我们可以看到对上传文件类型进行了限制。绕过方法1.我们…

Linux加密框架 crypto算法模板 以及HMAC算法模板实例

HMAC算法模板实例 HMAC算法模板的创建实例的接口是hmac_create函数hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin hmac_create输入的参数包括 算法模板 tmpl 和 算法模板实例参数 tbhmac_cretae函数返回的结果为0表示算法模板实例已经创建注册算法模…

linux加密框架 crypto 算法crypto_register_alg的注册流程

算法注册流程 静态算法模块初始化 分组算法模块初始化 AES算法模块&#xff08;aes_generic.c&#xff09;的初始化接口aes_init实现向加密框架注册AES算法的功能&#xff0c;如下所示。aes_generic.c - crypto/aes_generic.c - Linux source code (v5.15.12) - Bootlin sta…

linux加密框架 crypto 静态哈希算法crypto_register_shash注册流程

参考链接 Linux加密框架的算法管理&#xff08;一&#xff09;_家有一希的博客-CSDN博客_linux加密框架设计与实现shash.c - crypto/shash.c - Linux source code (v5.15.12) - Bootlin 函数介绍 crypto_register_shash函数实现向加密框架注册静态哈希算法的功能&#xff0c;…

多个线程访问统一对象的不同方法_C#多线程读写同一文件处理

在多线程访问读写同一个文件时&#xff0c;经常遇到异常&#xff1a;“文件正在由另一进程使用&#xff0c;因此该进程无法访问此文件”。多线程访问统一资源的异常&#xff0c;解决方案1&#xff0c;保证读写操作单线程执行&#xff0c;可以使用lock解决方案2&#xff0c;使用…