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

参考链接

  • Linux加密框架中的算法和算法模式(二)_家有一希的博客-CSDN博客

对称算法 分组算法模式

ECB模式

  • ECB模式下,明文数据被分为大小合适的分组,然后对每个分组独立进行加密或解密
  • 如下图所示

ECB模式加密原理

  •  如果两个明文块相同,则加密输出相同的密文块
  • ECB模式的优点在于操作简单,易于实现。由于分组的独立性,利于实现并行处理,并能很好地防止误码扩散。由于所有分组的加密方式一致,明文中重复内容(即模式)会在密文中有所体现,因此难以抵抗统计分析攻击
  • ECB模式一般用于小数据量的字符信息的安全性保护,例如密钥保护。加密框架支持分组算法的ECB模式,实现源码为ecb.c
  • ecb.c - crypto/ecb.c - Linux source code (v5.15.11) - Bootlin

CBC模式

  • 1976年,IBM发明了密码分组链接(CBC,cipher-block chaining)模式。在该模式中,每个明文块先与前一个密文块进行异或后,再进行加密
  • 如下图所示

CBC模式加密原理 

  • 如上图所示,每个密文块都依赖于它前面所有的明文块,同时为保证每条消息的唯一性,在第一个块中需要使用初始向量IV。若第一个块的下标为1,则CBC模式的加密过程为Ci=Ek(Pi⊕Ci-1),C0=IV,而其解密过程为Pi=Dk(Ci)⊕Ci-1,C0=IV,其中Pi表示第i个明文块,Ci表示第i个密文块,E和D分别为加密器和解密器,k为密钥。
  • CBC模式的主要缺点在于加密过程是串行的,无法被并行化,而且明文数据必须被填充到块大小的整数倍。加密时,明文中的微小改变会导致全部密文块都发生变化(即误码扩散)。解密时,从两个邻接的密文块即可得到一个明文块,因此解密过程可以被并行化,而解密时密文中一位的改变只会导致其对应的明文块完全改变和下一个明文块中对应位发生改变,不会影响到其他明文块的内容。
  • 加密框架支持分组算法的CBC模式,实现源码为cbc.c。 
  • cbc.c - crypto/cbc.c - Linux source code (v5.15.11) - Bootlin

CTR模式

  • CTR(Counter,计数器)模式将块密码变为流密码,通过一个递增的加密计数器以产生连续的密码流,其中计数器可以是任意保证不产生长时间重复输出的函数,使用要给普通的计数器是最简单和最常见的做法。
  • 采用普通计数器的CTR加密流程如下所示。 

CTR模式加密原理

  • 图中Nonce(随机数)和计数器可以通过级联、相加或异或等运算使得相同的明文产生不同的密文。
  • CTR模式被广泛用于ATM网络安全和IPSEC应用中,与其他模式相比,具有以下特点:
    • 1)高效率,允许进行并行计算,可以很好地应用CPU流水等并行技术
    • 2)随机访问,可以随机地对任意一个密文分组进行解密,对该密文的处理与其他密文无关;
    • 3)简单性,与其他模式不同,CTR模式仅要求实现加密算法,但不要求实现解密算法。对AES等加解密本质上不同的算法来说,这种简化是巨大的。
    • 4)预处理,算法和加密器的输出不依赖于明文和密文的输入,因此如果有足够的保证安全的存储器,加密算法将仅仅是一系列异或运算,极大地提高吞吐量。
    • 5)无填充,可以高效地作为流密码使用。
  • 加密框架支持分组算法的CTR模式,实现源码为ctr.c。 
  • ctr.c - crypto/ctr.c - Linux source code (v5.15.11) - Bootlin

PCBC模式

  • PCBC(Propagating Cipher Block Chaining,填充密码块链接)模式,是一种可以使密文的微小改动在解密时导致明文大部分错误的模式,并在加密时也具有相同的特性。
  • PCBC模式的加密流程如下所示。

