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,一经查实,立即删除!

相关文章

python3.5.2安装pygame_【闲来无事,py写game】Mac-Python3.5安装pygame 1.9.2 小计

13正文之前没错,我就是这么不学无术,C实在学的鸡儿疼,所以干脆搞点娱乐措施,昨天赶上了京东图书做大活动,所以屯了一批书,好久没碰python了。所以就整本玩玩!今天这不就上手了么!自己…

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

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

物化视图和视图的最大区别_基于catalyst的物化视图改写引擎的实现

更新日志:1. 2020/06/16 group by 视图的部分描述错误,已修正。什么是物化视图我先用我的话解释一下什么是物化视图。假设我们已经有A,B两张表,现在我创建了一张表C,C是由A,B两张表经过一条SQL处理得到的,这个时候我们…

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

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

python学籍管理系统 flask_taskday05-Python之flask学习 web开发最基本的需要(特别详细且适用)...

1.首先一个Flask的Web项目的创建需求一(文章概述):一:必须实现命令工具管理App,用于在命令行输入命令对项目进行管理,对后期多多益善二:必须实现“蓝图”管理,用于将app启动函数与路由分开管理,…

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…

python语言print函数_Python 的 print 函数

Python 2.x 系列已经停止维护了, python 3.x 系列正在成为主流,尽管有些项目还是python2.x 的,之后写Python 代码为了保持兼容性,还是尽量和Python 3 标准保持一致作为一个Python newbee 而言, python 2.x 和 3.x 的 …

Linux加密框架crypto crypto_alg|cipher_alg数据结构|AES例子

加密框架将算法的属性抽象为算法说明数据结构struct crypto_alg,加密框架中的每一个算法(基础算法和衍生算法)都表示为一个算法说明数据结构的实例,因此将struct crypto_alg称为通用算法说明数据结构。后续章节中如无特殊说明&…

python如何运用ols_使用OLS回归(Python,StatsModels,Pandas)预测未来值

我目前正试图在Python中实现一个MLR,我不知道如何去应用我发现的未来值的系数。使用OLS回归(Python,StatsModels,Pandas)预测未来值import pandas as pdimport statsmodels.formula.api as smimport statsmodels.api as sm2TV [230.1, 44.5,…

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…

python读txt转array_python将txt文件读入为np.array的方法

原文件:7.8094,1.0804,5.7632,0.012269,0.008994,-0.003469,-0.79279,-0.064686,0.11635,0.68827,5.7169,7.9329,0.010264,0.003557,-0.011691,-0.57559,-0.56121,原文件数据比较多,是一个125行,45类float数字。代码:# -*- coding…

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

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

python 列表间隔取值_python list数据等间隔抽取并新建list存储的例子

原始数据如下:[e3cd, e547, e63d, 0ffd, e39b, e539, e5be, 0dd2, e3d6, e52e, e5f8, 0000, e404, e52b, e63d, 0312, e38b]将其分割为4路数据,分别存储在fetal1、fetal2、mother1、ECG的列表中,各列表对齐,不能整除于4的数据舍去…

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…

python找最长的字符串_为Python找到最长重复字符串的有效方法(从Pearls编程)

我的解决方案是基于后缀数组。它是由最长公共前缀的两倍前缀构成的。最坏情况下的复杂度是O(n(logn)^2)。任务”伊利亚特.mb.txt“在我的笔记本上花了4秒钟。代码在函数suffix_array和longest_common_substring中有很好的文档记录。后一个函数很短,可以很容易地修改…

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…