対策:マスキング、ブラインディング、constant-timeコード
マスキング、点のブラインディング、constant-time比較を実装します。
「対策:マスキング、ブラインディング、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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- タイミング攻撃:実行時間から鍵を抽出する
- 電力解析:SPAとDPA
- 電磁波・音響サイドチャネル
- 対策:マスキング、ブラインディング、constant-timeコード