PCBC模式加密流程 

  •  PCBC模式的加解密算法描述如下:
    • 1)加密算法:Ci=Ek(Pi⊕Pi-1⊕Ci-1),P0⊕C0=IV,i=1,2,…,n。
    • 2)解密算法:Pi=Dk(Ci)⊕Pi-1⊕Ci-1, P0⊕C0=IV,i=1,2,…,n。
  • 对于使用PCBC模式加密的消息,互换两个邻接的密文块,不会对后续块的解密产生影响。
  • 加密框架支持分组算法的PCBC模式,实现源码为pcbc.c。
  • 注:PCBC模式或称为明文密码块链接(Plaintext Cipher Block Chaining)模式。
  • pcbc.c - crypto/pcbc.c - Linux source code (v5.15.11) - Bootlin

CCM模式

  • CCM(Counter with CipherBlock Chaining-Message Authentication Code)模式是一种同时提供加密服务和认证服务的算法模式,其中加密服务由CTR模式提供,认证服务由CBC-MAC模式提供
  • CCM模式融合了CTR模式和CBC-MAC模式的优点。
  • 使用CCM模式的基本条件包括分组算法E、密钥K、计数器发生函数C(Counter Generation Function)、格式化函数F(Formating Function)和认证数据Tag、长度Tlen。
  • 在发送方,CCM模式的输入包括随机值N、有效载荷P和附加数据A,计算步骤如下所述:
  • 1)执行格式化函数F(N,A,P),产生128bit/块的数据块序列B0、B1、…、Br。
  • 2)对数据B(B=B0||B1||…||Br)计算CBC-MAC值T,认证数据长度为Tlen。
  • 3)执行计数器发生函数C,产生128bit/块的计数器块ctr0、ctr1、…、ctrm,其中m=PLen/128,按照CTR模式计算Sj=Ek(ctrj)(j=0,1,…,m),再计算有效载荷P的密文C’=P⊕MSBplen(S),其中S=S1||S2||…||Sm。
  • 4)按如下公式计算CCM模式输出密文C=C’||(T⊕MSBtlen(S0))。
  • 当接收方接收到N、A和C时,对密文C首先进行解密得到有效载荷T和CBC-MAC值T,然后再对N、A、P计算CBC_MAC值T‘。如果T’=T说明认证通过,表示接收方从密文中解密得到的有效载荷P是真实有效的,否则表示得到的有效载荷P是无效的。
  • CCM模式的认证流程和加密流程如下所示。
  • 1)认证流程

CCM模式认证流程

  •  2)加密流程

在这里插入图片描述

  • 加密框架支持分组算法的CCM模式,实现源码为ccm.c。
  • 在ccm.c中,除支持标准的CCM模式(记为ccm)外,还支持基本的CCM模式(记为ccm_base)和基于RFC4309的CCM模式(记为rfc4309,即CCM(AES))。
  • ccm和ccm_base两种CCM模式的区别在于输入参数和衍生算法的算法命名,ccm只需要一个输入参数,即基础算法名cipher_name,然后构造出CTR模式算法(即ctr(cipher_name))和CCM模式算法(即ccm(cipher_name))
  • 而ccm_base的输入参数除基础算法名cipher_name外还包括CTR模式算法名ctr_name,构造出的CCM算法名为ccm_base(ctr_name,cipher_name)。
  • 注:RFC4309:Using Advanced Encryption Standard(AES) CCM Mode with IPSEC Encapsulating Security Payload(ESP)。 
  • ccm.c - crypto/ccm.c - Linux source code (v5.15.11) - Bootlin

GCM

  • 同CCM模式,GCM模式(Galois/Counter Mode)也是一种同时提供加密服务和认证服务的算法模式,其中加密服务由CTR模式提供,认证服务由定义在伽罗华(Galois)域内的泛散Hash函数提供。GCM模式是建立在128比特分组密钥基础上的。
  • 加密框架支持分组算法的GCM模式,实现源码为gcm.c。同CCM模式相同,gcm.c中定义了标准GCM模式(记为gcm)、基础GCM模式(记为gcm_base)和基于RFC4106的GCM模式(记为rfc4106)共三种不同GCM模式。
  • 注:RFC4106:The use of Galios/Counter Mode(GCM) in IPSEC Encapsulating Security Payload(ESP)。 
  • gcm.c - crypto/gcm.c - Linux source code (v5.15.11) - Bootlin

