Cryptology Academy · レッスン

タイミング攻撃:実行時間から鍵を抽出する

constant-timeでない実装に対するキャッシュタイミング攻撃を実演します。

レッスン 1/412 ステップ

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

タイミング攻撃とは

タイミング攻撃とは、暗号処理にかかる時間を攻撃者が測定し、秘密データを推測するサイドチャネル攻撃です。ナノ秒単位の差であっても、鍵のビットが漏えいする可能性があります。

実行時間から秘密が漏れる理由

暗号コード内部の分岐やメモリアクセスは、秘密の値に依存することがよくあります。ゼロビットで早期に終了するループはより高速に実行されるため、攻撃者はその差を測定できます。

AESに対するキャッシュタイミング攻撃

従来のAESのテーブル参照では、アドレスが鍵バイトに依存するCPUキャッシュラインが使用されます。Flush+Reloadなどのツールを使うと、攻撃者はどのキャッシュラインがアクセスされたかを観測できます。

BleichenbacherのRSAタイミングオラクル

Bleichenbacherの1998年の攻撃は、PKCS#1 v1.5のパディング検証におけるタイミングの差を悪用しました。選択暗号文を数百万個送ることで、1024ビットRSAの秘密鍵を復元できました。

リモートタイミング攻撃

ネットワーク越しであっても、十分なサンプルを集めればサブミリ秒のタイミング差を測定できます。Lucky13は、インターネット経由のTLSにおけるCBCモードのMAC処理時間を悪用しました。

Pythonで時間を測定する

ナノ秒の分解能には time.perf_counter_ns() を使用します。脆弱な比較処理を示すには、次のようにします。

import time

def vulnerable_compare(a, b):
    for x, y in zip(a, b):
        if x != y:
            return False
    return len(a) == len(b)

start = time.perf_counter_ns()
vulnerable_compare(b"secret_key_here", b"wrong_key_xxxxx")
elapsed = time.perf_counter_ns() - start
print(f"Elapsed: {elapsed} ns")

タイミングオラクルのシミュレーション

タイミングオラクルは、推測が正しいかどうかを返すと同時に、処理時間も漏えいさせます。Falseを返すまでの時間が最も長くなる推測を測定することで、秘密を1バイトずつ復元できます。

タイミングデータの統計分析

1回の測定にはノイズが多く含まれます。攻撃者は候補ごとに数千個のサンプルを収集し、統計検定(t検定、Welchの検定)を使って信号とノイズを区別します。

OAEPに対するMangerの攻撃

2001年、Mangerは、OAEPでパディングされたRSAであっても、実装が「最初のバイトがゼロ」である場合とその他のエラーを異なるタイミングで区別すると、情報が漏れることを示しました。

実世界の事例

OpenSSL、GnuTLS、NSSでは、いずれもタイミング攻撃に関するCVEが報告されています。Lucky13 TLS攻撃(CVE-2013-0169)は、公開当時、ほぼすべてのTLSライブラリに影響を与えました。

理解度チェック

攻撃者がタイミングの信号と測定ノイズを区別するのに役立つ統計手法は何ですか。

レッスンのまとめ

タイミング攻撃は、実行時間の差を測定して暗号の秘密を抽出します。ローカル環境ではキャッシュを、リモート環境ではネットワークを利用して攻撃できます。統計分析によって信号とノイズを分離します。対策は定時間コードであり、対策のレッスンで扱います。

無料で開始

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

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

コース
67
レッスン
261

よくある質問

「タイミング攻撃:実行時間から鍵を抽出する」レッスンは無料ですか?

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

「タイミング攻撃:実行時間から鍵を抽出する」で何を学びますか?

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

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

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

「タイミング攻撃:実行時間から鍵を抽出する」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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