Cryptology Academy · レッスン

対策:マスキング、ブラインディング、constant-timeコード

マスキング、点のブラインディング、constant-time比較を実装します。

レッスン 4/412 ステップ

「対策:マスキング、ブラインディング、constant-timeコード」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

対策の3つのファミリー

サイドチャネル対策は、3つのファミリーに分類できます。マスキング(中間値をランダム化する)、ブラインディング(入力や出力をランダム化する)、constant-timeコード(データ依存の実行時間をなくす)です。

ブールマスキング

各中間値に新しいランダムマスクrをXORします。マスクされた値x⊕rを処理し、最後にマスクを解除します。これにより、電力トレースはxではなくx⊕rに依存するようになります。

乗算に対する算術マスキング

乗算を伴う演算では、乗法マスクを使用します。xをx·r mod pに置き換えます。マスキング方式は、暗号の各代数演算と互換性がなければなりません。

RSAブラインディング

暗号文cを復号する前に、ランダムなrを選び、c' = c·r^e mod nを計算します。c'を復号してm·r mod nを得た後、rを割り除きます。実際のべき乗演算が本来のcを扱うことはありません。

ECCポイントブラインディング

射影座標をランダム化します。アフィン点(x,y)の代わりに、ランダムなλを使って(λx : λy : λ)を使用します。スカラー倍算はランダム化された座標に対して行われるため、毎回異なる電力トレースになります。

Constant-Timeプログラミングのルール

1. 秘密値に依存する分岐を使わない。2. 秘密値に依存するメモリインデックスを使わない。3. 早期終了を行わない。4. 利用できる場合は、プラットフォーム固有のconstant-time演算を使う(例:crypto_verify_32)。

PythonでのConstant-Time比較

タイミングに敏感な処理で、生のバイト列に対して==やhmac.compare_digestを決して使わないでください。次のようにします。

import hmac

def constant_time_compare(a: bytes, b: bytes) -> bool:
    """Uses HMAC double-HMAC trick for constant-time equality."""
    # hmac.compare_digest is constant-time in CPython
    return hmac.compare_digest(a, b)

# Example
secret = b"expected_mac_value"
received = b"attacker_provided__"
print(constant_time_compare(secret, received))  # False, but no timing leak

コンパイラとアーキテクチャの落とし穴

コンパイラがconstant-timeコードを最適化で削除することがあります。volatileストア、メモリバリア、またはアセンブリのintrinsicを使用してください。Cコンパイラには-fno-delete-null-pointer-checksがありますが、constant-timeを普遍的に保証する仕組みはありません。

シャッフルとダミー演算

S-box参照の順序をランダムに入れ替えるか、結果に影響を与えずに電力を消費するダミー演算を挿入します。これによりDPAへの対抗難度は上がりますが、漏洩がなくなるわけではありません。

ハードウェアによる対策

専用の暗号アクセラレーター(ARM TrustZone、STM32 hardware AES)は、シリコン上でマスキングを適用します。ASIC実装では、金属シールドや物理プロービングを検知するアクティブメッシュも追加します。

理解度チェック

べき乗演算の前に暗号文をランダム化することで、RSAタイミング攻撃を防ぐ対策はどれですか。

レッスンのまとめ

マスキングは中間値をランダム化し、ブラインディングはRSA/ECCの入力をランダム化し、constant-timeコードはタイミングに依存する分岐をなくします。多層防御では、この3つを組み合わせます。ハードウェアアクセラレーターはこれらをシリコン上で適用し、最も強い保証を実現します。

無料で開始

AI チューターと学ぶ Cryptology Academy — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
67
レッスン
261

よくある質問

「対策:マスキング、ブラインディング、constant-timeコード」レッスンは無料ですか?

はい。「対策:マスキング、ブラインディング、constant-timeコード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「対策:マスキング、ブラインディング、constant-timeコード」で何を学びますか?

マスキング、点のブラインディング、constant-time比較を実装します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「対策:マスキング、ブラインディング、constant-timeコード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. タイミング攻撃:実行時間から鍵を抽出する
  2. 電力解析:SPAとDPA
  3. 電磁波・音響サイドチャネル
  4. 対策:マスキング、ブラインディング、constant-timeコード
← Cryptology Academyに戻る