CTS模式

  • CTS模式(Cipher Text Stealing Mode,密文窃取模式)可以处理任意长度的明文,产生与明文相匹配的密文。CTS模式除明文的最后两个块外的其他块的处理方式与CBC模式相同
  • 将明文的最后开两个块为Pn-1和Pn,其中Pn-1的长度等于块长度BB,Pn的长度Ln为1到BB的任意值,处理流程如下所示。
    • 1)Xn-1=Pn-1⊕Cn-2,其中Cn-2为Pn-1前一个块Pn-2对应的密文;
    • 2)En-1=Ek(Xn-1),Cn=MSBln(En-1);
    • 3)在Pn末尾填充0创建长度为BB的Pn’;
    • 4)Dn=En-1⊕Pn’,Cn-1=Ek(Dn)。
  • 经过上述计算得到明文最后两个块Pn-1和Pn的密文Cn-1和Cn。
  • 加密框架支持分组算法的CTS模式,实现源码为cts.c。 
  • cts.c - crypto/cts.c - Linux source code (v5.15.11) - Bootlin

 LRW模式

  • LRW模式采用可调分组密码模块,曾经是IEEE P1619窄块加密标准候选算法模式中最有希望的。由于使用非链式结构,因此LRW模式可以有效支持并行操作
  • 除明文和密钥外,LRW模式还有第3个输入,叫扰乱因子,其作用非常类似于CBC模式中的初始向量,但具有易变性。根据定义,可调分组密码应该具有改变扰乱因子的性能,这样比更换密钥更有效率。
  • 加密框架支持分组算法的LRW模式,实现源码为lrw.c。
  • lrw.c - crypto/lrw.c - Linux source code (v5.15.11) - Bootlin

XTS模式

  • XTS模式是基于XEX的密文窃取可调密码模块,被认为是当前最适合于磁盘加密的窄块加密模式,已经被IEEE P1619标准采用。
  • 加密框架支持分组算法的XTS模式,实现源码为xts.c。 
  • xts.c - crypto/xts.c - Linux source code (v5.15.11) - Bootlin

CMAC模式

  • 除HMAC外,还有一种厂家的MAC运算,即CMAC。CMAC全称为Cipher-based MAC,即基于AES等对称加密方式实现的消息认证最常见的CMAC是基于分组密码的CBC模式构造的MAC,即CBC-MAC,被很多国际组织和结构定为标准,如标准ANSI X9.9,FIPS PUB 113和ISO/IEC 9797,是金融贸易中使用最为广泛的消息认证码。
  • 由于CBC模式加密时,当改变一个明文分组时,其对应密文分组及气候的密文分组都会受到影响,这一性质使CBC模式能被用来产生一个消息认证码,它能使消息接收方相信给定的明文序列的确来自合法的发送者,而没有被篡改。
  • CMAC共使用三条密钥,一个位长为k的加密密钥,用于密文分组链接的每一步,两个位长为n的密钥,分别用于满分组和不满分组的最后一个明文分组的处理。两个位长为n的密钥可以从加密密钥导出,无需单独提供。
  • 满分组时CMAC计算流程:

 满分组CMAC计算流程

  • 不满分组时CMAC计算流程: 

不满分组CMAC计算

  • 注:CMAC于2005年通过NIST认证。
  • cmac.c - crypto/cmac.c - Linux source code (v5.15.11) - Bootlin

