wolfSSLがCurve25519のブラインディングに対応

wolfSSL 5.8.0において、Curve25519ブラインディングに対応しました。これは、特定のビルド環境における潜在的なサイドチャネル脆弱性対策の強化策として機能します。

この機能は、Curve25519秘密鍵操作中の電力または電磁波(EM)解析に対するオプション機能としてハードニングを提供します。そのような攻撃は、そもそも実際には実行がかなり困難ですが、ブラインディングを有効にすることで、物理的アクセスやサイドチャネル観察の影響を受けやすいデバイスに追加の防御手段を提供します。

RSAにも「ブラインディング」と呼ばれる機能がありますが、RSAブラインディングは署名処理の際にメッセージにランダムな因子を掛けることで、署名とメッセージの関係を隠し、選択平文攻撃やタイミング解析といったサイドチャネル攻撃に対処するための技術です。

一方、Curve25519のブラインディング機能は、鍵合意において生成される公開鍵にランダム性を導入することで、観測される公開鍵から秘密鍵を推定することをより困難にすることを目的としています。これは、秘密鍵に対してランダムなスカラー値の演算を加え対応する公開鍵に乱数的要素を加える形式で実現されます。

ブラインディングが適用されるケース

ブラインディングは、wolfSSLでCurve25519のC実装を使用するビルドにのみ関連します。以下の場合では利用できない、もしくは利用する必要性がありません。

  • アセンブリ最適化実装
    --enable-armasm / WOLFSSL_ARMASM--enable-intelasm / USE_INTEL_SPEEDUP
  • フットプリントの小さなCurve25519ビルド
    --enable-curve25519=small / CURVE25519_SMALL

C実装でブラインディングを有効にするには、マクロ WOLFSSL_CURVE25519_BLINDING を定義します。

./configure --enable-curve25519 CPPFLAGS=-DWOLFSSL_CURVE25519_BLINDING

影響を受けるAPI

ブラインディングは、秘密鍵がスカラー乗算で使用される操作を強化します。

  • wc_curve25519_export_public_ex – 秘密鍵から公開鍵を作成する際
  • wc_curve25519_make_key – キーペアの生成中
  • wc_curve25519_generic
  • wc_curve25519_shared_secret_ex

物理的サイドチャネルの露出が懸念されるハードウェアでC実装を使用している場合、ブラインディングを有効とし、これらの操作で使用される秘密鍵を再生成することを推奨します。
将来のwolfSSLリリースにおいて、Curve25519ブラインディングはデフォルトで有効とする予定です。

謝辞

ご報告いただいたTelecom ParisのArnaud Varillonさん、Laurent Sauvageさん、Allan Dellautreさんに感謝します。

ご質問がございましたら、ぜひ info@wolfssl.jp までお問い合わせください。

原文:https://www.wolfssl.com/curve25519-blinding-support-added-in-wolfssl-5-8-0