核心加密機制及應用

2021-08-17 17:38:03 字數 3777 閱讀 9256

僅顯示關鍵結構

核心加密機制在核心中儲存兩個全域性鍊錶crypto_template_list和crypto_alg_list

crypto_alg_list 儲存所有的加密演算法

crypto_template_list由各個演算法通過crypto_register_template函式新增到鍊錶中

crypto_alg_list由各個演算法通過crypto_register_alg函式新增到鍊錶中

資料結構說明

crypto_alg結構可以理解為真正儲存加密介面的乙個通用結構

struct blkcipher_alg ;
union中結構初始化流程

首先由演算法本身實現***xx_alg結構體的初始化,通過***_mod_init函式呼叫crypto_register_***xx函式將***xx_alg傳遞到crypto_alg結構體中

通過__crypto_register_alg函式將當前crypto_alg結構體新增到crypto_alg_list鍊錶當中

至此加密演算法在核心中已成功註冊

首先由演算法本身實現crypto_alg結構體的初始化,使用crypto_register_alg函式呼叫__crypto_register_alg函式

將當前crypto_alg結構體新增到crypto_alg_list鍊錶當中,至此***xx_alg演算法在核心中已成功註冊

crypto_template結構是通用組合演算法的模板

crypto_instance結構就是加密方式的乙個例項物件 通過函式***x_alloc_instance

crypto_spawn結構儲存加密演算法和加密方式的所有資訊,以便之後通過crypto_spawn_tfm生成crypto_tfm的物件

ps.以上結構體在記憶體中一直存在

crypto_tfm結構是核心中真正組合演算法的例項化物件,真正的操作物件

演算法組合流程

僅涉及金鑰加解密過程時,不需要演算法的組合

crypto_***x_alloc

| run kthread(cryptomgr_probe)

+---->crypto_get_attr_alg-------------------------------> cryptomgr_probe[get crypto_alg]

|+---->crypto_alloc_instance----> crypto_init_spawn[combine crypto_instance and crypto_alg]

函式中資料結構的傳遞
e.g

***x

=shash

******_desc|+

--->crypto_***xx|+

---->crypto_tfm|+

---> ***x_tfm|+

---> crypto_alg|+

----> ***x_alg

加密演算法

確定演算法

使用crypto_alloc_hash函式設定使用的演算法

crypto_alloc_hash(ecryptfs_default_hash, 0, crypto_alg_async);

/* ecryptfs_default_hash 該欄位設定演算法 */

模組註冊

init update final詳細流程

以md5為例介紹核心加密模組在核心中的註冊過程

/* crypto/md5.c */

static

struct shash_alg alg =

};

首先由演算法本身實現shash_alg結構體的初始化,通過md5_mod_init函式呼叫crypto_register_shash函式將shash_alg傳遞到crypto_alg結構體中

通過__crypto_register_alg函式將當前crypto_alg結構體新增到crypto_alg_list鍊錶當中

至此加密演算法在核心中已成功註冊

相關結構體

crypto_alloc_hash函式將crypto_algshash_alg連線起來

}至此找到md5所對應的shash_alg結構體

加密方式

確定演算法

通過ecryptfs_crypto_api_algify_cipher_name函式設定加密方式

ecryptfs_crypto_api_algify_cipher_name(&full_alg_name, crypt_stat->cipher, "cbc");

/* crypt_stat->cipher為加密演算法 cbc為加密模式 */

模組註冊

以cbc(aes)為例介紹在核心模組中的註冊流程

static

struct crypto_template crypto_cbc_tmpl = ;

首先在結構體中初始化相關字段儲存在crypto_template結構體中,通過crypto_cbc_module_init函式呼叫crypto_register_template函式將crypto_template結構體插入crypto_template_list鍊錶中以完成註冊

相關結構體

crypto_algblkcipher_alg對應起來

橢圓加密演算法 ECC加密 原理及應用

sm2橢圓曲線公鑰密碼演算法 移動網際網路安全專用數字證書 ecc加密演算法通用性 ecc加密演算法與rsa演算法哪個好?ecc也叫橢圓加密演算法,由koblitz和miller兩人於1985年提出。ecc加密演算法是一種公鑰加密技術,以橢圓曲線理論為基礎。利用有限域上橢圓曲線的點構成的abel群離...

OpenWRT 增加核心模組及應用方法

進入package目錄,建立模組目錄 cd mcp branches v1.1 beta1 mcp package mkdir example 進入example目錄,建立makefile檔案和 路徑 cd example touch makefile mkdir src makefile具體內容如...

區塊鏈核心技術及應用

目錄 區塊鏈的應用場景 區塊鏈的技術特點 1.起源於bitcoin 2.分布式賬本 3.去中心化的儲存 4.去除第三方,解決信任問題 起源 2008年,署名 中本聰 的作者在討論加密的郵件列表中,發表了一篇名為 a peer to peer electronic cash system 的 2009...