Linuxカーネル構成では、次のオプションが表示されます。
config CRYPTO_PCRYPT
tristate "Parallel crypto engine"
depends on SMP
select PADATA
select CRYPTO_MANAGER
select CRYPTO_AEAD
help
This converts an arbitrary crypto algorithm into a parallel
algorithm that executes in kernel threads.
config CRYPTO_CRYPTD
tristate "Software async crypto daemon"
select CRYPTO_BLKCIPHER
select CRYPTO_HASH
select CRYPTO_MANAGER
select CRYPTO_WORKQUEUE
help
This is a generic software asynchronous crypto daemon that
converts an arbitrary synchronous software crypto algorithm
into an asynchronous algorithm that executes in a kernel thread.
暗号化における任意のアルゴリズム、非同期アルゴリズム、および並列アルゴリズムの違いは何ですか?
これらの用語は、特に暗号化とは関係ありません。一般に、暗号化アルゴリズムの教科書の説明は、同期でも非同期でもありませんが、アルゴリズムの実装はどちらでもかまいません。
たとえば、 [〜#〜] aes [〜#〜] の高レベルの説明を考えてみましょう。
AESはブロック暗号であるため、各128ビット入力ブロックは次の変換を行います。
使用される 暗号モード に応じて、ブロックの暗号化は依存または独立のいずれかになります。たとえば、暗号ブロック連鎖(CBC)モードの暗号化では、前のブロックの暗号文を使用して、実際のAES変換の前に次のブロックの平文を変換します。この場合、前のステップの出力が次のステップの入力として必要になるため、アルゴリズムの実装は同期している必要があります。
一方、電子コードブック(ECB)モードでは、各ブロックは個別に暗号化されます。これは、アルゴリズムの実装が以前のように同期的または非同期的のいずれかである可能性があることを意味します。この場合、前のブロックのAESラウンドが進行中であっても、次のブロックの暗号化を開始できます。
この例では、実行はブロックごとに別々の 実行スレッド 、または パイプライン で続行できます。つまり、アルゴリズムは複数の独立した部分に分割されます。たとえば、次のブロックの最初のラウンドは、前のブロックのラウンドの繰り返しが進行している間に実行できます。パイプライン化は、ハードウェア暗号化の実装における一般的な手法です。
cryptd
モジュールは、同期ソフトウェア暗号化アルゴリズムを取得し、カーネルスレッドで実行することによって非同期アルゴリズムに変換するテンプレートです。
concurrent 非同期アルゴリズムの実行はinterleaved、例えばアルゴリズムは単一のCPUコアで実行され、2つのブロックの操作を切り替えます。または parallel 、例えばアルゴリズムの実行は複数のコアで同時に進行し、各コアは独自のブロックを処理します。
pcrypt
並列暗号テンプレートは暗号アルゴリズムを取り、それを変換して暗号変換を並列処理します。
これらの場合のarbitraryは、モジュールのアーキテクチャがあらゆる暗号化アルゴリズムに適用できるほど一般的であることだけを指していると思います。現時点では、 [〜#〜] aead [〜#〜] アルゴリズムのみがpcrypt
でサポートされていると思います。