web-dev-qa-db-ja.com

Linuxカーネルの非同期および並列アルゴリズム

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.

暗号化における任意のアルゴリズム、非同期アルゴリズム、および並列アルゴリズムの違いは何ですか?

  • 同期実行では、タスクが終了するのを待ってから別のタスクに進みます。
  • asynchronous実行では、前のタスクが終了する前に別のタスクに進むことができます。

これらの用語は、特に暗号化とは関係ありません。一般に、暗号化アルゴリズムの教科書の説明は、同期でも非同期でもありませんが、アルゴリズムの実装はどちらでもかまいません。

たとえば、 [〜#〜] aes [〜#〜] の高レベルの説明を考えてみましょう。

AESはブロック暗号であるため、各128ビット入力ブロックは次の変換を行います。

  • KeyExpansion
  • InitialRound
    • AddRoundKey
  • ラウンド(キーサイズに応じて10、12、または14ラウンドの繰り返し)
    • サブバイト
    • ShiftRow
    • MixColumns
    • AddRoundKey
  • 最終ラウンド
    • サブバイト
    • ShiftRows
    • AddRoundKey

使用される 暗号モード に応じて、ブロックの暗号化は依存または独立のいずれかになります。たとえば、暗号ブロック連鎖(CBC)モードの暗号化では、前のブロックの暗号文を使用して、実際のAES変換の前に次のブロックの平文を変換します。この場合、前のステップの出力が次のステップの入力として必要になるため、アルゴリズムの実装は同期している必要があります。

一方、電子コードブック(ECB)モードでは、各ブロックは個別に暗号化されます。これは、アルゴリズムの実装が以前のように同期的または非同期的のいずれかである可能性があることを意味します。この場合、前のブロックのAESラウンドが進行中であっても、次のブロックの暗号化を開始できます。

この例では、実行はブロックごとに別々の 実行スレッド 、または パイプライン で続行できます。つまり、アルゴリズムは複数の独立した部分に分割されます。たとえば、次のブロックの最初のラウンドは、前のブロックのラウンドの繰り返しが進行している間に実行できます。パイプライン化は、ハードウェア暗号化の実装における一般的な手法です。

cryptd モジュールは、同期ソフトウェア暗号化アルゴリズムを取得し、カーネルスレッドで実行することによって非同期アルゴリズムに変換するテンプレートです。

concurrent 非同期アルゴリズムの実行はinterleaved、例えばアルゴリズムは単一のCPUコアで実行され、2つのブロックの操作を切り替えます。または parallel 、例えばアルゴリズムの実行は複数のコアで同時に進行し、各コアは独自のブロックを処理します。

pcrypt 並列暗号テンプレートは暗号アルゴリズムを取り、それを変換して暗号変換を並列処理します。

これらの場合のarbitraryは、モジュールのアーキテクチャがあらゆる暗号化アルゴリズムに適用できるほど一般的であることだけを指していると思います。現時点では、 [〜#〜] aead [〜#〜] アルゴリズムのみがpcryptでサポートされていると思います。

6
Thomas Nyman