
サイドチャネル解析(SCA)は、サイバーセキュリティ、ハードウェアセキュリティ、暗号工学の世界で重要なテーマとなっています。ソフトウェアの脆弱性を利用する攻撃やブルートフォースによる方法とは異なり、サイドチャネル攻撃はデジタルプロセスの物理的な現象(例えば、消費電力の変動、電磁波の放出、実行時間の違いなど)を利用します。これらの微細な手掛かりを厳密に分析することで、高度に保護されたデバイスからでも暗号鍵などの機密情報を抽出することが可能となります。
この記事では、電磁波および電力サイドチャネル解析に焦点を当て、攻撃ベクトル、実際の例、検出および緩和技術を解説し、実践的なスキルレベルで理解できるようにコードサンプルを提供します。このガイドは初心者から上級者までを対象としており、SCAを理解するだけでなく、デバイスを保護したりそのセキュリティを評価したりするための戦略を身に付けることができます。
サイドチャネル解析(SCA) は、暗号化や機密操作を行う際にコンピューティングデバイスから意図せず漏洩する情報を利用することを指します。ソフトウェアの脆弱性をターゲットにしたり数学的アルゴリズムを攻撃するのではなく、SCAは物理的な証拠、「サイドチャネル」 を利用して秘密を推理します。これには、電力の使用の変動、放射される電磁波(EM)、タイミングの違い、音響信号、さらには光や熱が含まれます。
このアナロジーで言うと、犯罪者がロックを操作するのではなく、微細なクリック音(タイミングや機械的動き)を聞いたり、振動(音響またはEM放出)を測定しながらコンビネーション・ダイヤルを回すことで金庫を破ろうとするのに似ています。SCAはデバイスが安全なプロセスを実行する際に示す微細な特性を利用します。
電力サイドチャネル攻撃は、暗号化操作中のデバイスの消費電力を観察することに焦点を当てています。ほとんどのアルゴリズムは、秘密鍵のビットに基づいて異なるコードパスやデータ処理ルーチンを実行するため、消費電力は微細ですが測定可能な範囲で変動します。
電力SCAが電源ラインを利用する一方で、電磁波サイドチャネル攻撃 はアンテナやプローブを使用して、論理操作中に集積回路から放射されるEM波を盗聴します。EM-SCAは、物理的に電源ラインを操作する必要がないため、より焦点を絞り、侵入性が低い場合があります。
SCAの成功は、測定可能性 と 相関性 に依存します:
注:攻撃者はデバイスのコードを必要とせず、ソフトウェアの防御を破る必要もありません。漏洩は物理学と回路の問題によるものです。
重要なDPAの結果のひとつは、AES暗号化を実行するスマートカードにおけるものでした。研究者は、カードが数百の既知の平文値を暗号化する際の消費電力を観察することによって、アルゴリズム自体を破ることなく秘密のAES鍵を抽出しました。
研究者は、特定のスマートカードに特別に調整されたプローブを近づけるだけで、暗号化操作中のEM放出をキャプチャし、鍵を破ることができることを実証しました。
Lucky 13攻撃 のようなタイミングサイドチャネル攻撃は、TLSサーバーが不正または誤った暗号化パケットを処理するのにかかる微細な時間の違いを検出し、基底鍵に関する情報を明らかにすることに成功しました。
多くのIoTチップは「セキュアエレメント」を備えていても、物理ハードウェアに耐タンパー応答やノイズマスキングが組み込まれていない場合、消費者向けのオシロスコープを使用してキー抽出が可能な場合があります。
ノート: 常に法的かつ倫理的にサイドチャネル解析を行ってください。(自分自身のデバイスでも)以下の例は、セキュリティ研究、CTF、および学習専用です。
基本的なSCAを行うためには、以下が必要です:
+----------------------+
| マイクロコントローラ/SOC |---[シャント]--[電源供給]
| (ターゲットデバイス) |
| |
| [トリガーGPIO]-------+
+----------------------+
|
[プローブ]
|
+-------------+
| オシロスコープ |
+-------------+
|
[PCへのUSB接続]
波形データ(電力又はEM測定のCSVまたはバイナリファイル)をキャプチャしたと仮定します。numpy、scipy、およびmatplotlibを使用して基本的な解析を行うことができます。
いくつかのUSB接続オシロスコープでは、pyvisaライブラリを使用してデバイスを一覧にすることができます。
import pyvisa
rm = pyvisa.ResourceManager()
print("接続中のインスツルメント:")
for resource in rm.list_resources():
print(resource)
例えば、電力トレースを含む1000個のCSVファイルがあるとします。平均電力波形を計算します。
import numpy as np
import glob
import matplotlib.pyplot as plt
trace_files = glob.glob('traces/*.csv')
accum = None
count = 0
for fname in trace_files:
data = np.loadtxt(fname, delimiter=',')
if accum is None:
accum = data
else:
accum += data
count += 1
mean_trace = accum / count
plt.plot(mean_trace)
plt.xlabel("サンプル #")
plt.ylabel("電力 (単位なし)")
plt.title("暗号化操作全体の平均電力トレース")
plt.show()
仮想の中間値(例:Sボックス出力)を用いたAESキーの1バイトの回復を試みるとしましょう。ハミング重み漏れモデルとトレースおよび既知の平文を用いて:
def hamming_weight(x):
return bin(x).count('1')
plaintexts = ... # 既知の入力バイトの配列
traces = ... # 2D numpy 配列: 形状 (num_traces, trace_length)
guesses = range(256)
max_corr = np.zeros(256)
for key_guess in guesses:
# キー推測に基づく電力モデル(Sボックスなど)を予測
model_vals = np.array([hamming_weight(some_sbox[pt ^ key_guess]) for pt in plaintexts])
# 各時間サンプルと相関させる
for t in range(traces.shape[1]):
corr = np.corrcoef(traces[:, t], model_vals)[0, 1]
if abs(corr) > max_corr[key_guess]:
max_corr[key_guess] = abs(corr)
print("最良のキー推測:", np.argmax(max_corr))
(上記は説明用です。実際の攻撃では、より複雑なモデルや前処理が使用されます。)
データ取得デバイスがシリアルまたはUSBデバイスとして表示される場合:
lsusb
dmesg | grep tty
シリアル接続オシロスコープからデータをログに記録する場合(デバイスが/dev/ttyUSB0の場合を想定):
sudo minicom -D /dev/ttyUSB0 -b 115200
または連続ログ:
cat /dev/ttyUSB0 > powertrace.log &
SCAは非侵入でアルゴリズムに依存しない性質のため、従来のソフトウェア修正は十分ではありません。効果的な対策は、ハードウェア設計、ソフトウェアアルゴリズム、および運用プロシージャ全体にわたります。
電磁波および電力サイドチャネル解析は、攻撃者の手にある最も革新的かつ洗練された技術の一部です。これらはすべての物理的実装が漏えいするという現実を利用し、電力の消費や電磁波の放射を通じて情報を取得します。
組み込みデバイス、IoT、スマートカード、そしてハードウェアベースの暗号化の普及が進む中で、SCAの理解はもはやニッチではなく、必須です。これは、安全なハードウェアを設計したり、暗号コードを記述したり、セキュリティ監査を行う際に不可欠です。
サイドチャネルのエクスプロイトに対抗するためには、注意深い監視、最新の実践法、ハードウェア意識の高いエンジニアリング、そして通常かつ強固なテストが最善の防御です。この分野は急速に進化し続けており、SCAに対して安全なデバイスを構築することは、絶えず動く重要な目標です。
MDPI Security and Safety, "Electromagnetic and Power Side-Channel Analysis: A Survey and a Laboratory Setup"
https://www.mdpi.com/2410-387X/4/4/30
Ericsson ブログ, "How to stop side channel analysis attacks"
https://www.ericsson.com/en/blog/2023/4/side-channel-analysis
The Conversation, "サイドチャネル攻撃とは? コンピュータがハッキングされずに秘密を漏えいする方法をサイバーセキュリティ研究者が説明"
https://theconversation.com/what-is-a-side-channel-attack-a-cybersecurity-researcher-explains-how-computers-can-leak-secrets-without-being-hacked-286121
Paul Kocher ら, "差分電力解析(DPA)"
https://www.cryptography.com/public/pdf/DPA.pdf
Wikipedia, "サイドチャネル攻撃"
https://en.wikipedia.org/wiki/Side-channel_attack
IoT セキュリティ財団, "サイドチャネル攻撃耐性のための実際的な考察"
https://www.iotsecurityfoundation.org/best-practice-guidelines/side-channel-attack-resistance/
(この記事が役立ちましたなら、同僚と共有したり、SCAに関する経験や質問をコメントにてお知らせください!)
このコンテンツが価値あるものだと感じたなら、私たちの包括的な47週間のエリートトレーニングプログラムで何が達成できるか想像してみてください。ユニット8200の技術でキャリアを transformed した1,200人以上の学生に参加しましょう。