XCBC模式

  • XCBC模式(Extend Cipher Block Chaining Mode)由美国学者John Black和Phillip Rogaway于2000年提出的,作为CBC模式的扩展,已被美国政府采纳为标准。
  • XCBC模式和CBC模式的区别在于最后一个数据块的处理方式不同,XCBC模式不像CBC模式要求最后一个数据块必须是整块,也可以是短块。XCBC模式具有CBC模式的所有优缺点。
  • 加密框架支持分组算法的XCBC模式,实现源码为xcbc.c,但不是作为一种分组加密模式,而是用来构造MAC,即XCBC-MAC。
  • xcbc.c - crypto/xcbc.c - Linux source code (v5.15.11) - Bootlin 

 哈希算法模式

HMAC模式

  • MAC(Message Authentication Code)是一种保障信息完整性和认证的密码学方法,其中HMAC(Hash-based MAC)是密钥相关的哈希运算消息认证码。
  • HMAC运算利用哈希算法,以一个密钥和一个消息作为输入,生成一个消息摘要作为输出。
  • 定义HMAC需要一个哈希函数H(如MD5或SHA1)和一个密钥K,哈希函数的分割数据长度记为B(单位字节,MD5和SHA1的B为64),输出摘要长度记为L(单位字节,MD5的L为16,SHA1的L为20)。密钥K的长度可以是小于等于数据块长度B的任意值,如果密钥K的长度大于B,不能直接使用,而是将密钥K的哈希值(即H(K))作为HMAC运算的密钥使用。一般情况下,密钥K的最小推荐值长度为L个字节。
  • HMAC运算表达式为HMAC(K,M)=H((K’⊕opad)||H((K’⊕ipad)||M)),其中⊕表示异或运算,||表示级联运算,M为一个输入消息,opad为与数据块等长的0x5C,ipad为与数据块等长的0x36,K’为密钥K以0x00填充的与数据块等长的字符串。
  • HMAC运算步骤如下所示:

     

    • 1)在密钥K后填充0x00来创建一个字长为B的字符串K’,如密钥K的字长为20个字节,B为64字节,则在K后填充44个0x00;
    • 2)将K’与ipad作异或运算,得到K’’;
    • 3)将K’‘与输入消息M作级联运算,即将输入消息M添加到K’‘后组成新的字符串M’;
    • 4)计算M’的哈希值,即H1=H(M’);
    • 5)将K’与opad作异或运算,得到K’’’;
    • 6)将K’’‘与H1作级联运算,得到M’’;
    • 7)计算M’‘的哈希值,即H2=H(M’’)。
    • H2即为输入消息M与密钥K相关的哈希值,即HMAC值。
    • 加密框架支持哈希算法的HMAC模式,实现源码为hmac.c。
    • 注:HMAC于2002年通过NIST认证。
    • hmac.c - crypto/hmac.c - Linux source code (v5.15.11) - Bootlin

VMAC

  • VMAC模式是基于块密码构造的MAC算法,由Ted Krovetz和Wei Dai于2007年提出。VMAC模式的设计初衷为在64位机中保证良好的运算性能,但在32位机上也有很好的运算性能。
  • 于其他MAC(如HMAC、CMAC)模式不同,VMAC模式除消息的MAC值外还包括一个伪随机数pad,因此除需要一个带密钥的哈希函数H外还需要一个伪随机函数F。
  • VMAC模式的计算公式为Tag=Hk1(M)+Fk2(Nonce),其中K1和K2为收发双方共享的密钥。
  • 加密框架支持哈希算法的VMAC模式,实现源码为vmac.c。
  • vmac.c - crypto/vmac.c - Linux source code (v5.15.11) - Bootlin

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

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

相关文章

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;使用…

linux加密框架 crypto 通用算法注册接口__crypto_register_alg注册流程

函数介绍 __crypto_register_alg函数实现向加密框架注册算法&#xff08;包括静态算法和动态算法&#xff09;的功能&#xff0c;输入参数为算法说明alg&#xff0c;注册成功时返回算法注册用的算法幼虫larval&#xff0c;注册失败时返回失败原因。__crypto_register_alg函数执…