単純電力解析

単純電力解析（たんじゅんでんりょくかいせき、）は、暗号ハードウェア（ICカードなど）に対するサイドチャネル攻撃の1つで、1個の電力波形をモニタリングすることで暗号解読を行う攻撃である。（エスピーエイ）とも呼ばれる。1990年代中盤に提案された。
SPAの例.
RSA暗号の復号過程において、以下のアルゴリズムが実行されたとする。秘密鍵に相当するdはバイナリ演算を行っていて、nビットの数値であるとする。すなわちd[i]は0or1である。
"Calculate M=Cd mod N" 
INPUT: d,C 
OUTPUT: M 
int i;
int T=C;
for(i=n;i=>0;i--)
 T=T*T; // ①
 if(d[i]==1){
 T=T*C; // ②
 return T;
この場合d[i]=0の場合は①の自乗算の処理のみが行われるが、d[i]=1の場合は①に加え②の掛算の処理も行われる。自乗算と掛算の消費電力が異なることを利用すれば1個の消費電力波形から秘密鍵を導出できてしまう。SPAから秘密鍵を守るには以下の2種類のアルゴリズムが利用される。
"Calculate M=Cd mod N" 
INPUT: d,C 
OUTPUT: M 
int i;
int T[];
T[0]=C;
for(i=n;i=>0;i--)
 T[0]=T[0]*T[0]; // ①
 T[1]=T[0]*C; // ②
 T[0]=T[d[i]]; // ③
 return T[0];
"Calculate M=Cd mod N" 
INPUT: d,C 
OUTPUT: M 
int i;
int T[];
T[0]=C; T[1]= C*C;
for(i=n;i=>0;i--)
 T[2] = T[d[i]]*T[d[i]]; // ①
 T[1] = T[0]*T[1]; // ②
 T[0] = T[2-d[i]]; // ③
 T[1] = T[1+d[i]]; // ③
 return T[0];
上記のアルゴリズムは上から"Add-and-double-always method","Montgomery Ladder"（論文[IIT03]の呼び名）と呼ばれ、d[i]の値に関わらず①と②の演算を行い、③でd[i]の値に即した処理を行うのが特徴である。これにより理論上1個の消費電力波形から秘密鍵を導出することはできない。これら3つの暗号アルゴリズムはRSAのみにかかわらず、ElGamal暗号や楕円曲線暗号など公開鍵暗号全般に適用できる。