使用linux内核加密子系统的arc4算法

时间:2012-07-24 10:34:26

标签: c cryptography linux-kernel

我正在尝试使用“arc4”算法来加密任意数据 来自模块的流。但是我对我应该怎么做一点无能为力 接近它。实施在<crypto/arc4.c>

$find . -type f -name '*.[ch]' -exec grep 'EXPORT_SYMBOL' {} \; | grep
'rc4'

什么都没有。所以我猜没有外部接口

static void arc4_crypt(struct crypto_tfm *tfm, u8 *out, const u8 *in). 

寄存器功能定义为

static int __init arc4_init(void)
 {
         return crypto_register_alg(&arc4_alg);
 }

还有一个struct crypto_alg的静态实例。

通过这些提示,我得出的结论是,我需要更高的水平 用于访问此算法的界面。

只有在我的案例中似乎相关的功能是:

EXPORT_SYMBOL_GPL(crypto_alloc_tfm);

来自<crypto/api.c>

void *crypto_alloc_tfm(const char *alg_name,
                       const struct crypto_type *frontend, u32 type, u32 mask)

它返回void *这是我的第一个问题。

也来自<crypt/api.c>

  

crypto_alloc_tfm()将首先尝试找到已加载的   算法。如果失败并且内核支持动态加载   然后,它将尝试加载相同名称的模块或   别名。如果失败,它将向任何加载的加密发送查询   经理即时构建算法。引用了一个引用计数   然后在算法上与新变换相关联。

     

返回的变换属于非确定类型。大多数人   应该使用一个更具体的分配函数,如   crypto_alloc_blkcipher。

但是没有具体的crypto_alloc_*我能找到哪个会提供 arc4 算法

第二个问题:

struct crypto_type看起来很可怕 手工实例化。

最后如果获得tfm实例,我如何使用它来进行实际加密?

1 个答案:

答案 0 :(得分:0)

对于用户空间程序,您必须使用'CryptoDev for Linux',它是一个内核模块,使您可以通过 / dev / crypto 使用加密API。见http://www.logix.cz/michal/devel/cryptodev/。 您可以下载示例http://www.logix.cz/michal/devel/cryptodev/cryptodev-demo1.c

查看您的内核源文档 ./ kernel / documentation / crypto /

对于内核代码,请查看:http://www.linuxjournal.com/article/6451?page=0,0

它解释了当某些内核代码需要加密数据时如何使用crypto api。

许多内核模块已经使用加密API,在内核源文件中搜索单词“crypto_”,并搜索stackoverflow ... how to use CryptoAPI in the linux kernel 2.6