歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux內核

Linux內核加密接口分析

一、概述     

Linux內核從2.5版本開始引入了強力的加密機制,主要原因有:刪除冗余代碼、支持IPSec協議以及通用的加密功能等。將來的應用會包括:硬件加密設備驅動、內核代碼簽名、硬件隨機數生成器、文件系統加密等。

二、如何使用加密API

1、安裝

從2.6.6版本之後,內核源碼就提供了豐富的密碼學算法支持,需要配置編譯選項將加密算法作為模塊編入內核。如圖所示,menuconfig的時候配置這部分選項

 

 

重新安裝內核之後可以看到相應的目錄下這些模塊

 

2、使用API編程

這裡介紹的是使用加密API的方法,而且是運行在內核態的程序:

例1

  1. char *Kern_Digest(const void *data, size_t count,  
  2.         unsigned char *md, unsigned int *size, const char *name)  
  3. {  
  4.        struct crypto_tfm *tfm;  
  5.        struct scatterlist sg[1];  
  6.        tfm = crypto_alloc_tfm(name, 0);  
  7.        sg_init_one(sg, data, count); //這裡復制需要做哈希的數據   
  8.         crypto_digest_init(tfm);  
  9.        crypto_digest_update(tfm, sg, 1);  
  10.        crypto_digest_final(tfm, md);  
  11.        if (size != NULL)  
  12.           *size = tfm->cra_digest.dia_digestsize;  
  13.        crypto_free_tfm(tfm);  
  14. }  

例2

  1. #include <linux/crypto.h>   
  2.   
  3. int len;  
  4. char key[8];  
  5. char result[64];  
  6. struct crypto_tfm *tfm;  
  7. struct scatterlist sg[2];  
  8.   
  9. tfm = crypto_alloc_tfm("des", 0);  
  10. if(tfm == NULL)  
  11.     fail();  
  12.   
  13. crypto_cipher_setkey(tfm, key, 8);  
  14.   
  15. //把需要加密的數據復制到scatterlist   
  16.   
  17. crypto_cipher_encrypt(tfm, sg[0], sg[0], len); //這裡可以模擬輸入輸出   
  18.   
  19. crypto_free_tfm(tfm);  

以上兩個例子僅示范了如何使用API,可以看到最重要的2個數據結構是: crypto_tfm 和 scatterlist

crypto_tfm類型指針tfm可以理解為指代了一個算法對象

scatterlist類型數據可以認為是這些密碼算法操縱的數據對象。

同時也可以看到,API的命名很容易閱讀(這也是Linux內核命名的一個特色)

這部分加密庫提供的接口都在linux/crypto.h頭文件中有定義,進行實驗的時候需要與內核相關,這裡可能要一些模塊編程的補充。

Copyright © Linux教程網 All Rights Reserved