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.
暗号化におけるランダムアルゴリズム、非同期アルゴリズム、並列アルゴリズムの違いは何ですか?
答え1
- 存在する同期実行時に他のジョブを続行する前に、そのジョブが完了するまで待つ必要があります。
- 存在する非同期実行中に、前のジョブが完了する前に他のジョブを続行できます。
この用語は暗号化と特別な関係はありません。一般に、暗号化アルゴリズムの教科書の説明は、同期も非同期でもない。実装するアルゴリズムはそのうちの1つです。
たとえば、次のような上位レベルの説明を考えてみましょう。AES:
AESはブロック暗号なので、各128ビット入力ブロックは次のように変換されます。
- キー拡張
- 初期ラウンド
- ホイールキーの追加
- ラウンド数(キーサイズに応じて10、12、または14ラウンド繰り返し)
- 下位バイト
- 移動する
- 混合熱
- ホイールキーの追加
- 最終ラウンド
- 下位バイト
- 移動する
- ホイールキーの追加
に従ってパスワードモード使用時に、ブロック暗号化は依存関係または独立性があります。たとえば、暗号ブロックチェーン(CBC)モード暗号化では、実際のAES変換の前に前のブロックの暗号文を使用して、次のブロックのプレーンテキストを変換します。この場合、前のステップの出力は次のステップの入力として必要となるため、アルゴリズムの実装は同期でなければなりません。
一方、ECB(Electronic Code Book)モードでは、各ブロックは個別に暗号化されます。これは、アルゴリズムの実装が以前と同じように同期化されても非同期化されてもよく、その場合、前のブロックのAESラウンドが進行中であっても、次のブロックの暗号化が始まる可能性があることを意味します。
この例では、実行を個別に実行できます。実行スレッド各ブロックまたは組立ラインつまり、アルゴリズムは複数の独立した部分に分けられます。例えば、前のブロックのループ反復が進行している間、次のブロックの初期ループが実行されてもよい。パイプライニングは、ハードウェア暗号化の実装の一般的な技術です。
これcryptd
モジュールは、同期ソフトウェア暗号化アルゴリズムを取得し、カーネルスレッドで実行して非同期アルゴリズムに変換するテンプレートです。
これ同時に非同期アルゴリズムの実行は次のとおりです。すれちがい、単一のCPUコアで実行され、2つのブロックのジョブ間で前後に切り替えるアルゴリズム、または平行線たとえば、アルゴリズムの実行は複数のコアで同時に発生し、各コアは独自のチャンクを処理します。
これpcrypt
並列暗号化テンプレートは、暗号化アルゴリズムを使用して暗号化変換を並列に処理するように変換します。
私の考えでは普段着この場合、これは単にモジュールのアーキテクチャがすべての暗号化アルゴリズムに適用できるほど一般的であることを意味します。私はそれが一時的なものであると信じています。AEADアルゴリズムは次のように与えられますpcrypt
。