JPWO2012090289A1 - 暗号処理装置および方法 - Google Patents

暗号処理装置および方法 Download PDF

Info

Publication number
JPWO2012090289A1
JPWO2012090289A1 JP2012550616A JP2012550616A JPWO2012090289A1 JP WO2012090289 A1 JPWO2012090289 A1 JP WO2012090289A1 JP 2012550616 A JP2012550616 A JP 2012550616A JP 2012550616 A JP2012550616 A JP 2012550616A JP WO2012090289 A1 JPWO2012090289 A1 JP WO2012090289A1
Authority
JP
Japan
Prior art keywords
key
correction
power
point
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012550616A
Other languages
English (en)
Other versions
JP5573964B2 (ja
Inventor
伊藤 孝一
孝一 伊藤
大 山本
大 山本
武仲 正彦
正彦 武仲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012090289A1 publication Critical patent/JPWO2012090289A1/ja
Application granted granted Critical
Publication of JP5573964B2 publication Critical patent/JP5573964B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/08Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
    • H04L9/0861Generation of secret information including derivation or calculation of cryptographic keys or passwords
    • H04L9/0869Generation of secret information including derivation or calculation of cryptographic keys or passwords involving random numbers or seeds
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/003Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3066Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Physics & Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Algebra (AREA)
  • Storage Device Security (AREA)

Abstract

選択メッセージペアを使った特殊PAに対して耐タンパ性を備える。定数乗器3901は、基数および法nを入力し、基数aに対して所定定数を指数とし法nに関するべき乗剰余演算を実行し、演算結果を基数bとして出力する。個人鍵変換器3904は、個人鍵dを入力し、dを所定定数で割った商として個人鍵d’を演算する。補正鍵生成器3907は、上記割り算の余りとして補正鍵d”を生成する。べき乗剰余演算器3905は、基数bに対してd’を指数としべき乗剰余演算を実行する。べき乗剰余演算器3906は、基数aに対してd”を指数としべき乗剰余演算を実行し、補正値を出力する。補正演算器3908は、べき乗剰余演算器3905および3906の各出力を乗算処理し、その結果を暗号処理結果として出力する。

Description

本発明は、暗号処理における耐タンパ性を向上した暗号処理装置および方法に関する。
近年、情報セキュリティ技術の重要性がますます高まってきている。また、情報セキュリティの基盤技術の1つとして、公開鍵暗号(public-key cryptography)が盛んに研究されている。
公開鍵暗号にはいくつか種類があり、べき乗剰余演算を利用するRivest, Shamir, Adleman(RSA)、Diffie-Hellman(DH)といったアルゴリズムや、楕円曲線上の点のスカラー倍算を利用する楕円曲線暗号(Elliptical Curve Cryptography;ECC)などが知られている。
公開鍵暗号の利用においては、セキュリティの維持のために、個人鍵(private key)を秘密に保つことが重要である。ところが、近年では個人鍵を解読する(break)ための、いくつかの攻撃手法が知られている。よって、公開鍵暗号を用いた処理を行う機器が耐タンパ性である(tamper-proof)ためには、少なくとも既知の攻撃手法に対する対策が当該機器において実装されている必要がある。
例えば、サイドチャネル攻撃の1種として、電力解析(Power Analysis;PA)攻撃と呼ばれる攻撃手法が知られている。また、PAには、単純電力解析(Simple Power Analysis;SPA)と電力差分解析(Differential Power Analysis;DPA)の2種類がある。
よって、公開鍵暗号を用いた処理を行う機器には、SPA攻撃に対する安全性とDPA攻撃に対する安全性が求められる。例えば、SPA攻撃への対策の1つには「A&D-always法」と呼ばれる手法があり、DPA攻撃への対策の1つにはデータをランダム化する手法がある。
特開2000−132096号公報 特開2003−233307号公報 国際公開WO2009/122461号公報
[IEEE P1363] IEEE P1363/D13 (Draft Version 13, November 12, 1999) main document, Standard Specifications for Public Key Cryptography, http://grouper.ieee.org/groups/1363/P1363/draft.html [Kocher99] P.Kocher, J,Jaffe and B.Jun "Differential Power Anaysis", Crypto'99, LNCS 1666, pp.388-397, Springer-Verlag, 1999. Jean-Sebastein Coron, "Resistance against Differential Power Analysis for Elliptic Curve Cryposystems", Cryptographic Hardware and Embedded Systems (CHES’99), LNCS 1717, pp.144-157, Springer-Verlag, 1999. "Portable Data Carrier Provided with Access Protection by Dividing up Codes", European Patent No. EP1262037.
従来、A&D-always法によるSPA対策と、ランダム化の手法によるDPA対策を組み合わせることで、SPAとDPAの両方に安全となり、電力解析を完全に防ぐことができると考えられていた。
しかし、発明者は、これらの対策法を用いたとしても、電力波形を利用することで個人鍵dの値を解読できる攻撃法を考えた。この攻撃を、本出願では「特殊PA」と呼ぶことにする。
まず、個人鍵dがランダム化されていない場合の特殊PAとして、次のような攻撃が可能であることを発見した。すなわち、べき乗剰余演算を搭載したデバイスに対しては、P3 =
Q3 (mod n)かつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、攻撃者はdの全体の2/3のビット値を解読できることがわかった。点のスカラー倍算機能を搭載したデバイスに対しても、3P=3QかつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、同様の攻撃を行うことで攻撃者はdの全体の2/3のビット値を解読できることがわかった。さらにこの攻撃は、3以上の素数αに対してPα= Qα(mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアを用いた特殊PAに拡張することができることがわかった。
次に、個人鍵dがランダム化されている場合の特殊PAとして、次のような攻撃が可能であることを発見した。すなわち、ランダム化された個人鍵が、Pを入力した場合とQを入力した場合で同一となるようにランダム化された指数を一致させることにより、ランダム化されていない場合と同様の攻撃手法を適用できることがわかった。このための最も簡単な方法は、Pを与えた場合のランダムな個人鍵と、Qを与えた場合のランダム化された個人鍵が一致するまで、Qを与えた場合の電力測定を複数回繰り返すことである。そして、この電力測定時間は決して短くないが、十分現実的な時間内に攻撃を成功させるのに必要な電力測定を完了することができることがわかった。電力測定は、スマートカード等の低速なデバイスによる演算処理と通信時間のため、測定時間は電力測定回数に比例した秒単位の時間を必要とする。しかし、いったん電力測定を完了し、電力測定データのPCへの転送が完了したならば、高性能PCによる高速な解析が可能となる。
そこで本発明の課題は、特殊PAに対する耐タンパ性を備えた暗号処理装置および方法を提供することである。
一態様によれば、第1の基数aおよび法nを入力し、前記第1の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第2の基数bとして出力する定数乗器と、第1の個人鍵dを入力し、前記第1の個人鍵dを前記所定定数で割った商として第2の個人鍵d’を演算する個人鍵変換器と、前記第1の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、前記第2の基数bに対して前記第2の個人鍵d’を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を出力する第1のべき乗剰余演算器と、前記第1の基数aに対して前記補正鍵d”を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を補正値として出力する第2のべき乗剰余演算器と、前記第1のべき乗剰余演算器が出力する演算結果および前記第2のべき乗剰余演算器が出力する補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第1の基数aに対して前記第1の個人鍵dを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する補正演算器とを備えることを特徴とする暗号処理装置を提供する。
選択メッセージペアを使った特殊PAを含む攻撃に対して、耐タンパ性を備えることが可能となる。
RSAとECCの演算の対応関係を示す表1を示す図である。 電力解析の概要を説明する図である。 単純電力解析(SPA)と電力差分解析(DPA)の説明図である。 バイナリ法を用いたべき乗剰余演算処理のアルゴリズムを示す図である。 バイナリ法によるべき乗剰余演算処理の説明図である。 図5のバイナリ法に対してSPAを用いた場合の電力波形例を示す図である。 バイナリ法を用いた点のスカラー倍算処理のアルゴリズムを示す図である。 バイナリ法による点のスカラー倍算処理の説明図である。 図7のバイナリ法に対してSPAを用いた場合の電力波形例を示す図である。 DPAにおける差分波形による個人鍵ビットの判定動作の説明図である。 データのランダム化によるDPA対策法の説明図である。 A&D-always法を用いたべき乗剰余演算(ModExp_ADalways関数)のアルゴリズムを示す図である。 A&D-always法の説明図である。 A&D-always法に対してSPAを用いた場合の電力波形を示す図である。 A&D-always法を用いた点のスカラー倍算(PointMul_ADalways関数)のアルゴリズムを示す図である。 A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによるべき乗剰余演算(ModExp_RMUL_and_Adalways関数)のアルゴリズムを示す図である。 A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによるべき乗剰余演算(ModExp_RDIV_and_Adalways関数)のアルゴリズムを示す図である。 A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによる点のスカラー倍算アルゴリズム(PointMul_RMUL_and_ADalways関数)のアルゴリズムを示す図である。 A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによる点のスカラー倍算アルゴリズム(PointMul_RDIV_and_ADalways関数)のアルゴリズムを示す図である。 乗算におけるデータ値と消費電力の相関関係を示す図である。 点の加算データ値と消費電力の相関関係を示す図である。 特殊PAにおいて作成する差分波形の基本形(個人鍵がランダム化されていない場合)を示す図である。 d=(111)2=7, 選択メッセージペアP,Q(P3=Q3,P≠Q)を与えた場合の特殊PAの差分波形を示す図である。 A&D-always法を実行した場合の指数の1ビット増値d[u-i]と、ビット増前後の指数値が3の倍数であるかどうかの正否の関係を示す表2を示す図である。 図24の表の関係を表現した状態遷移図である。 図25の状態遷移を2回実行したときの全パターンを示す図である。 図26の2回分の状態遷移利用した攻撃法の説明図である。 2ビット解読を利用した、2ビット部分鍵解読失敗時のフォロー解読動作の説明図である。 下位ビットフォロー解読の成功確率を分析するための説明図である。 上位ビットフォロー解読の成功確率を分析するための説明図である。 図31 A&D-always法を実行した場合の指数の1ビット増値d[u-i]と、ビット増前後の指数値が素数αの倍数であるかどうかの正否の関係を示す表3を示す図である。 Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を用いた特殊PAの解読能力を示す表4を示す図である。 特殊PAにおいて作成する差分波形の基本形(個人鍵がランダム化されている場合)を示す図である。 個人鍵P,Qがランダム化されたときの、特殊PAによる差分波形の作成法(その1)の説明図である。 ランダム化された個人鍵が一致する場合の差分波形(上)と異なる場合の差分波形(下)を示す図である。 個人鍵P,Qがランダム化されたときの、特殊PAによる差分波形の作成法(その2)の説明図である。 第1〜第3実施形態の暗号処理装置の第1のハードウェア構成例を示す図である。 第1〜第3実施形態の暗号処理装置の第2のハードウェア構成例を示す図である。 第1,第2,第3の実施形態の暗号処理装置に共通の機能構成図である。 第1〜第6の実施形態によって生成される電力差分波形を示す図である。 第4,第5,第6の実施形態の暗号処理装置に共通の機能構成図である。 第1の実施形態の制御処理を示すフローチャートである。 第1,第2,第3の実施形態におけるべき乗剰余演算処理の詳細(その1)を示すフローチャートである。 第1,第2,第3の実施形態におけるべき乗剰余演算処理の詳細(その2)を示すフローチャートである。 第2の実施形態の制御処理を示すフローチャートである。 第3の実施形態の制御処理を示すフローチャートである。 第4の実施形態の制御処理を示すフローチャートである。 第4,第5,第6の実施形態における点のスカラー倍算処理の詳細(その1)を示すフローチャートである。 第4,第5,第6の実施形態における点のスカラー倍算処理の詳細(その2)を示すフローチャートである。 第5の実施形態の制御処理を示すフローチャートである。 第6の実施形態の制御処理を示すフローチャートである。
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。説明の順序は以下のとおりである。
後述の第1〜第6の実施形態の暗号処理装置は、A&D-always法によるSPA対策機能とランダム化の手法によるDPA対策機能を実装し、かつ特殊PAに対する対策機能を実装した、べき乗剰余演算または楕円曲線上の点に対するスカラー倍算を行う装置である。そこで、第1〜第6の実施形態についての理解を助けるために、まず、べき乗剰余演算および楕円曲線上の演算について説明する。また、第1〜第6の実施形態についての理解を助けるために、第1〜第3の比較例についても説明する。さらに、発明者が発見した、個人鍵dがランダム化されていない場合の特殊PA法と個人鍵dがランダム化されている場合の特殊PA法について説明する。その後、本願の発明者が比較例および特殊PAについての検討から得た知見と、当該知見に基づいて発明者が開発した第1〜第6の実施形態について、順に説明する。
<べき乗剰余演算の概略>
まず、べき乗剰余演算について説明する。RSAおよびDHでは、べき乗剰余演算と呼ばれる処理を用いた演算が行われる。べき乗剰余演算とは、基数a, 指数x, 法nに対して、式(0.1)を計算する演算である。
z=ax (mod n) (0.1)
RSAおよびDHでは、xを秘密情報とした処理が行われる。例えばRSAの復号演算においては、暗号文c、個人鍵d、公開法nから、式(0.2)を満たすmを計算することで復号処理が行われる。
m=cd (mod n) (0.2)
DH鍵交換では、通信相手の公開鍵c、個人鍵d、公開法nから、上記式(0.2)を計算することで、共有鍵mを得る。電子署名においては、署名対象データc、個人鍵d、法nから、上記式(0.2)を計算することで、電子署名mを得る。
以下の説明では、一般式として、式(0.3)を用いることにする。
v=ad (mod n) (0.3)
いずれの処理においても、個人鍵dの値を知らない第三者は、c,nの値を知っていたとしても、正しい復号処理結果、共有鍵、電子署名処理結果であるmを算出することができない。
<ECCの演算の概略>
次に、楕円曲線上の演算について説明する。ECCで使われる楕円曲線のうちで主なものは、素体GF(p)上で定義される式(1.1)の楕円曲線と、2の拡大体GF(2m)上で定義される式(1.2)の楕円曲線である(なお、GFはGalois fieldの略であり、pは素数である)。
y2=x3+ax+b(mod p) (1.1)
ただし、pは素数
a,bは楕円曲線パラメータ(0≦a,b<p)
a,b,x,y∈GF(p)
y2+xy=x3+ax2+b (mod f(x)) (1.2)
ただし、f(x)はGF(2m)の多項式
a,bは楕円曲線パラメータ(0≦a,b<p)
a,b,x,y∈GF(2m)
上述のように、a,bは、楕円曲線パラメータと呼ばれ、楕円曲線を一意に決定するためのパラメータである。
式(1.1)で表される楕円曲線上の点Aは、式(1.1)を満たすxとyの組によりA=(x,y)と表される。同様に、式(1.2)で表される楕円曲線上の点Aは、式(1.2)を満たすxとyの組によりA=(x,y)と表される。
また、楕円曲線上の特殊な点として無限遠点(point at infinity, or infinite point)とベースポイントが定義される。無限遠点を以下では「O」(大文字のオー)、ベースポイントを以下では「G」と表記する。ベースポイントGは、楕円曲線上の点の一つで、楕円曲線暗号の利用者間で共通して使用され、公開鍵/個人鍵ペア生成をはじめ、楕円曲線暗号を用いた各種機能において使用される。
なお、本明細書の以下の議論は、式(1.1)の楕円曲線についても式(1.2)の楕円曲線についても同様に成り立つ。よって、以下では式(1.1)と(1.2)の区別について言及せずに、単に「楕円曲線」、「点A」、「点(x,y)」、「x座標」、「y座標」、「楕円曲線パラメータaおよびb」などの表記を用いることがある。
楕円曲線上の点同士に対して、ある演算(以下「加算」といい、「+」と表す)を定義すると、楕円曲線上の点の集合は可換群をなすことが知られている。無限遠点Oは零元(すなわち加算における単位元)にあたる。また、楕円曲線上の任意の点A(点Aは無限遠点Oでもよい)に対して式(1.3)が成り立つ。
A+O=O+A=A (1.3)
以下では点Aの逆元を−Aと表記する。点−Aのx座標とy座標は、楕円曲線が定義される体GF(p)またはGF(2m)上の加算または減算により計算することができる。具体的には、点A=(x,y)の逆元である点−Aは、楕円曲線が式(1.1)で定義される場合は式(1.4)により表され、楕円曲線が式(1.2)で定義される場合は式(1.5)により表される。
-A=(x, -y) (1.4)
-A=(x, x+y) (1.5)
なお、ある点Aと点Aに対してA=A+Aと表される点Aのx座標とy座標も、点AとAのx座標とy座標を用いて、体GF(p)またはGF(2m)上の加減乗除により計算することができる。ここで、A=Aである場合には、A=A+Aを2Aとも表し、点Aから点A=2Aを求める演算を2倍算(doubling)という。2倍算も、体GF(p)またはGF(2m)上の加減乗除により実現される。
また、減算は、式(1.6)のように逆元の加算として定義される。
A1-A2=A1+(-A2) (1.6)
さらに、楕円曲線上の点Aに対しては、スカラー値と呼ばれる整数xを用いて、スカラー倍算(scalar multiplication)と呼ばれる演算が定義される。点のスカラー倍算は、楕円曲線上の点A、スカラー値と呼ばれる整数xから、
V=xA (1.7)
を満たす楕円曲線上の点Vを計算する処理である。
ECCでは、xを秘密情報とした処理が行われる。例えばECDH鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をA、個人鍵をdとすると、
V=dA (1.8)
を満たす楕円曲線上の点Vを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。
式(1.8)においては、dが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ECCにおいては、dの値の保護が重要な耐タンパ機能となる。
数学的には、式(1.8)においてd以外の値が既知だとしても、dを計算する計算量が大きすぎるため、現実的な時間内にdを求めることが難しい離散対数問題として知られている。より具体的には、楕円曲線パラメータ(Elliptic Curve Parameter)が160ビット以上の場合、A,Vの値を知っていたとしても、dの値を求めることが困難であることが知られている。
楕円曲線暗号における公開鍵(public key)と個人鍵(private key)として、前述したベースポイントG、個人鍵を表すスカラー値dに対し、公開鍵はV=dGを満たすVにより与えられる。すなわち、公開鍵Vは楕円曲線上の点であり、個人鍵dはスカラー値である。たとえ点GとVが攻撃者に知られていても、点GとVから個人鍵dを計算することは、莫大な計算量を必要とするので非常に困難である。これも、前述した離散対数問題の計算困難性として知られている。
さらに、ECCは、DHアルゴリズムによる鍵共有(key agreement)や、ディジタル署名アルゴリズム(Digital Signature Algorithm;DSA)などにも利用可能である。何の目的でECCが利用されるにしろ、ECCを利用した処理はスカラー倍算を含む。DH鍵共有を例に説明すれば次のとおりである。
例えば、第1の装置の個人鍵がdであり、第2の装置の個人鍵がdであるとする。すると、第1の装置の公開鍵Qは、ベースポイントGからQ=dGと計算され、第2の装置の公開鍵Qは、ベースポイントGからQ=dGと計算される。このように、公開鍵の生成のためにスカラー倍算が行われる。
また、第1の装置は自らの公開鍵Qを第2の装置に送り、第2の装置は自らの公開鍵Qを第1の装置に送る。すると、第1の装置はスカラー倍算によりdQを計算し、第2の装置もスカラー倍算によりdQを計算する。その結果、式(1.9)に示すように、第1の装置と第2の装置は同じ鍵Kを共有することができる。
K=dAQB=dA(dBG)=dB(dAG)=dBQA (1.9)
ECCが、上記に例示したDH鍵共有以外の目的に利用される場合も、やはりスカラー倍算が行われる。
<電力解析(PA)について>
このように、数学的に求めることが困難な個人鍵dは、電力解析(Power Analysis;PA)を用いることで容易に解読することができることが知られている。PAの基本メカニズムは、式(0.3)を計算するべき乗剰余演算の処理手順、または式(1.8)を計算する点のスカラー倍算の処理手順に大きな関連がある。以下では、べき乗剰余演算および点のスカラー倍算の演算手順について説明したうえで、べき乗剰余演算およびスカラー倍算に対するPAを説明する。
直感的には、図1の表1に示す対応関係があり、これらの関係を踏まえることで、RSAとECCの演算を同時に理解することが容易となる。図1において、RSAにおけるべき乗剰余演算「ad (mod n)」は、ECCにおける点のスカラー倍算「dA」に対応する。RSAにおける乗算「a×d(mod n)」は、ECCにおける点の加算「A+B」に対応する。RSAにおける除算「a×d-1(mod n)」は、ECCにおける点の減算「A-B」に対応する。RSAにおける2乗算「a2 (mod n)」は、ECCにおける点の2倍算「2A」に対応する。RSAにおける値「1」は、ECCにおける「無限遠点O」に対応する。RSAにおける値「1」に関する乗算「1×a=a×1=a」は、ECCにおける「無限遠点O」に関する加算「O+A=A+O=A」に対応する。RSAにおける値「1」の2乗算「12 =1」は、ECCにおける「無限遠点O」の2倍算「2O=O」に対応する。
PAは、1998年に発見された解析法(非特許文献2)である。図2に示されるように、暗号機能を実行中(以下、暗号処理)のスマートカード等のデバイスの消費電力を測定し、測定されたデータを用いることでデバイスの内部に格納されたユーザの秘密情報を推定、解析する方法である。(図2)
<PAの種類:単純電力解析(SPA)と電力差分解析(DPA)>
PAには、単純電力解析(Simple Power Analysis, SPA)と、電力差分解析(Differential Power Analysis, DPA)の2種類がある(図3)。いずれの攻撃も、暗号デバイスの内部状態を電力波形を用いて観察することで、個人鍵を解読する攻撃である。
SPAは、単一の電力波形を用いた攻撃法である。図3(a)に示されるように、処理内容と暗号鍵の相関関係を利用して、電力波形の形状から、暗号デバイスで実行されている処理内容を直接的に観察することで、個人鍵(暗号鍵、秘密鍵)を解読する。
DPAは、複数の電力波形の差分を用いた攻撃法である。図3(b)に示されるように、処理内容と暗号鍵の相関関係を利用して、複数の電力波形の差分から、暗号デバイス内部で処理されているデータ値を間接的に観察することで、個人鍵(暗号鍵、秘密鍵)を解読する。
以上のように、PA攻撃は、スカラー倍算を実行中の装置の消費電力を測定することで、個人鍵として使われるスカラー値dを解読しようとする、非破壊攻撃の一種である。よって、何の目的でRSA,DHやECCが利用されるにしろ、個人鍵dの漏洩防止の対策としては、べき乗剰余演算やスカラー倍算を実行中の装置の消費電力波形が個人鍵dの特徴を示さないようにすることが有効である。もしPA攻撃に対して何の対策もとられないと、べき乗剰余演算やスカラー倍算を実行中の装置の消費電力波形の特徴から、個人鍵dが解読されてしまう危険性がある。SPAとDPAは異なる種類の攻撃法であるため、PAに対する対策を行うためにはSPAとDPAの両方に対する対策法が必要である。
後述の第1〜第6の実施形態の暗号処理装置は、SPA攻撃に対してもDPA攻撃に対しても安全であるように、かつ後述する特殊PAに対しても安全であるように、設計されている。そこで、第1〜第6の実施形態の利点についての理解を助けるため、続いて、いくつかの比較例について説明する。
<バイナリ法(第1の比較例)>
まず、第1の比較例として、「バイナリ法」について説明する。以下、この方法を第1の比較例と呼ぶ。バイナリ法は、SPA攻撃に対してもDPA攻撃に対しても脆弱である。
始めに、べき乗剰余演算におけるバイナリ法について説明する。
例えば、式(0.3)におけるn,a,dが共に1024ビット以上の長さをもつ場合、式(0.3)に記されるべき乗剰余を単純に計算した場合、(mod n)を用いた掛け算をd回必要とするが、21024以上の計算量を必要とするため現実的ではない。この計算量をlog2dに削減するためのテクニックとして、バイナリ法と呼ばれる演算法が知られている。
べき乗剰余演算におけるバイナリ法のアルゴリズムを図4に、処理概略を図5に示す。
ここで説明の便宜上、個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する(0≦i≦u-1)。d[0]が最下位ビット(Least Significant Bit;LSB)でありd[u-1]が最上位ビット(Most Significant Bit;MSB)である。すると、uビットの個人鍵dは、式(2.1)のように表現される。
d=d[u-1]|| …||d[1]||d[0] (2.1)
ここで、“||”は、1ビット以上の長さのビット列同士の連結(concatenation)を示す。
すると、式(0.3)と式(2.1)より、式(2.2)が得られる。
ad (mod n)=a**(2u-1d[u-1]+・・・+21d[1]+20d[0]) (mod n)
= a**(2u-1d[u-1]) (mod n)×・・・a**(21d[1]) (mod n)×a**(20d[0]) (mod n)
ただし、「**」はべき乗演算を示す。 (2.2)
バイナリ法は式(2.2)を利用した計算手順である。式(2.2)において、dのビット値d[i]を上位ビットから下位ビット(すなわちi=u-1から0)の順にスキャンし、dのビット値d[i]に応じて、下記式(2.3)の演算を行う。
d[i] =1の場合:2乗算(v := v×v (mod n))の後に、
乗算(v:=v×a (mod n))を実行。
d[i] =0の場合:2乗算(v := v×v (mod n))のみを実行。
(2.3)
例えば、個人鍵dが(1100101)2の場合について具体的に説明すると、バイナリ法は式(2.4)にしたがってべき乗剰余演算を実現する手法である。
ad (mod n)=(((((((12×a)2)×a)2)2)2×a)2)2×a (mod n) (2.4)
すなわち、スカラー倍算の結果を変数vで表すことにすると、バイナリ法では式(2.5)のとおり、変数vがまず値1により初期化される(図4の401行)。
v=O (2.5)
その後、MSBからLSBへと順に(図4の402行から405行のループ処理)、式(2.3)が実行される。すなわち、2乗算によりv×v (mod n)を求め(図4の403行)、その後、もしd[i]=1ならば乗算を行い、得られた結果を変数vに代入する(図4の404行)、という処理が繰り返される。そして、最終的に変数vに得られた値が出力される(図4の406行)。
具体的には、d[6]=1なので、式(2.6)のとおり、6ビット目に対応して2乗算と乗算が行われる(図5のD6とA6)。
v=12×a (mod n) (2.6)
そして、d[5]=1なので、式(2.7)のとおり、5ビット目に対応して2乗算と乗算が行われる(図5のD5とA5)。
v=(12×a)2×a (mod n) (2.7)
また、d[4]=0なので、式(2.8)のとおり、4ビット目に関しては2乗算のみが行われ、加算は行われない(図5のD4)。
v=((12×a)2×a)2 (mod n) (2.8)
同様に、d[3]=0なので、式(2.9)のとおり、3ビット目に関しても2乗算のみが行われ、加算は行われない(図5のD3)。
v=(((12×a)2×a)2)2 (mod n) (2.9)
次の2ビット目に関しては、d[2]=1なので、式(2.10)のとおり、2乗算と乗算が行われる(図5のD2とA2)。
v=((((12×a)2×a)2)2)2×a (mod n) (2.10)
また、次の1ビット目に関しては、d[1]=0なので、式(2.11)のとおり、2乗算のみが行われ、乗算は行われない(図5のD1)。
v=(((((12×a)2×a)2)2)2×a)2(mod n) (2.11)
そして、最後の0ビット目に関しては、d[0]=1なので、式(2.12)のとおり、2乗算と乗算が行われる(図5のD0とA0)。
v=(((((((12×a)2×a)2)2)2×a)2)2×a (mod n) (2.12)
以上のようにしてd[i]=1であるiビット目に対応して乗算された点aの指数は、式(2.12)から理解されるように、2である。よって、上記の式(2.5)〜(2.12)とともに例示した手順により、確かに式(2.4)にしたがって、v=ad (mod n)が得られる。
上記の例から明らかなとおり、バイナリ法によれば、2乗算の回数は個人鍵dのビット長uに等しく、乗算の回数は個人鍵dのハミング重み(Hamming weight)に等しい。よって、バイナリ法によるべき乗剰余演算の計算量は、2のオーダではなく、uのオーダに抑えられる。
ここで、バイナリ法においては、2乗算と乗算の演算シーケンスが、そのままdのビット値と連動しており、SPAはこの性質を利用してdを解読する。つまり、図6の電力波形例に示されるように、乗算と2乗算の処理の違いを、電力波形を用いて区別できるような環境においては、以下のような解読が可能となる。すなわち、2乗算のあとに乗算を実行しているならば指数dのビット値は1であると解読できる(図6の601または603)。一方、2乗算のみを実行しているならば指数dのビット値は0であると解読できる(図6の602)。この解読をdの全ビットについて行うことでSPAが成功する。
SPAへの対策法として、dのビット値に関係なく乗算と2乗算の演算パターンを一定化する方法が知られており、後に述べるA&D-always法もこの対策法を実現する手法である。
次に、点のスカラー倍算におけるバイナリ法について説明する。
例えば個人鍵dが160ビットである場合、dは非常に大きな数(例えば、2160に近い数)である可能性がある。よって、式(1.8)の定義どおりにスカラー倍算を実行することは、非常に多くの回数の点の加算をともなうため、非現実的である。バイナリ法は、べき乗剰余演算の場合と同様に、スカラー倍算の計算量のオーダを個人鍵dのビット数のオーダに抑えるための手法である。
点のスカラー倍算におけるバイナリ法のアルゴリズムを図7に、処理概略を図8に示す。
説明の便宜上、べき乗剰余演算の場合と同様に、個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する(0≦i≦u-1)。d[0]が最下位ビット(LSB)でありd[u-1]が最上位ビット(MSB)である。これにより、uビットの個人鍵dは、べき乗剰余演算の場合と同様に、前述した式(2.1)のように表現される。
すると、式(1.8)と式(2.1)より、式(3.1)が得られる。
dA=2u-1d[u-1]A+・・・+21d[1]A+20d[0]A (3.1)
バイナリ法は式(3.1)を利用した計算手順である。式(3.1)において、dのビット値d[i]を上位ビットから下位ビット(すなわちi=u-1から0)の順にスキャンし、dのビット値d[i]に応じて、下記式(3.2)の演算を行う。
d[i] =1の場合:2倍算(v := 2×v)の後に、加算(v:=v+A )を実行。
d[i] =0の場合:2倍算(v := 2×v)のみを実行。
(3.2)
点のスカラー倍算における式(3.2)とべき乗剰余演算における式(2.3)の関係は、前述した図1の対応関係より、理解することができる。
例えば、個人鍵dが(1100101)2の場合について具体的に説明すると、バイナリ法は式(3.3)にしたがってスカラー倍算を実現する手法である。
dA=2(2(2(2(2(2(2O+A)+A)))+A))+A=26A+25A+22A+A (3.3)
すなわち、スカラー倍算の結果を変数Vで表すことにすると、バイナリ法では式(3.4)のとおり、変数Vがまず無限遠点Oにより初期化される(図7の701行)。
V=O (3.4)
その後、MSBからLSBへと順に(図7の702行から705行のループ処理)、式(3.2)が実行される。すなわち、2倍算により2Vを求め(図7の703行)、その後、もしd[i]=1ならば点Aの加算を行い、得られた結果を変数Vに代入する(図7の704行)、という処理が繰り返される。そして、最終的に変数Vに得られた値が出力される(図7の706行)。ここで、図7の703行の「ECDBL(V)」は、変数Vの値に対して2倍算2Vを計算する関数処理を示す。また、図7の704行「ECADD(V,A)」は、変数Vの値に変数Aの値を加算する関数処理を示す。
具体的には、d[6]=1なので、式(3.5)のとおり、6ビット目に対応して2倍算と加算が行われる(図8のD6とA6)。
V=2O+A (3.5)
そして、d[5]=1なので、式(3.6)のとおり、5ビット目に対応して2倍算と加算が行われる(図8のD5とA5)。
V=2(2O+A)+A (3.6)
また、d[4]=0なので、式(3.7)のとおり、4ビット目に関しては2倍算のみが行われ、加算は行われない(図8のD4)。
V=2(2(2O+A)+A) (3.7)
同様に、d[3]=0なので、式(3.8)のとおり、3ビット目に関しても2倍算のみが行われ、加算は行われない(図8のD3)。
V=2(2(2(2O+A)+A)) (3.8)
次の2ビット目に関しては、d[2]=1なので、式(3.9)のとおり、2倍算と加算が行われる(図8のD2とA2)。
V=2(2(2(2(2O+A)+A)))+A (3.9)
また、次の1ビット目に関しては、d[1]=0なので、式(3.10)のとおり、2倍算のみが行われ、加算は行われない(図8のD1)。
V=2(2(2(2(2(2O+A)+A)))+A) (3.10)
そして、最後の0ビット目に関しては、d[0]=1なので、式(3.11)のとおり、2倍算と加算が行われる(図8のD0とA0)。
V=2(2(2(2(2(2(2O+A)+A)))+A))+A (3.11)
以上のようにしてd[i]=1であるiビット目に対応して加算された点Aの係数は、式(3.11)から理解されるように、2である。よって、上記の式(3.4)〜(3.11)とともに例示した手順により、確かに式(3.3)にしたがって、V=dAが得られる。
上記の例から明らかなとおり、バイナリ法によれば、2倍算の回数は個人鍵dのビット長uに等しく、加算の回数は個人鍵dのハミング重み(Hamming weight)に等しい。よって、バイナリ法によるスカラー倍算の計算量は、べき乗剰余演算の場合と同様に、2のオーダではなく、uのオーダに抑えられる。
ここで、点のスカラー倍算のバイナリ法においては、2倍算と加算の演算シーケンスが、そのままdのビット値と連動しており、SPAはこの性質を利用してdを解読する。つまり、図9の電力波形例に示されるように、点の加算と2倍算の処理の違いを、電力波形を用いて区別できるような環境においては、以下のような解読が可能となる。すなわち、2倍算のあとに加算を実行しているならば指数dのビット値は1であると解読できる(図9の901または903)。一方、2倍算のみを実行しているならば指数dのビット値は0であると解読できる(図9の902)。この解読をdの全ビットについて行うことでSPAが成功する。
べき乗剰余演算の場合と同様に、点のスカラー倍算におけるSPAへの対策法としても、dのビット値に関係なく加算と2倍算の演算パターンを一定化する方法が知られており、後に述べるA&D-always法がこの対策法を実現する手法である。
上述のべき乗剰余演算または点のスカラー倍算におけるバイナリ法は、SPA攻撃だけではなく、DPA攻撃に対しても脆弱である。なお、DPA攻撃への安全性に関する説明の理解を助けるために、DPAによる攻撃を行う場合の基本アイデアを説明する。
バイナリ法は、d=d[u-1]|| … ||d[1] ||d[0](式(2.1))に対して、ad (mod n)(べき乗剰余演算の場合)またはdA(点のスカラー倍算の場合)を計算するために、
ad[u-1](mod n)→ad[u-1]||d[u-2](mod n)→ad[u-1]||d[u-2] ||d[u-3](mod n)→...
または、
d[u-1]A→(d[u-1]||d[u-2])A→(d[u-1]||d[u-2]||d[u-3])A→...
のように、スカラー値または指数(d)のビットを上位から1つずつ増やしながら、最終的にad (mod n)またはdAを計算する。
図4または図7に示す変数iに関するループ処理(図4の402から405または図7の702から705)を1回実行するごとに、指数が1ビット増えた計算結果が変数vまたはVに格納される。
例えば、d=(1101)2の場合、
C(1)2(mod n)→C(11)2(mod n)→C(110)2(mod n)→C(1101)2(mod n)
または、
(1)2A→(11)2A→(110)2A→(1101)2A
の順に計算を行う。
DPAを行う攻撃者は、「指数またはスカラー値のビット値を1つずつ増やしながら計算を行う」というバイナリ法の性質を利用して、dのビットを1ビットずつ予想しながら、その予想が正しいかどうかを電力波形により識別することを繰り返す。一般的な総当り法による攻撃の場合、個人鍵の解読は2d (べき乗剰余演算の場合)またはd(点のスカラー倍算の場合)に比例した手間が必要である。これに対して、DPAを用いることで、d(べき乗剰余演算の場合)またはlog2d(点のスカラー倍算の場合)に比例した手間で個人鍵を解読することができる。
例えば、dの最上位ビットが0の場合、a0 (mod n)(べき乗剰余演算の場合)または0A (mod n)(点のスカラー倍算の場合)で表されるデータ値が暗号デバイス内部で計算され、内部のメモリにロード/ストアされる。一方、dの最上位ビットが、1の場合、a1 (mod n)(べき乗剰余演算の場合)または1A (mod n) (点のスカラー倍算の場合)で表されるデータ値が暗号デバイス内部で計算され、内部のメモリにロード/ストアされる。
暗号デバイスを含めた一般的なハードウェアは、ロード・ストアされるデータ値のハミング重み('1')に比例した電力を消費するという性質が知られている。DPAはこの性質を利用することで、ロード/ストアされたデータ値がa0 (mod n)もしくはa1 (mod n)(べき乗剰余演算の場合)、または1Aもしくは0A(点のスカラー倍算の場合)のいずれであるかを判別することができる。この結果、例えばdの最上位ビットが1であることが分かった後に、1つ下位のビット値を解読するためには、同様の手順を用いて、以下の判別を行う。すなわち、ロード/ストアされたデータ値がa(10)2 (mod n)もしくはa(11)2 (mod n)(べき乗剰余演算の場合)、または(10)2Aもしくは(11)2A(点のスカラー倍算の場合)のいずれであるかを判別する。
DPAの具体的な手順は以下の(DPA-1)から(DPA-6)に示される。
(DPA-1) 暗号文VとしてV=Mj(j=1,2,…,L)を入力した消費電力
Powj(t) (j=1,2,…,L)を測定する。
ただし、tは時刻情報である。
(DPA-2) i:=u-1;に初期化する
(DPA-3) 攻撃者は、d[i]のビット値を予想する。
(DPA-4) 攻撃者は、既知のMj,d[u-1]||… ||d[i+1]と、
予想されたd[i]から、
Gj=(d[u-1]||…||d[i+1]||d[i])Mj
の値をj=1,2,..,Lそれぞれについて計算する。
この計算の結果に応じて、以下に示す基準により、
L個の消費電力データPowj(t)を2つのグループに分類する。
グループ1 :Mjに対し、Gjのx座標(またはy座標、のどちらか
に着目)の最下位ビットが1となるPowj(t)の集合
グループ0 :Mjに対し、Gjのx座標(またはy座標、のどちらか
に着目)の最下位ビットが0となるPowj(t)の集合
(DPA-5) 上記でグループ分けした消費電力データに対し、
(グループ1に属するPowj(t)の平均)−(グループ0に属するPowj(t)の平均)
で示される差分波形Diff(t)を作成する。
その結果、図10(a)に示すようなスパイクが差分波形に現
れる場合、予想したd[i]が正しいと判定し、
図10(b)に示すような平坦な波形の場合、
予想したd[i]が誤っていると判定する。
(DPA-6) i:=i-1と計算した結果、i30の場合、まだ解読していないビット
があるため、(DPA-3)に戻る。i<0の場合、全てのdのビット値
が解読できたので終了する。
DPA-5において、d[i]の予想が正しい場合は、Gjで表される常にデータ値のx座標(y座標)の最下位ビットが全て'1'となる消費電力のグループ1から、x座標(y座標)の最下位ビットが全て'0'となる消費電力のグループ0を引いているので、この'0','1'の消費出力差がスパイクとして出現する(図10(a))。d[i]の予想が誤っている場合は、Gjのx座標(y座標)の最下位ビットはグループ0,1ともに'0'と'1'が混在しているため、消費電力の差が発生しないので、平坦な波形となる(図10(b))。
DPA対策法として、図11に示すデータのランダム化と呼ばれる方法が知られている。DPA対策なしの場合、図11(a)に示すような挙動となる。すなわち、計算データ値の系列ad[u-1](mod n)→ad[u-1]||d[u-2](mod n)→ad[u-1]||d[u-2] ||d[u-3](mod n)→...(べき乗剰余演算)、またはd[u-1]A→(d[u-1]||d[u-2])A→(d[u-1]||d[u-2]||d[u-3])A→...(点のスカラー倍算)が個人鍵d[i]の値から一意に決定する。これに対し、図11(b)に示すように、乱数を用いてこの計算データ値をかく乱することで、計算データの系列値がランダム化される。このため、消費電力と個人鍵の相関を隠蔽し、DPAに安全な処理を実現することができる。なお、演算の最後には、ランダム化した分を補正するための正規化の処理が実行され、最終的にべき乗剰余演算値ad (mod n)またはスカラー倍算値dAが得られる。後に述べる「ランダム化A&D-always法」と呼ばれる方法(第3の比較例)では、A&D-always法をベースとすることでSPA対策を実現しつつ、データのランダム化を併用することでDPA対策も同時に実現している。
<A&D-always法を用いたPA対策法(第2の比較例)>
SPAに対する対策法のひとつとして、A&D-always法と呼ばれる方法が知られている。以下、この方法を第2の比較例と呼ぶ。A&D-always法は、Add-and-Double-always法の省略であり、個人鍵dのビット値に関係なく、常に2乗算と乗算(べき乗剰余演算の場合)または点の2倍算と加算(点のスカラー倍算の場合)を同じパターンで実行することが特徴である。
A&D-always法を用いたべき乗剰余演算アルゴリズムを図12に示す。A&D-always法の概略を図13に示す。
個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する(0≦i≦u-1)。d[0]が最下位ビット(LSB)でありd[u-1]が最上位ビット(MSB)である。これにより、uビットの個人鍵dは、前述した式(2.1)のように表現される。また、べき乗剰余演算における基数をa、法をnとする。出力値v=ad (mod n)である。
基本的には、d[i]=0の場合の演算結果(図13の各「2乗算」の出力)をバッファt[0]に(図12の1201行、1203行)、d[i]=1の場合の演算結果(図13の各「乗算」の出力)をバッファt[1]に(図12の1204行)、それぞれ計算する。そして、d[i]のビット値に応じて正しい値(図13の「セレクト」の出力)をバッファt[0]にコピーする(図12の1205行)。以上の演算を、dの全ビットに対して繰り返す(図12の1202行から1206行までのループ処理)。
図13の第1段、第2段として示されるように、各演算段において、t[0]とt[1]の計算に、それぞれ2乗算と乗算を実行するため、dのビット値に関係なく、常に2乗算と乗算が繰り返される。このため、電力波形は図14に示されるようになり、波形からdのビット値を得ることができないため、SPAに安全となる。
なお、後のランダム化法による説明を容易にするために、基数a、秘密鍵d、法nに対して図12のアルゴリズムによってべき乗剰余演算に対するA&D-always法を実行する処理を、関数ModExp_ADalways(a, d, n)と表現する。
A&D-always法は、ECCにおける点のスカラー倍算に対しても適用できる。図15に、A&D-always法を用いた点のスカラー倍算アルゴリズムを示す。また、概略は、前述した図13に示される。
個人鍵dの表現は、べき乗剰余演算の場合と同様である。また、点のスカラー倍算における楕円曲線上の点をAとする。出力値v=dAである。
べき乗剰余演算の場合と同様に、d[i]=0の場合の演算結果(図13の各「ECDBL」の出力)をバッファT[0]に(図15の1501行、1503行)、d[i]=1の場合の演算結果(図13の各「ECADD」の出力)をバッファT[1]に(図15の1504行)、それぞれ計算する。そして、d[i]のビット値に応じて正しい値(図13の「セレクト」の出力)をバッファT[0]にコピーする(図15の1505行)。以上の演算を、dの全ビットに対して繰り返す(図15の1502行から1506行までのループ処理)。ここで、図15の1503行の「ECDBL(T[0])」は、バッファT[0]の値に対して2倍算2T[0]を計算する関数処理を示す。また、図15の1504行「ECADD(T[0],T[1])」は、バッファT[0]の値にバッファT[1]の値を加算する関数処理を示す。
図13の第1段、第2段として示されるように、各演算段において、T[0]に対応するt[0]とT[1]に対応するt[1]の計算に、それぞれ点の2倍算(「ECDBL」)と点の加算(「ECADD」)を実行するため、dのビット値に関係なく、常に点の2倍算と点の加算が繰り返される。このため、電力波形は図14に示されるようになり、波形からdのビット値を得ることができないため、べき乗剰余演算の場合と同様に、SPAに安全となる。
なお、後のランダム化法による説明を容易にするために、秘密鍵d、楕円曲線上の点Aに対して図14のアルゴリズムによって点のスカラー倍算に対するA&D-always法を実行する処理を、関数PointMul_ADalways(d, A)と表現する。
<ランダム化A&D-always法によるDPA対策法(第3の比較例)>
A&D-always法を用いることで、SPAを防ぐことができるが、DPAを防ぐことはできない。DPAへの対策法として、個人鍵dをランダム化する方法が、非特許文献3に開示されている。以下、この方法を、従来法1と呼ぶ。
従来法1従来法2 従来法1は、dを用いたべき乗剰余もしくはスカラー倍算を実行する代わりに、
dj’=d+rj#E (rj:20ビット乱数) (4.1)
を満たすdj’を用いたべき乗剰余もしくはスカラー倍算を実行する。rjは演算を実行するごとに変化する乱数rjであり、#Eは位数と呼ばれるパラメータである。従来法1においては、セキュリティと処理速度のトレードオフを考慮し、乱数rjは20ビットが推奨されている。位数#Eは、べき乗剰余もしくは点のスカラー倍算における周期を表す値である。そして、べき乗剰余演算の場合、
a#E=1 (mod n) (4.2)
の等式が、点のスカラー倍算の場合
#EA=O (4.3)
の等式が、任意のaもしくはAについて成立することが知られている。従来法1を用いることで、dj’の全ビットが乱数rjによってランダム化された値となるため、DPAに対して安全となる。また、#Eの周期性を考慮すると、
adj(mod n)= ad+rj#E =ad ×(a#E)rj=ad ×1=ad(mod n)
および
dj’A=dA+rj(#EA)=dA+O=dA
であり、計算結果は個人鍵dに対する計算結果と一致する。
従来法1は、乱数を用いた乗算により指数をランダム化するDPA対策法であった。これに対して、乱数を用いた除算により指数をランダム化する方法が非特許文献4に開示されている。従来法2以下、この方法を、従来法2と呼ぶ。
従来法2では、指数dと乱数rjから新しい指数dj’,ejを以下の式(4.4)および(4.5)に従い計算する。
dj’=ed/rju (4.4)
ej’=d (mod rj) (4.5)
ただし、exuはxの整数部を表す記号であり、例えばe3.3u=3, e7.8u=7, e6u=6である。乱数rjは、従来法1と同様に、演算を実行するごとに変化する20ビット乱数である。 式(4.4)および(4.5)で表されるdj’, ej’を生成することで、dをrjで割ったときの商と余りの値をそれぞれdj’, ej’に与えられる。従来法2では、この生成された値を用いて、
(ari)dj’ ×aej’ (mod n) (4.6)
に示されるべき乗剰余演算、もしくは
dj’(rjA)+ej’A (4.7)
に示される点のスカラー倍算を行う。rj, dj’, ej’の全ビット値はランダム化されているため、DPAに安全な処理を実現することができる。また、dj’, ej’はそれぞれdをrjで割ったときの商と余りの値であるため、
d=dj’×rj+ej (4.8)
が成立する。すなわち、式(4.8)により式(4.6)と(4.7)はそれぞれ
(ari)dj’ ×aej’ (mod n)=adj’rj+ej’ (mod n)=ad (mod n)
dj’(rjA)+ej’A=(dj’ × rj +ej )A=dA
と変形でき、個人鍵dに対する計算結果と一致する。
電力解析への対策を行うためには、SPAとDPAの片方だけ防ぐのではなく、同時に防ぐ必要がある。なぜなら、いずれの攻撃が成功しても、攻撃者は個人鍵dの値を得ることができるからである。SPA,DPA対策を実行するためには、SPA対策とDPA対策を組み合わせる方法が一般的である(図15)。これらの対策法を組み合わせることで、両方の攻撃を防ぐことができる。
電力解析への対策を行うためには、SPAとDPAの片方だけ防ぐのではなく、同時に防ぐ必要がある。なぜなら、いずれの攻撃が成功しても、攻撃者は個人鍵dの値を得ることができるからである。SPA,DPA対策を実行するためには、SPA対策とDPA対策を組み合わせる方法が一般的である。これらの対策法を組み合わせることで、両方の攻撃を防ぐことができる。
すなわち、A&D-always法によるSPA対策法と、従来法1に示すDPA対策法もしくは従来法2に示すDPA対策法を組み合わせることで、SPAとDPAの両方を防ぐことができる。
A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによるべき乗剰余演算のアルゴリズムを図16に、A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによるべき乗剰余演算のアルゴリズムを図17に示す。
図16は非常にシンプルである。まず、20ビット乱数rjを生成する(1601行)。次に、この乱数rjと入力値である秘密鍵dおよび位数#Eを用いて、式(4.1)に示す個人鍵のランダム化を行う(1602行)。そして、その結果であるdj’=d+#Erjを指数、基数aと法nを入力値として、図12のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する(1603行)。すなわち、入力値である個人鍵dの代わりにランダム化された個人鍵dj’を使ってA&D-always法が実行される。そして、この結果vが出力される(1604行)。このべき乗剰余演算は、A&D-always法を用いたSPA対策を行っている。
図17は、1701行で20ビット乱数rjを生成し、その後1702行と1703行にて式(4.4)と(4.5)に示されるランダム化を行った個人鍵dj’とej’を生成する。その後、1704行において、rjを指数、基数aと法nを入力値として、図12のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、a’=arj (mod n)を計算する。次に、1705行において、dj’を指数、基数aと法nを入力値として、A&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、t= (a’)dj’ (mod n)を計算する。さらに、1706行において、ej’を指数、基数aと法nを入力値として、A&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、u=aej’ (mod n)を計算する。最後に、1707行にて乗算処理v:=t×u (mod n)を計算する。これら1704,1705,1706,1707行の計算により、式(4.6)が計算され、最終結果v=ad (mod n)を得る。1704,1705,1706,1707行に示すべき乗剰余演算は、A&D-always法を用いたSPA対策を行っている。
図16,図17に示すアルゴリズムは、点のスカラー倍算にも容易に拡張できる。A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによる点のスカラー倍算のアルゴリズムを図18に、A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによる点のスカラー倍算のアルゴリズムを図19に示す。
図18において、1801,1802行は、それぞれ図16の1601,1602行と同じ処理を実行する。1803行は、図16の1603行のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysの代わりに、楕円曲線上の点Aを入力として、A&D-always法による点のスカラー倍算の関数PointMul_ADalwaysを実行する。これにより、最終結果V=dAを得て出力される(1804行)。
図19において、1901,1902,1903行は、それぞれ図17の1701,1702,1703行と同じ処理を実行する。1904,1905,1906行は、図17の1704,1705,1706行のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysの代わりに、楕円曲線上の点Aを入力とし、A&D-always法による点のスカラー倍算の関数PointMul_ADalwaysを実行する。これにより、A’,T,Uをそれぞれ得る。そして、1907行は、図17の1707行の乗算処理の代わりに点の加算V:=T+Uを計算する。これら1904,1905,1906,1907行の計算により、式(4.7)が計算され、最終結果V=dAを得て出力される(1908行)。
<特殊PAによる攻撃法>
上述の第3の比較例に示されるように、A&D-always法によるSPA対策と、従来法1もしくは従来法2に示すDPA対策を組み合わせることで、SPAとDPAの両方に安全となり、電力解析を完全に防ぐことができると考えられていた。
しかし、発明者独自の分析により、これらの対策法を用いたとしても、電力波形を利用することで個人鍵dの値を解読できる攻撃法が発見された。この攻撃を、本発明の明細書では「特殊PA」と呼ぶことにする。
SPA,DPA対策を行っていたとしても、特殊PAに対する対策を行わなければ個人鍵dの情報が攻撃者に漏洩するので、この攻撃に対する対策は重要な課題と考えられる。
以下では、本発明が課題とする特殊PAによる攻撃法について説明を行う。
べき乗剰余演算において実行される乗算(t´u (mod n))や点のスカラー倍算処理において実行される点の加算(T+U)の演算処理を行っているときの電力波形は、データ値に依存する。データ値と消費電力の差異を表す簡単な事例を図20に示す。例えば、1×2 (mod n)の消費電力波形と、3×4(modn)の消費電力波形の差分を作成すると、乗算におけるデータ値の相違から、これら2つの消費電力は異なるため、差分波形にスパイクが現れる(図20(a))。これに対し、1×2 (mod n)の消費電力波形同士の差分を取ると、消費電力が同一のため平坦な波形となる(図20(b))。同様の性質は、点の加算についても成立する(図21)。すなわち、例えば、すなわち、A+2Aの消費電力波形と、3A+4Aの消費電力波形の差分を作成すると、乗算におけるデータ値の相違から、これら2つの消費電力は異なるため、差分波形にスパイクが現れる(図21(a))。これに対し、A+2Aの消費電力波形同士の差分を取ると、消費電力が同一のため平坦な波形となる(図21(b))。図20,図21に示される性質は一般的に知られている性質であるが、特殊PAはこの性質を攻撃に応用する。
<個人鍵dがランダム化されていない場合の特殊PA>
べき乗剰余演算および点のスカラー倍算に対する特殊PA攻撃を説明する。ここでは、A&D-always法によるSPA対策を行う、個人鍵dのランダム化は行われないデバイスを攻撃対象と仮定する。個人鍵dのランダム化を伴うデバイスへの攻撃は、この次に説明する。
特殊PAにおいては、攻撃者は、図22に示されるように、べき乗剰余の基数としてa=Pを入力した場合(図22(a))と、a=Qを入力した場合(図22(b))のそれぞれの消費電力波形を測定し、波形の差分(図22(c))を作成する。このとき、2乗算(S)の差分波形において、ピークが発生している部分と平坦な部分を識別し、このピーク/平坦な部分のパターン情報を元に、個人鍵dを解読する(ただし、最初のSは常に平坦となるため、攻撃者は無視する)。
ここで、a=P, a=Qは、攻撃者が意図的に選択する値であり、P,Qを選択メッセージペアと呼ぶ。この値の設定方法には複数のバリエーションが考えられる。本発明の発明者が発見した攻撃法においては、べき乗剰余演算を用いるRSAやDHにおいては、P≠Q, かつPα=Qα (mod n)を満たすP,Qを選択する。ただし、αは3以上の素数である。また、点のスカラー倍算を用いるECCの場合は、αP=αQ,P≠Qを満たすP,Qを選択する。
最初に、特殊PAの基本形である、α=3の場合の攻撃法について説明する。この攻撃法では、べき乗剰余演算の場合、P1Q, かつPα=Qα (mod n)を満たす選択メッセージペアを入力し、差分波形を作成する。その結果、図22に対応する図23に例示されるように、べき乗剰余演算の指数部が3の倍数となる時に差分波形は平坦となり、3の倍数でない時に差分波形はピークを示す。
すなわち、差分波形を観察することで、左からi番目のSの差分がスパイクであるか平坦であるかを観察することで、dの最上位からi-1ビット値d[u-1]||…||d[u - i+1 ]が3の倍数であるか、そうでないかを攻撃者は判別できる。図23の例では、左から2番目のSの差分波形はスパイクであるが、3番目のSの差分波形は平坦である。事実、図23の例においては、d[2]||d[1]||d[0]=(111)2に対して、d[2]=1であり3の倍数ではないが、d[2]||d[1]=(11)2=3であり3の倍数である。
A&D-always法の計算処理は、ad[u-1]||…||d[u-i+1](mod n)の値から、指数を1ビット増やしたad[u-1]||…||d[u-i +1]||d[u- i] (mod n)を計算することを、dの全ビット分について繰り返す処理である。このことを考慮すると、d[u-1]||…||d[u-i+1]の値が3の倍数であることの正否と、d[u-1]||…||d[u-i + 1]||d[u - i ]が3の倍数であることの正否の関係は、1ビット増えたビット値d[u-i]の値に応じて決定し、その関係は図24の表2に示される通りとなる。
表2において、3の倍数でない部分は破線囲っている。例えば、表2において、d[u-1]||…||d[u-i+1]が3の倍数=3kであるとき、d[u-i]=0ならばd[u-1]||…||d[u-i+1]||d[u-i]=d[u-1]||…||d[u-i+1]||0=3k×2=6kであり3の倍数となり、d[u-i]=1ならばd[u-1]||…||d[u-i+1]||d[u-i]=d[u-1]||…||d[u-i+1]||1=3k×2+1=6k+1であり3の倍数ではなくなる。表2のほかのマスについても、同様の分析を行うことができ、その結果が表2として与えられている。ここで、攻撃者は、特殊PAを用いて、白色と灰色がどのような順番で並ぶかを観察することができることを考慮すると、攻撃者は次のような解読が行える。すなわち、白色(3の倍数)が観察されたとき続いて白色(3の倍数)が観察されるならば、d[u-i]=0であることを攻撃者は解読できる。また、白色(3の倍数)が観察されたとき続いて灰色(3の倍数でない)が観察されるならば、d[u-i]=1であることを攻撃者は解読できる。すなわち、攻撃者は白色と灰色のパターンから、dのビット値を解読することに成功する。また、表2において、d[u-1]||…||d[u-i+1]が3の倍数でない=3k+1のパターンに着目すると、これに続いて3の倍数となるパターンはd[u-i]=1に限定されることがわかる。すなわち、灰色に続いて白色が観察されるのは、d[u-i]=1に限定されることが分かる。
このような観察によるdのビット値の解読は、その他の白色と灰色の他の組み合わせについても成功する。それを説明するために、表2に記した関係を状態遷移として記した図を、図25に示す。
図25は、現在の状態は、d[u-1]||…||d[u-i+1] (mod 3) (=0,1, or 2)の値を表しており、d[u-i]のビット値を遷移条件として、新しい状態d[u-1]||…||d[u-i+1]||d[u-i] (mod 3) (=0,1 or 2)に遷移する状態遷移図である。白色の状態は3の倍数であることを、灰色の状態は3の倍数ではないことを表す。この状態遷移図では、3つの各状態に対し、遷移条件であるd[u-i]の値が2通りあるので、取りうるd[u-i]の値は2´3=6通りである。
これらのd[u-i]の値に応じた6通りの状態遷移条件のうち、以下の3パターンについては、既に説明したとおりd[u-i]の値が解読できるパターンである。
・状態0(白色)a状態0(白色)の遷移、d[u-i]=0 (5.1)
・状態0(白色)a状態1(灰色)の遷移、d[u-i]=1 (5.2)
・状態1(灰色)a状態0(白色)の遷移、d[u-i]=1 (5.3)
すなわち、d[u-i]の値が取りうる6通りのパターンのうち、3パターンが解読できるため、dの全体のビット値の半分が解読できることになる。上記には灰色から灰色の遷移は含まれないが、図25の遷移図の性質を利用することで、灰色から灰色の遷移についても、一部のd[u-i]のビット値を解読できる。この解読について説明するために、図25の状態遷移図において、2回分の遷移の全パターンを網羅した結果を図26に示す。
状態0,1,2から始まるパターンがそれぞれ4通り(2ビット分の遷移=22通り)であるので、合計3´4=12パターンとなる。これらの12パターンそれぞれについて、攻撃者が観察可能な情報も合わせて図26に示す。攻撃者が観察可能な情報は記号により記されており、白色は”W”により、灰色は”G”により表現される。図26に示された、WもしくはGが3連続するパターンにおいて、”GGG”以外の7パターンは全て一意に識別できるパターンであるので、鍵ビットを一意に解読できる。すなわち、全12パターン中7パターンが鍵ビットを解読できるパターンであるので、少なくとも全体のビット値の7/12を解読可能である。すくなくとも、と表現したのは、図26を用いた解読手法は1回の解読により2ビット連続での解読が可能であるという性質を利用すると、さらに解読できるビット長を伸ばすことができるからである。この考え方を図27に示す。
図27に示す攻撃法では、攻撃者は最初に”G”と”W”の全パターンを識別する。この後、GもしくはWから構成されるパターンを、3パターン単位で読み込み、図26のパターンと照合することで、2ビット単位の部分鍵を解読するプロセスを繰り返す。このとき、3パターン単位の読み込みは、最も右端の3パターンから開始し、次に読み込むときは最右端の”G”W”の1個分を除いた3パターンを読み込む、その次は最右端の”G”W”の2個分を除いた3パターンを読み込む、といったように、右から左にスライドする読み込みを繰り返す。3パターンが”GGG”以外については、2ビット部分鍵を解読することが可能である。すなわち、確率7/12で2ビット部分鍵を解読でき、確率5/12で2ビット部分鍵を解読できないことになる。図27に示した例では、3パターン単位で読み込まれるデータの系列は、1回目”GGW”すなわち部分鍵=01, 2回目”GGG”すなわち部分鍵=??, 3回目”WGG”すなわち部分鍵=10, 4回目”GWG”すなわち部分鍵=11である。2回目が”GGG”のため、部分鍵の解読に失敗している。しかし、図27に示されるように、1回目と3回目では部分鍵の解読に成功しているため、全体のビット解読としては2回目の部分鍵の解読に成功する。つまり、p回目に解読できないパターンに確率5/12で遭遇したとしても、図28に示されるように、もしp-1回目で部分鍵のビット解読に成功すればp回目の2-bit部分鍵の下位ビットを解読することができ、p+1回目で部分鍵のビット解読に成功p回目の2-bit部分鍵の上位ビットを解読することができる。
すなわち、p回目の2ビット部分鍵解読が失敗したときでも、p-1回目もしくはp+1回目の2ビット部分鍵解読が成功すれば、p回目の下位ビット、上位ビットの片方もしくは両方を解読することができる。ここで、以下の用語定義を行う。
・p回目の2ビット部分鍵解読が失敗したときに、p-1回目の部分鍵解読が成功することで、p回目の下位ビットが成功することを、本書では下位ビットフォロー解読と呼ぶことにする。
・p回目の2ビット部分鍵解読が失敗したときに、p+1回目の部分鍵解読が成功することで、p回目の上位ビットが成功することを、本書では上位ビットフォロー解読と呼ぶことにする。
・下位ビットフォロー解読と上位ビットフォロー解読を総合して、フォロービット解読と呼ぶ。
下位ビットフォロー解読が成功する確率と、上位ビットフォロー解読が成功する確率を求めることで、確率5/12で鍵解読が失敗した場合の部分鍵の2ビット値が判明する確率を求めることができる。下位ビットフォロー解読の成功確率は、p回目でパターン”GGG”が観測されるとき、p-1回目で観測されるパターンが解読可能なパターンである確率である。上位ビットフォロー解読の成功確率は、p回目でパターン”GGG”が観測されるとき、p+1回目で観測されるパターンが解読可能なパターンである確率である。これらの確率は、図29,図30に示されるパターン網羅により容易に求めることができ、下位ビットフォロー解読、上位ビットフォロー解読確率の成功確率のいずれもが1/5となる。よって、3パターン単位から一意に解読できる7/12に加え、フォロー解読により5/12×1/5= 1/12のビット値を追加で解読することができるので、全体として7/12+1/12=8/12=2/3のビット値を解読することができる。
以上に述べたように、べき乗剰余演算を搭載したデバイスに対しては、P3 =Q3 (mod n)かつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、攻撃者はdの全体の2/3のビット値を解読することができる。点のスカラー倍算機能を搭載したデバイスに対しても、3P=3QかつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、同様の攻撃を行うことで攻撃者はdの全体の2/3のビット値を解読することができる。
さらにこの攻撃は、3以上の素数αに対してPα =Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアを用いた特殊PAに拡張することができる。この拡張の基本的な考え方は、α=3について与えられている図24の表2を、αが5以上である任意の素数に拡張することが基点となる。その結果を、図31の表3として与える。
表3において、表2と同様に、d[u-1]||…||d[u-i+1]もしくはd[u-1]||…||d[u-i+1]||d[u-i]の値が、αの倍数でないときは破線で囲んでいる。d[u-i]の値に応じたこれらの遷移のうち、
・αの倍数(白色)→αの倍数の遷移、d[u-i]=0 (5.4)
・αの倍数 (白色)→αの倍数ではない(破線枠内)の遷移、d[u-i]=1 (5.5)
・αの倍数ではない(灰色)→αの倍数の遷移、d[u-i]=1 (5.6)
の3種類が、攻撃者にとって観察できる情報であり、かつd[u-i]の値を一意に決定できる遷移である。なぜなら、(5.4)(5.5)(5.6)以外の遷移は、全て破線枠内から破線枠内への遷移であるからである。全体の遷移パターン2αのうち、3パターンが鍵を一意に識別できる遷移であるので、全体の鍵ビットのうち3/(2α)が攻撃者によって解読できることになる。
以上、Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を用いた特殊PAによる解読方法をまとめると、図32の表4に示すとおりになる。すなわち、αの値が3であるときには、漏洩する個人ビットの割合は2/3であり、5以上の素数であるときには、漏洩する個人ビットの割合は3/(2α)であることがわかる。
<個人鍵dがランダム化されている場合の特殊PA>
以上が、A&D-always法によるSPA対策に対する特殊PAである。今までは、攻撃対象が個人鍵dがランダム化されていない場合を想定していた。以下では、個人鍵dをランダム化した場合の特殊PAについて説明する。ランダム化されていない場合と比較して、攻撃者のコストは増えるが、コスト増は現実的な時間内に抑えることができ、かつdをランダム化していない場合と同じ効果を得ることができる。
最初に、A&D-always法によるSPA対策と、従来法1によるDPA対策の組み合わせに対する攻撃法を説明する。従来法1によるDPA対策を用いることで、個人鍵dの代わりに、式(4.1)で示されるdj’=d+rj#Eが用いられる。個人鍵がランダム化された場合の特殊PAの差分波形作成法を図33に示す。図22と同様に、Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアP,Qを与えたときの電力を測定し、差分波形を作成する電力差分を作成する。図22との違いは、ランダム化された個人鍵が、Pを入力した場合とQを入力した場合で同一となるように、攻撃者は工夫を行う必要があることである。
P,Q間でランダム化された指数を一致させる最も簡単な方法は、図34に示されるように、Pを与えた場合のランダムな個人鍵と、Qを与えた場合のランダム化された個人鍵が一致するまで、Qを与えた場合の電力測定を複数回繰り返すことである。
個人鍵は20ビット乱数によってランダム化されていることを考慮すると、Qを与えた場合の電力測定を220回繰り返すことで、ランダム化された個人鍵が一致することが期待される。220回はおよそ100万回であるので、1秒に1回電力測定を行う場合、電力測定に100万秒=100万/8.64万=11.6の日数を必要とする。この電力測定時間は決して短くないが、十分現実的な時間内に攻撃を成功させるのに必要な電力測定を完了することができる。電力測定は、スマートカード等の低速なデバイスによる演算処理と通信時間のため、測定時間は電力測定回数に比例した秒単位の時間を必要とするが、いったん電力測定を完了し、電力測定データのPCへの転送が完了したならば、高性能PCによる高速な解析が可能となる。すなわち、上記で算出した、電力測定が完了する時間(11.6日)が、そのまま攻撃者にとっての時間的コストとなる。
上記の220回の差分をとるプロセスにおいては、P,Q間でランダム化された指数が一致する場合と一致しない場合があるが、一致の有無は電力波形の差分により容易に識別することができる。なぜなら、図35(a)に示されるように、ランダム化された個人鍵が一致する場合は、1024回(べき乗剰余演算の場合)もしくは160回(点のスカラー倍算の場合)の差分波形において、全てについて平坦な波形が現れる可能性がある。これに対し、図35(b)に示されるように、一致しない場合は、個人鍵のビット値が一致するのは高々先頭20ビットに限定されるため、先頭の20回以降は必ず差分波形にピークが現れるからである。これら2種類の現象を識別することは容易であるため、攻撃者はランダム化された個人鍵が一致する場合についての差分波形を得ることができる。
もし攻撃者が、P,Q共に同一のランダム化された個人鍵dj’である場合の差分波形を得ることに成功した場合、個人鍵がランダム化されていないときと同様の手法を用いることで、dj’のビット値全体の2/3(α=3)のビット値、もしくは全体の3/(2α)のビット値を求めることができる。個人鍵dj’を用いたべき乗剰余処理、もしくは点のスカラー倍算の結果は、個人鍵dを用いた場合の演算結果と一致することを考慮すると、実質的にはdj’は個人鍵dと同等の鍵である。すなわち、特殊PAを用いることで、DPAを用いた場合でも、個人鍵のビット値全体の2/3(α=3)のビット値、もしくは全体の3/(2α)のビット値を求めることができる。
今までのべた方法は、攻撃を成功させるために100万回の電力測定を必要としていたが、電力測定方法を工夫することで、電力測定回数を2000回に抑えることも可能である。それは、図36に示されるように、Pを与えた場合とQを与えた場合の電力測定回数を複数繰り返し、P,Q間で多対多の電力差分を作成することである。P,Qそれぞれ1000回(合計2000回)の電力測定を行うことで、可能な電力差分のペアの組み合わせは1000´1000=100万となるため、20ビット乱数が一致するペアが含まれることが期待される。この場合、電力測定回数は2000回であり、1日以内に攻撃が完了すると見込まれる。
以上が、A&D-always法によるSPA対策と従来法1によるDPA対策の組み合わせに対する特殊PAを用いた攻撃法であり、その効果は図32の表4に示されるとおりである。
次に、A&D-always法によるSPA対策と従来法2によるDPA対策の組み合わせに対する特殊PAを用いた攻撃法を説明する。基本的には、A&D-always法+従来法1と同じであり、ランダム化された指数が一致する場合に差分曲線を作成し、平坦、ピークのパターンから鍵ビットの解析を行う。図17の1704,1705,1706および図19の1904,1905,1906から分かるように、従来法2におけるランダム化された指数は、rj,dj’,ej’の3種であり、これらは個人鍵dに対して式(4.4),(4.5),(4.8)に示される関係を満たす。A&D-always法+従来法1で述べた攻撃法と同様の手法を用いることで、図17の1704,1705,1706および図19の1904,1905,1906に記されるべき乗剰余演算、もしくは点のスカラー倍算で用いられるrj,dj’,ej’の3種の値の全体のビット値の2/3(α=3)のビット値、もしくは3/(2α)のビット値 (αは5以上の素数)を求めることができる。式(4.8)から、
d= dj’×rj+ej
であるので、rj,dj’,e’のビット情報から、dの全体のビット値の2/3(α=3)のビット値、もしくは3/(2α)のビット値(αは5以上の素数)を求めることができる。
以上説明したように、特殊PAを用いることで、A&D-always法によるSPA対策、A&D-always法によるSPA対策と従来法1によるDPA対策の組み合わせ、A&D-always法によるSPA対策と従来法2によるDPA対策の組み合わせの全てについて、図32の表4で示される割合の鍵ビット値を求めることができる。
以上のようにして、特殊PA攻撃によって、従来のSPA対策およびDPA対策だけでは耐タンパ性が十分ではないことが明らかとなった。
そこで、以下に説明する第1〜第6の実施形態では、SPAおよびDPAに加えて、特殊PAに対する耐タンパ性をも備えた暗号処理装置および方法を提供するものである。
図37は、第1〜第6の実施形態の暗号処理装置の第1のハードウェア構成例を示す図である。
図37の暗号処理装置3700は、Central Processing Unit(CPU)3701、Read Only Memory(ROM)3702、Random Access Memory(RAM)3703、通信回路3704、および通信インタフェース(I/F)3705を有する。通信回路3704は、通信I/F3705を介して他の装置との間で通信を行う。
そして、CPU3701、ROM3702、RAM3703、および通信回路3704は、バス3706により互いに接続されている。また、暗号処理装置3700は、電源端子3707とグランド端子3708を有し、暗号処理装置3700内の各部へは、不図示の配線と電源端子3707を介して電源電圧が供給される。暗号処理装置3700内の各部は、不図示の配線を介してグランド端子3708とも接続されている。
CPU3701は、ROM3702に予め記憶されたプログラムをRAM3703にロードし、RAM3703をワーキングエリアとして用いながらプログラムを実行することで、各種の処理を行う。例えば、CPU3701は、図42〜図51の各フローチャートで示される制御処理を実行する。
なお、ROM3702の代わりにフラッシュメモリなどの他の種類の不揮発性記憶装置が使われてもよい。フラッシュメモリなどの書き換え可能な記憶装置がROM3702の代わりに使われる場合は、プログラムは、通信I/F3705を介して暗号処理装置3700にダウンロードされ、暗号処理装置3700にインストールされてもよい。
また、暗号処理装置3700は、通信I/F3705を介して他の装置と通信することができる。例えば、暗号処理装置3700は、暗号処理装置3700自身の公開鍵などの情報を、通信I/F3705を介して他の装置に送信してもよいし、他の装置の公開鍵などの情報を、通信I/F3705を介して受信してもよい。
通信I/F3705の種類は、暗号処理装置3700の種類に応じた任意の種類でよい。例えば、暗号処理装置3700は、スマートカードでもよいし、プリンタカートリッジなどのアクセサリ部品に組み込まれるLSIチップでもよいし、家電製品に組みこまれるLSIチップでもよい。例えば、暗号処理装置3700が接触式スマートカードの場合は、通信I/F3705は通信用端子を含んでもよいし、暗号処理装置3700が非接触式スマートカードの場合は、通信I/F3705はアンテナを含んでもよい。
通信回路3704は、通信I/F3705の種類と通信プロトコルに応じて、適宜の処理を行う。例えば、通信回路3704は、ディジタル・アナログ変換、アナログ・ディジタル変換、変調、復調、符号化、復号などの処理を行ってもよい。
なお、PA攻撃を行う攻撃者は、通信I/F3705を介してべき乗剰余演算における基数データや点のスカラー倍算における楕円曲線上の点のデータを暗号処理装置3700に入力する。そして、入力されたデータに関して暗号処理装置3700が処理を行っているときの消費電力を測定することで、暗号処理装置3700の個人鍵を推測する。例えば、攻撃者は、電源端子3707に抵抗器を接続することで、消費電力の測定を行う。
図38は、第1〜第3の実施形態の暗号処理装置の第2のハードウェア構成例を示す図である。図38の暗号処理装置3710は、CPU3701とROM3702の代わりにECCハードウェア回路3711を有する。
また、暗号処理装置3710は、図37の暗号処理装置3700と同様のRAM3703と通信回路3704と通信I/F3705を有する。そして、暗号処理装置3710において、ECCハードウェア回路3711とRAM3703と通信回路3704は互いにバス3706で接続されている。また、暗号処理装置3710にも図37の暗号処理装置3700と同様の電源端子3707とグランド端子3708がある。
暗号処理装置3710においては、ROM3702からプログラムを読み出して実行するCPU3701の代わりに、ECCハードウェア回路3711が図42〜図51の各フローチャートで示される制御処理を行う。ECCハードウェア回路3711は、例えば、Application Specific Integrated Circuit(ASIC)でもよいし、ECCハードウェア回路3711の少なくとも一部がField Programmable Gate Array(FPGA)により実現されていてもよい。また、ECCハードウェア回路3711も、不図示の配線により電源端子3707およびグランド端子3708と接続されている。
なお、実施形態によっては、暗号処理装置が、汎用プロセッサとしての図37のCPU3701と、CPU3701が実行するプログラムを格納する図37のROM3702と、コプロセッサとしての図38のECCハードウェア回路3711を有していてもよい。そして、図42〜図51の各フローチャートで示される制御処理の一部をCPU3701が行い、残りの一部をECCハードウェア回路3711が行ってもよい。その場合も、暗号処理装置は、図37および図38と同様に、RAM3703と通信回路3704と通信I/F3705を有する。
図39は、第1,第2,第3の実施形態の暗号処理装置に共通の機能構成図である。図39に示される暗号処理装置3900は、図37または図38に例示したハードウェアにより実現することができる。
特殊PAへの対策を施した図39に示される第1,第2,第3の実施形態の機能構成では、べき乗剰余演算における基数を、定数乗した結果を、新しい基数として演算を行う。
図39において、定数乗器3901は、基数aと法nを入力し、また、対策用定数記憶部3902から対策用定数C(α)を読み込む。そして、定数乗器3901は、べき乗剰余演算ad (mod n)を計算するために、最初に基数aをC(α)乗またはr’(=C(α)×乱数r)乗し新たな基数b= aC(a) (mod n)またはb= ar’(mod n)を計算する。ただし、対策用定数記憶部3902に記憶される対策用定数C(α)は、想定される特殊PAの攻撃強度に応じて設定する定数であり、具体的には、選択メッセージペアPa=Qa (mod n)を生成するための素数αの全ての値の積で与えられる。例えば、α=3の攻撃を想定して防ぐ場合は、C(α)=3である。例えばα=3とα=5の攻撃を想定して防ぐ場合はC(α)=3×5=15である。例えばα=3とα=7の攻撃を想定して防ぐ場合はC(α)=3×7=21である。例えばα=3、α=5およびα=7の攻撃を想定して防ぐ場合はC(α)=3×5×7=105である。
想定する攻撃の種類を多く想定しC(α)を設定することで、セキュリティを高めることができるが、計算処理時間のオーバーヘッドはC(α)のビット長に比例するため、C(α)の設定はセキュリティと処理時間のトレードオフとなる。しかし、図32の表4に示されるように、αを大きくするほど漏洩する鍵ビットの割合は減っていくので、C(α)は7以下の全ての素数の積に設定するのが妥当である。
図39において、個人鍵変換器3904は、個人鍵記憶部3903に記憶された個人鍵dを個人鍵d’に変換する。個人鍵d’は、個人鍵dを対策用定数C(α)またはr’(=C(α)×乱数r)で割った商として演算する。
補正鍵生成器3907は、個人鍵記憶部3903に記憶された個人鍵dから補正鍵d”を生成する。補正鍵d”は、個人鍵dを対策用定数C(α)またはr’(=C(α)×乱数r)で割った余りとして演算する。
べき乗剰余演算器3905は、定数乗器3901が生成した新たな基数bと法nを使って、個人鍵変換器3904が出力する個人鍵d’に対して、べき乗剰余演算t=bd’ (mod n)を計算する。この計算は例えば、図12に示したA&D-always法によって実行される。
べき乗剰余演算器3906は、入力される基数aと法nを使って、補正鍵生成器3907が出力する補正鍵d”に対して、べき乗剰余演算u=ad” (mod n)を計算し、補正値uを出力する。
補正演算器3908は、べき乗剰余演算器3905および3906が出力した各演算結果tおよびuを入力して、乗算t×u (mod n)の補正演算を実行し、最終的なべき乗剰余演算結果ad(mod n)に等価な結果を出力する。
ここで、個人鍵変換器3904および補正鍵生成器3907は、式(6.1)を満足する個人鍵d’および補正鍵d”を計算して出力する。
d=c(α)×d’+d” (6.1)
この関係式を使うと、暗号処理のべき乗剰余演算値ad (mod n)は、式(6.2)として表すことができる。
v=ad (mod n)
=a(c(α)d’+d”) (mod n)
=(ac(α))d’×ad” (mod n)
=bd’×ad” (mod n)
=t×u (mod n) (6.2)
式(6.2)より、式(6.1)を満たすように対策用定数C(α)を決定することにより、図39の構成により、確かに暗号処理のべき乗剰余演算値ad (mod n)を出力できることがわかる。
また、対策用定数C(α)に乱数rを導入することにより、個人鍵変換器3904および補正鍵生成器3907は、式(6.3)を満足する個人鍵d’および補正鍵d”を計算して出力するように構成することもできる。
d=(c(α)×r)×d’+d”
=r’d’+d” (6.3)
この関係式を使うと、暗号処理のべき乗剰余演算値ad (mod n)は、式(6.4)として表すことができる。
v=ad (mod n)
=a(r’d’+d”) (mod n)
=(ar’)d’×ad” (mod n)
=bd’×ad” (mod n)
=t×u (mod n) (6.4)
式(6.4)より、式(6.3)を満たすように対策用定数C(α)を決定し、かつ図39の定数乗器3901、個人鍵変換器3904、および補正鍵生成器3907において、対策用定数C(α)の代わりに値r’を使用する。これにより、確かに暗号処理のべき乗剰余演算値ad (mod n)を出力できることがわかる。
図39の構成に基づく第1,第2、第3の実施形態による対策法では、次の処理が実行される。すなわち、暗号処理のためのべき乗剰余演算において、入力された値aを基数として用いるのではなく、上記手順に従い設定された対策用定数C(α) またはr’(=C(α)×乱数r)により定数乗された値b= aC(α) (mod n)またはb= ar’ (mod n)を新しい基数として用いる。選択メッセージP, Qを入力したときの新しい基数bは、それぞれ
PC(α) (mod n) (6.5)
QC(α) (mod n) (6.6)
となるが、想定されたαに対して、式(6.5)と(6.6)は常に同一となる。なぜならば、Pα= Qα(mod n)の等式が成立し、かつC(α)は、想定されたαの値全てに対する公約数であるので、式(6.5)と(6.6)はPα= Qα(mod n)の両辺を整数乗した結果であり、これらは等しくなる。
基数が同一であるべき乗剰余演算同士の電力差分を作成しても、攻撃者は有意な情報を得ることはできない。なぜなら、図41に示されるように、基数がP,Q間で同一となるため(図40(a)および(b))、これらの差分を作成しても常に平坦な波形となり(図40(c))、攻撃者は鍵のビットを解読するための有意な情報を得ることができないからである。
なお、べき乗剰余演算器3906によるべき乗剰余演算では、入力された基数aをそのまま用いるため、特殊PAに対して脆弱である。ただし、補正鍵d”のビット長を、個人鍵dのビット長と比較して非常に短くしているため、特殊PAによる攻撃の影響を最小限にとどめることができる。dに対するd”のビット長は実施例によって異なる。詳細は、第1,第2,第3の各実施例にて述べる。
図41は、第4,第5,第6の実施形態の暗号処理装置に共通の機能構成図である。図41に示される暗号処理装置4100は、図37または図38に例示したハードウェアにより実現することができる。
本発明による特殊PAへの対策を施した図41に示される第4,第5,第6の実施形態の機能構成では、点のスカラー倍算における楕円曲線上の点を、定数倍算した結果を、新しい楕円曲線上の点として演算を行う。
図41の構成は、基本的には、図39におけるべき乗剰余ad (mod n)を点のスカラー倍算dAに、乗算t×u (mod n)を点の加算T+Uに置き換えることで実現できる。これは、図1に示される関係から明らかである。
図41において、定数倍器4101は、楕円曲線上の点Aを入力し、また、対策用定数記憶部4102から対策用定数C(α)を読み込む。そして、定数倍器4101は、点のスカラー倍算dAを計算するために、最初に最初に点AをC(α)倍またはr’(=C(α)×乱数r)倍し新たな楕円曲線上の点B= C(α)AまたはB= r’Aを計算する。ただし、対策用定数記憶部4102に記憶される対策用定数C(α)は、図39の場合と同様の基準で選定される。
図41において、個人鍵変換器4104は、個人鍵記憶部4103に記憶された個人鍵dを個人鍵d’に変換する。個人鍵d’は、個人鍵dを対策用定数C(α)またはr’(=C(α)×乱数r)で割った商として演算する。
補正鍵生成器4107は、個人鍵記憶部4103に記憶された個人鍵dから補正鍵d”を生成する。補正鍵d”は、個人鍵dを対策用定数C(α)またはr’(=C(α)×乱数r)で割った余りとして演算する。
点のスカラー倍算器4105は、定数倍器4101が生成した新たな点Bを使って、個人鍵変換器4104が出力する個人鍵d’に対して、点のスカラー倍算T= d’Bを計算する。この計算は例えば、図15に示したA&D-always法によって実行される。
点のスカラー倍算器4106は、入力される点Aを使って、補正鍵生成器4107が出力する補正鍵d”に対して、点のスカラー倍算U=d”Aを計算し、補正値uを出力する。
補正演算器4108は、点のスカラー倍算器4105および4106が出力した各演算結果tおよびuを入力して、加算T+Uの補正演算を実行し、最終的な点のスカラー倍算結果dAに等価な結果を出力する。
ここで、個人鍵変換器4104および補正鍵生成器4107は、図39の場合の式(6.1)を満足する個人鍵d’および補正鍵d”を計算して出力する。この関係式を使うと、暗号処理の点のスカラー倍算値dAは、式(6.7)として表すことができる。
v=dA=(c(α)×d’+d”)A
=d’c(α)A+d”A
=d’B+d”A
=T+U (6.7)
式(6.7)より、式(6.1)を満たすように対策用定数C(α)を決定することにより、図41の構成により、確かに暗号処理の点のスカラー倍算値dAを出力できることがわかる。
また、対策用定数C(α)に乱数rを導入することにより、個人鍵変換器4104および補正鍵生成器4107は、図39の場合の式(6.3)を満足する個人鍵d’および補正鍵d”を計算して出力するように構成することもできる。この関係式を使うと、暗号処理の点のスカラー倍算値dAは、式(6.8)として表すことができる。
v= dA=((c(α)×r)×d’+d”)A
=d’(c(α)×r)A+d”A
=d’B+d”A
=T+U (6.8)
式(6.8)より、式(6.3)を満たすように対策用定数C(α)を決定し、かつ図41の定数倍器4101、個人鍵変換器4104、および補正鍵生成器4107において、対策用定数C(α)の代わりに値r’を使用する。これにより、確かに暗号処理の点のスカラー倍算値dAを出力できることがわかる。
図41の構成に基づく第4,第5、第6の実施形態による対策法では、次の処理が実行される。すなわち、暗号処理のための点のスカラー倍算において、入力された値Aを楕円曲線上の点として用いるのではなく、上記手順に従い設定された対策用定数C(α)またはr’(=C(α)×乱数r)により定数倍算された値B= C(α)AまたはB= r’Aを新しい楕円曲線上の点として用いる。選択メッセージP, Qを入力したときの新しい点Bは、それぞれ
C(α)P (6.9)
C(α)Q (6.10)
となるが、想定されたαに対して、式(6.9)と(6.10)は常に同一となる。なぜならば、αP=αQの等式が成立し、かつC(α)は、想定されたαの値全てに対する公約数であるので、式(6.9)と(6.10)はαP=αQの両辺を整数倍した結果であり、これらは等しくなる。
これにより、図39の場合と同様の原理で、基数が同一であるべき乗剰余演算同士の電力差分を作成しても、攻撃者は有意な情報を得ることはできない。なぜなら、基数がP,Q間で同一となるため、これらの差分を作成しても常に平坦な波形となり、攻撃者は鍵のビットを解読するための有意な情報を得ることができないからである。
なお、図29の場合と同様に、点のスカラー倍算器4106による点のスカラー倍算では、入力された楕円曲線上の点Aをそのまま用いるため、特殊PAに対して脆弱である。ただし、補正鍵d”のビット長を、個人鍵dのビット長と比較して非常に短くしているため、特殊PAによる攻撃の影響を最小限にとどめることができる。dに対するd”のビット長は実施例によって異なる。詳細は、第4,第5,第6の各実施例にて述べる。
図39および図41で、定数乗器3901、定数倍器4101、個人鍵変換器3904,4104、べき乗剰余演算器3905,3906、点のスカラー倍算器4105,4106、補正鍵生成器3907,4107、および補正演算器3908,4108は、以下の構成として実現できる。すなわち、これらの各部は、図37のCPU3701が実行する処理であってもよいし、図38のECCハードウェア回路3711が実行する処理であってもよいし、CPU3701とECCハードウェア回路3711の組み合わせにより実行される処理であってもよい。その場合に、これらの処理を実行するプログラムは、図37または図38のROM3702またはRAM3703に記憶させて、実行することができる。また、対策用定数記憶部3902,4102および個人鍵記憶部3903,4103は、例えば図37または図38のROM3702またはRAM3703に記憶させることができる。
図39または図41において、基数a、法n、点Aは、暗号処理装置3900または4100以外の装置から暗号処理装置に与えられる点でもよい。例えば、基数aや点Aは、外部装置の公開鍵でもよい。外部装置の公開鍵は、例えば、DH鍵共有のために外部装置から暗号処理装置3900または4100へと通知されることもあるし、DSAによる認証のために外部装置から暗号処理装置3900または4100へと通知されることもある。
基数a,法nや点Aが暗号処理装置3900または4100以外の装置から暗号処理装置に与えられる点である場合、基数a,法nや点Aは、通信I/F3705と通信回路3704により取得される。
図39の補正演算器3908または図41の補正演算器4108は、演算結果を他の装置に送信してもよいし、DSAによる認証のための処理を行ってもよいし、DH鍵共有のための処理を行ってもよい。場合によっては、通信回路3704と通信I/F3705を利用して、演算結果を外部に出力してもよい。例えば、暗号処理装置3900または4100が、ホスト(例えばプリンタなど)により認証されるアクセサリ部品(例えばプリンタカートリッジなど)に含まれる場合等である。
次に、図39の暗号処理装置3900の具体的な処理を示す第1の実施形態について、以下に説明する。図42は、第1の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
事前に生成された個人鍵d(ステップ4200)に対して、dをC(α)で割ったときの商と余りを計算し、それぞれd’とd’’に与える(ステップ4202)。これは、式(6.1)および(6.2)に基づく処理であり、個人鍵変換器4104および補正鍵生成器3907の機能に対応する。
基数aをC(α)乗した結果aC(α) (mod n)をbに与える(ステップ4203)。これは、定数乗器3901の機能に対応する。
bを基数、d’を指数としたべき乗剰余演算を実行し、t = bd’ (mod n)としてtに与える(ステップ4204)。これは、べき乗剰余演算器3905の機能に対応する。
aを基数、d”を指数としたべき乗剰余演算を実行することで、補正値u=ad”(mod n)を生成する(ステップ4205)。これは、べき乗剰余演算器3906の機能に対応する。
tと補正値uから、v=t×u (mod n)を計算する(ステップ4206)。これは、補正演算器3908の機能に対応する。
最後に、vを計算結果ad (mod n)として出力する(ステップ4207)。
ステップ4205においては、基数aをそのまま用いたべき乗剰余演算が実行され、この処理は特殊PAに対して脆弱である。しかし、このべき乗剰余で用いられる指数は、d”=
d (mod C(α))であり、そのビット長はC(α)のビット長(log2C(α))と同じである。C(α) = 3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずかlog2105 = 7ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
図43は、図42のステップ4203,4204,4205において実行されるべき乗剰余演算処理の詳細(その1)を示すフローチャートである。このフローチャートの処理は、図12に示したA&D-always法を用いたべき乗剰余演算処理のアルゴリズムに基づくものである。
ステップ4300で、図12に示される入力値が入力される。
ステップ4301は、図12の1201行に対応する。
ステップ4302,4306,4307は、図12の1202のfor文のループ処理に対応している。
ステップ4303は、図12の1203行に対応し、2乗算を実行する。
ステップ4304は、図12の1204行に対応し、乗算を実行する。
ステップ4305は、図12の1205行に対応する。
ステップ4308,4309は、図12の1207行に対応する。
このフローチャートでは、指数dの値に関係なく、常に2乗算(4303)と乗算(4304)の演算パターンが一定化される。
図44は、図42のステップ4203,4204,4205において実行されるべき乗剰余演算処理の詳細(その2)を示すフローチャートである。図43のフローチャートでは、指数dを1ビットずつ増やしながらべき乗剰余演算を行なった。これに対し、図44のフローチャートでは、ステップ4401と4402の初期化処理の後、ステップ4404と4405のループ制御処理によって、w[i] = ai (mod n) (i=0,1,..,2k -1)で示されるkビットテーブルを計算する(ステップ4403)。
その後、ステップ4406と4407の初期化処理の後、ステップ4410と4411のループ制御処理によって、指数dをkビットずつ増やしながらべき乗剰余演算を実行する。図43のフローチャートと同様に、指数dの値に関係なく、常に2乗算 (ステップ4408)と乗算(ステップ4409)の演算パターンが一定化される。
次に、図39の暗号処理装置3900の具体的な処理を示す第2の実施形態について、以下に説明する。図45は、第2の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
図45において、図42の第1の実施形態と同じ処理には、同じ番号を付してある。
第2の実施形態の制御処理が第1の実施形態の制御処理と異なる点は、個人鍵dに対して、dをC(a)で割ったときの商と余りの計算処理を、事前処理において個人鍵dを生成するした時点で実行し、それぞれd’とd’’に与える点である(ステップ4500)。これは、式(6.1)および(6.2)に基づく処理であり、図39の個人鍵変換器3904と補正鍵生成器3907の機能に対応する。事前処理として実行することで、べき乗剰余演算を実行するごとに割り算処理の実行を不要とすることができる。
図45のステップ4201、およびステップ4203から4207までの各処理は、図42の第1の実施形態の場合と同じである。
ステップ4205において特殊PAに対して脆弱となるビット数は、第1の実施形態の場合と同様に、わずか7ビット程度である。
次に、図39の暗号処理装置3900の具体的な処理を示す第3の実施形態について、以下に説明する。図46は、第3の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
図46において、図42の第1の実施形態と同じ処理には、同じ番号を付してある。
第3の実施形態の制御処理が第1の実施形態の制御処理と異なる点は、対策用定数C(α)に乱数rを付加している点である。
まず、個人鍵dが事前に生成され(ステップ4200)、基数aと法nが入力される(ステップ4201)。
その後、20ビットの乱数rが生成される(ステップ4601)。
次に、式(6.3)に基づき、r’=c(α)×rが演算される(ステップ4602)。
続いて、事前に生成された個人鍵dに対して、dをr’で割ったときの商と余りを計算し、それぞれd’とd’’に与える(ステップ4603)。これは、式(6.3)および(6.4)に基づく処理であり、個人鍵変換器4104および補正鍵生成器3907の機能に対応する。
基数aをr’乗した結果ar'(mod n)をbに与える(ステップ4604)。これは、定数乗器3901の機能に対応する。
その後、図42の場合と同様に、ステップ4204,4205,4206,4207の各処理が順次実行され、式(6.4)に基づく制御処理に従って、最終的なべき乗剰余演算値v=ad (mod n)が出力される。
ステップ4205においては、基数aをそのまま用いたべき乗剰余演算が実行され、この処理は特殊PAに対して脆弱である。そのビット長は、第1または第2の実施形態に比較して乱数rのビット長だけ長くなり、(C(α)のビット長)+20(=log2C(α)+20)となる。C(α)=3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずか20+log2105=27ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
第1または第2の実施形態に比較して、特殊PAの攻撃にさらされるビット長は長くなるが、ステップ4204,4205,4206のべき乗剰余演算の指数が全てランダム化されているため、DPAに対する安全性が高いというメリットがある。
第3の実施形態におけるステップ4603の処理自体は、前述した従来法2の式(4.4)および(4.5)の処理と類似である。しかしながら、第3の実施形態では、ステップ4601で生成した乱数rに対して、ステップ4602に示す乱数rのC(α)倍処理r’=r´C(α)を行うという特徴を有するのに対して、従来法2ではそれに相当する処理を行わない。この特徴の差異が効果の差異となる。すなわち、第3の実施形態では、C(α)の整数倍であるr’に対して、基数bをaのr’乗値として与えることで、特殊PAに対しても安全な処理を実現できる。これに対し、従来法2では、生成された乱数rをそのまま用いて、基数bをaのr 乗値として与える。このrは乱数であり、C(α)の倍数とは限らないため、非常に高い確率(Φ(C(α))/C(α))で特殊PAが成功する。ただし、Φ(x)はオイラー関数と呼ばれ、xを素因数分解して得られる構成する全ての素数から1を引いた値の積によって計算される。例えば、Φ(3)=3-1=2, Φ(3×5)=(3-1)×(5-1)=2×4=8, Φ(3×5×7)=(3-1)×(5-1)×(7-1)=2×4×6=48である。
第3の実施形態は、特殊PAに対して、強い耐タンパ性を有するという特徴がある。
次に、図41の暗号処理装置4100の具体的な処理を示す第4の実施形態について、以下に説明する。図47は、第4の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
事前に生成された個人鍵d(ステップ4700)に対して、dをC(α)で割ったときの商と余りを計算し、それぞれd’とd’’に与える(ステップ4702)。これは、式(6.1)および(6.7)に基づく処理であり、個人鍵変換器4104および補正鍵生成器4107の機能に対応する。
点AをC(α)倍した結果C(α)AをBに与える(ステップ4703)。これは、定数倍器4101の機能に対応する。
Bに対してd’倍する点のスカラー倍算を実行し、T= d’BとしてTに与える(ステップ4704)。これは、点のスカラー倍算器4105の機能に対応する。
点Aをd”倍した点のスカラー倍算を実行することで、補正値U= d”Aを生成する(ステップ4705)。これは、点のスカラー倍算器4106の機能に対応する。
Tと補正値Uから、V=T+Uを計算する(ステップ4706)。これは、補正演算器4108の機能に対応する。
最後に、Vを計算結果dAとして出力する(ステップ4707)。
ステップ4705においては、点Aをそのまま用いた点のスカラー倍算が実行され、この処理は特殊PAに対して脆弱である。しかし、このべき乗剰余で用いられる指数は、d”= d (mod C(α))であり、そのビット長はC(α)のビット長(log2C(α))と同じである。C(α) = 3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずかlog2105 = 7ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
図48は、図47のステップ4703,4704,4705において実行される点のスカラー倍算処理の詳細(その1)を示すフローチャートである。このフローチャートの処理は、図15に示したA&D-always法を用いた点のスカラー倍算のアルゴリズムに基づくものである。
ステップ4800で、図15に示される入力値が入力される。
ステップ4801は、図15の1501行に対応する。
ステップ4802,4806,4807は、図15の1502のfor文のループ処理に対応している。
ステップ4803は、図15の1503行に対応し、2倍算を実行する。
ステップ4804は、図15の1504行に対応し、加算を実行する。
ステップ4805は、図15の1505行に対応する。
ステップ4808,4809は、図15の1507行に対応する。
このフローチャートでは、スカラー値dの値に関係なく、常に2倍算(4803)と加算(4804)の演算パターンが一定化される。
図49は、図47のステップ4703,4704,4705において実行される点のスカラー倍算処理の詳細(その2)を示すフローチャートである。図48のフローチャートでは、指数dを1ビットずつ増やしながら点のスカラー倍算を行なった。これに対し、図49のフローチャートでは、ステップ4901と4902の初期化処理の後、ステップ4904と4905のループ制御処理によって、w[i]=iA (mod n) (i=0,1,..,2k -1)で示されるkビットテーブルを計算する(ステップ4903)。
その後、ステップ4906と4907の初期化処理の後、ステップ4910と4911のループ制御処理によって、指数dをkビットずつ増やしながら点のスカラー倍算を実行する。図48のフローチャートと同様に、指数dの値に関係なく、常に2倍算 (ステップ4908)と加算(ステップ4909)の演算パターンが一定化される。
次に、図41の暗号処理装置4100の具体的な処理を示す第5の実施形態について、以下に説明する。図50は、第5の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
図50において、図47の第4の実施形態と同じ処理には、同じ番号を付してある。
第5の実施形態の制御処理が第4の実施形態の制御処理と異なる点は、個人鍵dに対して、dをC(a)で割ったときの商と余りの計算処理を、事前処理において個人鍵dを生成するした時点で実行し、それぞれd’とd’’に与える点である(ステップ5000)。これは、式(6.1)および(6.7)に基づく処理であり、図41の個人鍵変換器4104と補正鍵生成器4107の機能に対応する。事前処理として実行することで、点のスカラー倍算を実行するごとに割り算処理の実行を不要とすることができる。
図50のステップ4701、およびステップ4703から4707までの各処理は、図47の第4の実施形態の場合と同じである。
ステップ4705において特殊PAに対して脆弱となるビット数は、第4の実施形態の場合と同様に、わずか7ビット程度である。
次に、図41の暗号処理装置4100の具体的な処理を示す第6の実施形態について、以下に説明する。図51は、第6の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
図51において、図47の第4の実施形態と同じ処理には、同じ番号を付してある。
第6の実施形態の制御処理が第4の実施形態の制御処理と異なる点は、対策用定数C(α)に乱数rを付加している点である。
まず、個人鍵dが事前に生成され(ステップ4700)、点Aが入力される(ステップ4701)。
その後、20ビットの乱数rが生成される(ステップ5101)。
次に、式(6.3)に基づき、r’=c(α)×rが演算される(ステップ5102)。
続いて、事前に生成された個人鍵dに対して、dをr’で割ったときの商と余りを計算し、それぞれd’とd’’に与える(ステップ5103)。これは、式(6.3)および(6.8)に基づく処理であり、個人鍵変換器4104および補正鍵生成器4107の機能に対応する。
点Aをr’倍した結果r’AをBに与える(ステップ5104)。これは、定数倍器4101の機能に対応する。
その後、図47の場合と同様に、ステップ4704,4705,4706,4707の各処理が順次実行され、式(6.8)に基づく制御処理に従って、最終的な点のスカラー倍算値V=dAが出力される。
ステップ4705においては、点Aをそのまま用いた点のスカラー倍算が実行され、この処理は特殊PAに対して脆弱である。そのビット長は、第1または第2の実施形態に比較して乱数rのビット長だけ長くなり、(C(α)のビット長)+20(=log2C(α)+20)となる。C(α)=3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずか20+log2105=27ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
第1または第2の実施形態に比較して、特殊PAの攻撃にさらされるビット長は長くなるが、ステップ4704,4705,4706の点のスカラー倍算処理の指数が全てランダム化されているため、DPAに対する安全性が高いというメリットがある。
第3の実施形態の場合と同様に、第6の実施形態におけるステップ5103の処理自体は、前述した従来法2の式(4.4)および(4.5)の処理と類似である。しかしながら、第6の実施形態では、ステップ5101で生成した乱数rに対して、ステップ5102に示す乱数rのC(α)倍処理r’=r´C(α)を行うという特徴を有するのに対して、従来法2ではそれに相当する処理を行わない。この特徴の差異が効果の差異となる。すなわち、第6の実施形態では、C(α)の整数倍であるr’に対して、点BをAのr’倍算値として与えることで、特殊PAに対しても安全な処理を実現できる。
3700、3710 暗号処理装置
3701 CPU(Central Processing Unit)
3702 ROM(Read Only Memory)
3703 RAM(Random Access Memory)
3704 通信回路
3705 通信インタフェース(I/F)
3706 バス
3707 電源端子
3708 グランド端子
3711 ECCハードウェア回路
3901 定数乗器
3902、4102 対策用定数記憶部
3903、4103 個人鍵記憶部
3904、4104 個人鍵変換部
3905 べき乗剰余演算器
3906 べき乗剰余演算器
3907、4107 補正鍵生成器
3908、4108 補正演算器
4101 定数倍器
4105 点のスカラー倍算器
4106 点のスカラー倍算器

Claims (10)

  1. 第1の基数aおよび法nを入力し、前記第1の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第2の基数bとして出力する定数乗器と、
    第1の個人鍵dを入力し、前記第1の個人鍵dを前記所定定数で割った商として第2の個人鍵d’を演算する個人鍵変換器と、
    前記第1の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
    前記第2の基数bに対して前記第2の個人鍵d’を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を出力する第1のべき乗剰余演算器と、
    前記第1の基数aに対して前記補正鍵d”を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を補正値として出力する第2のべき乗剰余演算器と、
    前記第1のべき乗剰余演算器が出力する演算結果および前記第2のべき乗剰余演算器が出力する補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第1の基数aに対して前記第1の個人鍵dを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する補正演算器と
    を備えることを特徴とする暗号処理装置。
  2. 第1の楕円曲線上の点Aを入力し、前記第1の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第2の楕円曲線上の点Bとして出力する定数倍器と、
    第1の個人鍵dを入力し、前記第1の個人鍵dを前記所定定数で割った商として第2の個人鍵d’を演算する個人鍵変換器と、
    前記第1の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
    前記第2の点Bに対して前記第2の個人鍵d’をスカラー値として点のスカラー倍算を実行し、演算結果を出力する第1の点のスカラー倍算器と、
    前記第1の点Aに対して前記補正鍵d”をスカラー値として点のスカラー倍算を実行し、演算結果を補正値として出力する第2の点のスカラー倍算器と、
    前記第1の点のスカラー倍算器が出力する演算結果および前記第2の点のスカラー倍算器が出力する補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第1の点Aに対して前記第1の個人鍵dをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する補正演算器と、
    を備えることを特徴とする暗号処理装置。
  3. 前記所定定数は1つ以上の素数を公約数とする値を有する、
    ことを特徴とする請求項1または2に記載の暗号処理装置。
  4. 前記所定定数は所定の乱数を公約数とする値を有する、
    ことを特徴とする請求項3に記載の暗号処理装置。
  5. 前記個人鍵変換器および前記補正鍵生成器は、暗号処理に先立って事前に、前記第2の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
    ことを特徴とする請求項1または2に記載の暗号処理装置。
  6. コンピュータが、
    第1の基数aおよび法nを入力し、前記第1の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第2の基数bとして出力し、
    第1の個人鍵dを入力し、前記第1の個人鍵dを前記所定定数で割った商として第2の個人鍵d’を演算し、
    前記第1の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
    前記第2の基数bに対して前記第2の個人鍵d’を指数とし前記法nに関する第1のべき乗剰余演算を実行し、演算結果を出力し、
    前記第1の基数aに対して前記補正鍵d”を指数とし前記法nに関する第2のべき乗剰余演算を実行し、演算結果を補正値として出力し、
    前記第1のべき乗剰余演算の演算結果および前記第2のべき乗剰余演算の演算結果である補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第1の基数aに対して前記第1の個人鍵dを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する、
    ことを特徴とする暗号処理方法。
  7. コンピュータが、
    第1の楕円曲線上の点Aを入力し、前記第1の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第2の楕円曲線上の点Bとして出力し、
    第1の個人鍵dを入力し、前記第1の個人鍵dを前記所定定数で割った商として第2の個人鍵d’を演算し、
    前記第1の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
    前記第2の点Bに対して前記第2の個人鍵d’をスカラー値として点の第1のスカラー倍算を実行し、演算結果を出力し、
    前記第1の点Aに対して前記補正鍵d”をスカラー値として点の第2のスカラー倍算を実行し、演算結果を補正値として出力し、
    前記第1の点のスカラー倍算の演算結果および前記第2の点のスカラー倍算の演算結果である補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第1の点Aに対して前記第1の個人鍵dをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する、
    ことを特徴とする暗号処理方法。
  8. 前記所定定数は1つ以上の素数を公約数とする値を有する、
    ことを特徴とする請求項6または7に記載の暗号処理方法。
  9. 前記所定定数は所定の乱数を公約数とする値を有する、
    ことを特徴とする請求項8に記載の暗号処理方法。
  10. 暗号処理に先立って事前に、前記第2の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
    ことを特徴とする請求項6または7に記載の暗号処理方法。
JP2012550616A 2010-12-27 2010-12-27 暗号処理装置および方法 Expired - Fee Related JP5573964B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/073636 WO2012090289A1 (ja) 2010-12-27 2010-12-27 暗号処理装置および方法

Publications (2)

Publication Number Publication Date
JPWO2012090289A1 true JPWO2012090289A1 (ja) 2014-06-05
JP5573964B2 JP5573964B2 (ja) 2014-08-20

Family

ID=46382439

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012550616A Expired - Fee Related JP5573964B2 (ja) 2010-12-27 2010-12-27 暗号処理装置および方法

Country Status (3)

Country Link
US (1) US9130745B2 (ja)
JP (1) JP5573964B2 (ja)
WO (1) WO2012090289A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016034912A1 (en) 2014-09-05 2016-03-10 Umm Al-Qura University Method and apparatus for scalar multiplication secure against differential power attacks
DE102014222825A1 (de) * 2014-11-07 2016-05-12 Ihp Gmbh - Innovations For High Performance Microelectronics / Leibniz-Institut Für Innovative Mikroelektronik Vorrichtung und Verfahren zur Multiplikation zur Erschwerung von Seitenkanalangriffen
CN105357010B (zh) * 2015-10-08 2019-04-02 武汉理工大学 一种针对计算资源受限装置的密码运算方法
CA2984390A1 (en) * 2016-11-07 2018-05-07 Infosec Global Inc. Elliptic curve isogeny-based cryptographic scheme
US10341098B2 (en) * 2017-01-24 2019-07-02 Nxp B.V. Method of generating cryptographic key pairs
JP6834771B2 (ja) * 2017-05-19 2021-02-24 富士通株式会社 通信装置および通信方法
FR3076013B1 (fr) * 2017-12-21 2020-11-06 Oberthur Technologies Procede de traitement cryptographique, programme d’ordinateur et dispositif associes

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5675653A (en) * 1995-11-06 1997-10-07 Nelson, Jr.; Douglas Valmore Method and apparatus for digital encryption
JP3525209B2 (ja) * 1996-04-05 2004-05-10 株式会社 沖マイクロデザイン べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法
JP3797808B2 (ja) 1998-10-27 2006-07-19 富士通株式会社 スカラー倍算方法およびその装置
JP2000165375A (ja) * 1998-11-30 2000-06-16 Hitachi Ltd 情報処理装置、icカード
JP3796993B2 (ja) * 1998-12-22 2006-07-12 株式会社日立製作所 楕円曲線暗号実行方法及び装置並びに記録媒体
DE19963408A1 (de) * 1999-12-28 2001-08-30 Giesecke & Devrient Gmbh Tragbarer Datenträger mit Zugriffsschutz durch Schlüsselteilung
US6978016B2 (en) * 2000-12-19 2005-12-20 International Business Machines Corporation Circuits for calculating modular multiplicative inverse
JP3785044B2 (ja) * 2001-01-22 2006-06-14 株式会社東芝 べき乗剰余計算装置、べき乗剰余計算方法及び記録媒体
JP4199937B2 (ja) * 2001-03-06 2008-12-24 株式会社日立製作所 耐タンパー暗号処理方法
JP4108391B2 (ja) 2001-12-04 2008-06-25 富士通株式会社 秘密鍵を用いた耐タンパ暗号処理
JP4086503B2 (ja) * 2002-01-15 2008-05-14 富士通株式会社 暗号演算装置及び方法並びにプログラム
US20080019508A1 (en) * 2005-05-03 2008-01-24 Jesse Lipson Public key cryptographic methods and systems with rebalancing
FR2895609A1 (fr) * 2005-12-26 2007-06-29 Gemplus Sa Procede cryptographique comprenant une exponentiation modulaire securisee contre les attaques a canaux caches, cryptoprocesseur pour la mise en oeuvre du procede et carte a puce associee
US7925011B2 (en) * 2006-12-14 2011-04-12 Intel Corporation Method for simultaneous modular exponentiations
US7903814B2 (en) * 2007-07-26 2011-03-08 Samsung Electronics Co., Ltd. Enhancing the security of public key cryptosystem implementations
WO2009118795A1 (ja) * 2008-03-28 2009-10-01 富士通株式会社 サイドチャネル攻撃に対する耐タンパ性を有する暗号処理方法
EP2264939B1 (en) 2008-03-31 2015-03-04 Fujitsu Limited Encrypting method having countermeasure function against power analyzing attacks
JP5407352B2 (ja) * 2009-01-19 2014-02-05 富士通株式会社 復号処理装置、復号処理プログラム、復号処理方法

Also Published As

Publication number Publication date
WO2012090289A1 (ja) 2012-07-05
JP5573964B2 (ja) 2014-08-20
US20130287209A1 (en) 2013-10-31
US9130745B2 (en) 2015-09-08

Similar Documents

Publication Publication Date Title
JP5488718B2 (ja) 暗号処理装置、暗号処理方法、およびプログラム
JP5573964B2 (ja) 暗号処理装置および方法
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
JP5412274B2 (ja) サイドチャネル攻撃からの保護
US9772821B2 (en) Cryptography method comprising an operation of multiplication by a scalar or an exponentiation
JP5001176B2 (ja) 署名生成装置、署名生成方法及び署名生成プログラム
EP1946205B1 (en) A method for scalar multiplication in elliptic curve groups over prime fields for side-channel attack resistant cryptosystems
JP5365624B2 (ja) 電力解析攻撃への対策機能を備えた復号装置、プログラム、及び復装置を組み込んだ組込機器装置
JPWO2005008955A1 (ja) 個人鍵を用いた耐タンパ暗号処理
JP2008252299A (ja) 暗号処理システム及び暗号処理方法
US20190089523A1 (en) Countermeasure to safe-error fault injection attacks on cryptographic exponentiation algorithms
JP2011510579A (ja) 署名ダイアグラムを用いた非対称暗号方式のための対策方法およびデバイス
JP2004163687A (ja) 楕円曲線暗号装置、楕円曲線暗号プログラム
US11496447B1 (en) Cryptosystem and method with efficient elliptic curve operators for an extraction of EiSi coordinate system
CN111480140B (zh) 计算设备和方法
Chen FPGA implementation for elliptic curve cryptography over binary extension field
Liu et al. A novel elliptic curve scalar multiplication algorithm against power analysis
JP2004053814A (ja) 楕円曲線暗号装置及び楕円曲線暗号演算方法
Kim et al. SPA countermeasure based on unsigned left-to-right recodings
Joseph Design and Implementation of High-speed Algorithms for Public-key Cryptosystems

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140304

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140418

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140603

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140616

R150 Certificate of patent or registration of utility model

Ref document number: 5573964

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees