歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux內核 >> Linux內核加密接口分析

Linux內核加密接口分析

日期:2017/2/28 16:07:53   编辑: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. int len;
  3. char key[8];
  4. char result[64];
  5. struct crypto_tfm *tfm;
  6. struct scatterlist sg[2];
  7. tfm = crypto_alloc_tfm("des", 0);
  8. if(tfm == NULL)
  9. fail();
  10. crypto_cipher_setkey(tfm, key, 8);
  11. //把需要加密的數據復制到scatterlist
  12. crypto_cipher_encrypt(tfm, sg[0], sg[0], len); //這裡可以模擬輸入輸出
  13. crypto_free_tfm(tfm);

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

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

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

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

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

Copyright © Linux教程網 All Rights Reserved