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.pswp.cn/news/446110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446110.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

物化視圖和視圖的最大區別_基于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…

判斷非負整數是否是3的倍數_五年級數學因數與倍數知識點匯總與解題方法技巧...

在日常教學過程中,我發現孩子們和某些家長對學習數學的方法有一些誤區,就是覺著數學,單純就是邏輯思維,只要多做練習題就能學好,但是不是這樣的,低年級的學生,學習數學還是以背誦為主&#xff0…

tcp通訊一次最多能發送多少數據?_關于TCP/IP,必須知道的十個知識點

本文整理了一些TCP/IP協議簇中需要必知必會的十大問題,既是面試高頻問題,又是程序員必備基礎素養。一、TCP/IP模型TCP/IP協議模型(Transmission Control Protocol/Internet Protocol),包含了一系列構成互聯網基礎的網絡…