0

「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 などのより具体的な割り当て関数のいずれかを使用する必要があります。

しかし、arc4 アルゴリズムcrypto_alloc_*を提供する特定のものは見つかりませんでした。

2 番目の懸念:

struct crypto_type手でインスタンス化するのは恐ろしく見えます。

最後に、tfmインスタンスを取得した場合、それを使用して実際の暗号化を行うにはどうすればよいですか?

4

1 に答える 1

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 を使用する方法について説明します。

多くのカーネル モジュールは既に crypto API を使用しており、カーネル ソース ファイルで「crypto_」という単語を検索し、stackoverflow で検索することもできます... Linux カーネル 2.6 での CryptoAPI の使用方法

于 2012-07-24T13:32:04.050 に答える