攻撃耐性をデフォルトで強化しました

wolfSSLではさまざまな悪意の攻撃に対する耐性を強化するオプションを提供しています。新しいバージョンでは、それらの多くをデフォルトで有効化するように変更し、容易に安全なシステムが実現できるように改善しました。この記事ではその内容についてご紹介します。

暗号化でライブラリの強化について話すとき、タイミング攻撃とキャッシュ攻撃への耐性を有効にし、RSA ブラインディングを使用してグリッチ攻撃から保護することを意味します。

耐性強化マクロの有効化/無効化

wolfSSLのコードには、harden フラグや maxstrength フラグなどの configure スクリプト フラグを介して制御できる耐性強化に関連するマクロが多数あります。 強化が有効化される場合、次のフラグが定義されます。

TFM_TIMING_RESISTANT

ECC_TIMING_RESISTANT

WC_RSA_BLINDING

無効化が設定される場合には以下のフラグが定義されます:

WC_NO_HARDEN

WC_NO_CACHE_RESISTANT

ノート:耐性強化はデフォルトで有効化されていますから、無効化すべきではありません。この記事の後半では設定のためのガイダンスについて説明します。

「maxstrength」フラグは、相互運用性の問題を引き起こす可能性がある AEAD-PFS (関連付けられたデータを使用した認証済み暗号化 – Perfect Forward Secrecy) 暗号スイートのみを許可するため、デフォルトで無効になっています。 ただし、有効にすると、グリッチ攻撃から保護する WOLFSSL_CIPHER_TEXT_CHECK が定義されます。 他の暗号スイートを利用できるようにしたいが、関連する暗号スイートのグリッチ保護も必要な場合は、CFLAGS 環境変数に WOLFSSL_CIPHER_TEXT_CHECK を追加できます(CFLAGS=”-DWOLFSSL_CIPHER_TEXT_CHECK”)。

タイミング攻撃

タイミング攻撃を行うためには、攻撃者が CPU または他のデバイスによって実行される論理操作の正確な時間を計る必要があります。 これらの時間を測定することにより、攻撃者はこれらの操作を実行するために使用されたプライベート データを炙り出すことができます。 この種の攻撃は、RSA や ECC などのよく知られている一般的に安全なアルゴリズムに対しても実際的です。 このような攻撃は、秘密鍵とは関係なく一定時間内で暗号化操作を実行することで阻止されます。 タイミング攻撃の詳細については、https://en.wikipedia.org/wiki/Timing_attack を参照してください。

キャッシュ攻撃

最新のプロセッサは投機的実行を実行し、実行されない分岐の実行による目に見える副作用を残す可能性があります。 これは、メモリ キャッシュの状態で確認できるメモリ アクセス パターンの形式である場合があります。 これらのパターンは、秘密鍵に関する情報を示すことができます。 攻撃者は悪意のある手段を使用して、プログラムをプログラムのメモリ空間内の任意の場所にアクセスさせ、これらのパターンを取得します。 この攻撃は、秘密鍵を含む暗号化操作の分岐を排除することで緩和できます。

RSAブラインディング

この防御方法には、ランダム データを使用して RSA 秘密鍵操作の直前に入力を変換することが含まれます。 操作の後、変換の逆が実行され、目的の出力が得られます。 これにより、攻撃者は変換を決定するために使用されたランダム データを知らず、したがって RSA 秘密鍵操作への真の入力がわからないため、秘密鍵に関する知識を得ることができなくなります。

グリッチ攻撃

グリッチ攻撃とは、攻撃者が変更された入力データをアルゴリズムにフィードし、エラーの動作を観察して秘密鍵に関する情報を推測できるにする攻撃です。 これには、攻撃者が物理的にアクセスし、ソフトウェアとハードウェアに関する詳細な知識を持っている必要があります。 彼らは、物理メモリ内の入力の値を物理的に変更することによって、アルゴリズムへの入力を変更します。 この攻撃は、暗号化操作の前に入力を別のバッファーにコピーし、暗号化操作の後に入力バッファーをその別のバッファーと比較して、変更されていないことを確認することで検出できます。

耐性強化を無効化する

一般的に言えば、「harden」フラグは常に有効にしておく必要がありますが、無効にするとパフォーマンスが向上する可能性があります。 無効にすることが適切かどうかを検討するためのいくつかの要因を次に示します:

  • 公開データと公開鍵のみを扱っていますか?
  • パフォーマンスの向上が本当に必要ですか?
  • 暗号操作のタイミングが観測できないオフライン操作のみを行っていますか?
  • ハードウェアに物理的にアクセスできないようにするための制限が設けられていますか?
  • 悪意のあるコードの実行を最小限に抑えるために、非常にシンプルで監査済みのアプリケーション コードとオペレーティング システムを使用していますか?
  • 悪質な入力を防ぐために、外部とのやり取り (ネットワーク、ユーザー インターフェイスなど) を最小限に抑えましたか?
  • すべての入力データの健全性をチェックしていますか?

原文:https://www.wolfssl.com/wolfssl-hardened-default/