【问题标题】:using arc4 algorithm of linux kernel crypto subsystem使用linux内核加密子系统的arc4算法
【发布时间】:2012-07-24 10:34:26
【问题描述】:

我正在尝试使用 "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 in 看起来很可怕 手动实例化。

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

【问题讨论】:

  • 您是否有特定原因要使用 RC4 而不是现代加密?

标签: c cryptography linux-kernel


【解决方案1】:

对于用户空间程序,您必须使用“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

【讨论】:

  • 我的不是用户空间程序。它是一个内核模块。 linux 日志链接已经过时了。从 2003 年开始。
  • 那里给出的答案是关于摘要的(问题是关于 md5/sha1)。我正在寻找如何启动 rc4 流密码。我正在查看“encryptfs”代码。让我们看看我能找到什么..
猜你喜欢
  • 2013-04-25
  • 2018-09-15
  • 2015-09-14
  • 2010-09-20
  • 2012-04-16
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
相关资源
最近更新 更多