【问题标题】:Using the Crypto API in the Linux Kernel on a file在 Linux 内核中对文件使用 Crypto API
【发布时间】:2011-11-09 07:24:38
【问题描述】:

我一直在尝试在linux内核中使用crypto api,我需要做的是sha一个正在打开的文件。我正在使用 LSM 来捕获那些打开的文件。

到目前为止,我所拥有的是使用 struct crypto_shash 创建一个

struct crypto_shash *tfm;
struct shash_desc desc;
tfm = crypto_alloc_shash("sha1", 0, CRYPTO_ALG_ASYNC);

我假设我应该在那之后使用

来初始化它
desc.tfm = tfm;
desc.flags = 0;

err = crypto_shash_init(&desc);

一切正常,但我想使用

crypto_shash_digest(&desc, ??, ??, sha_hash);

我意识到它需要一个 scatterlist 作为它的第二个参数,并且该 scatter 列表的长度作为第三个参数。我想不通的是我应该如何将文件加载到分散列表中以便将其提供给加密系统。

我已经阅读了相当多的内容,但迄今为止无法找到有关将文件内容加载到分散列表中的任何详细信息。因此,任何指向正确方向的指针都将不胜感激。

谢谢

【问题讨论】:

    标签: linux-kernel cryptoapi


    【解决方案1】:

    我前段时间做过类似的事情。唯一的区别是我计算了 ELF 部分的哈希值。

    1. 可能您的 desc.flags 应该是 CRYPTO_TFM_REQ_MAY_SLEEP,直到您有充分的理由阻止加密操作阻塞。
    2. 您确定您没有将crypto_shash_digestcrypto_hash_digest 混淆吗?因为 crypto_*s*hash_digest() 接收指向数据的指针作为其第三个参数。如果对你来说不是这样,你说的是哪个 linux kenrel 版本?

    【讨论】:

    • 我使用的是 2.6.38,你是对的,我改用 shash 是因为我读过很多东西说这就是我想要的。奇怪的是,当我尝试 crypto_shash_digest(&desc, teststr, strlen(teststr), sha_hash); 时,我仍然收到空指针错误;
    • 我也在检查我得到的 tfm 是否不为空,并且 init 没有错误。
    • @DigitalPowers 可以给我看一下代码吗,我需要看看你如何使用crypto_shash_digest(),你如何初始化TFM等等?我假设 TFM 的准备有错误,但在我看到代码之前我不能说什么。
    • 我最初粘贴的代码就是它,我在最后调用了 final 和错误检查,但除此之外,这些是我对 crypto_shash 函数的调用。我目前正在使用字符串文字 teststr 尝试将其作为摘要进行哈希处理,然后进行最终处理。
    • @DigitalPowers 1) 您是否尝试设置 CRYPTO_TFM_REQ_MAY_SLEEP TFM 标志? 2)你如何分配sha_hash?它必须至少是 crypto_shash_digestsize 字节。 3)究竟在哪里得到了nullptr错误?你能显示堆栈跟踪吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多