JP2014145958A - 半導体装置 - Google Patents

半導体装置 Download PDF

Info

Publication number
JP2014145958A
JP2014145958A JP2013015227A JP2013015227A JP2014145958A JP 2014145958 A JP2014145958 A JP 2014145958A JP 2013015227 A JP2013015227 A JP 2013015227A JP 2013015227 A JP2013015227 A JP 2013015227A JP 2014145958 A JP2014145958 A JP 2014145958A
Authority
JP
Japan
Prior art keywords
value
storage device
accumulated value
input
remainder
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.)
Pending
Application number
JP2013015227A
Other languages
English (en)
Inventor
Vuillaume Camille
カミーユ ヴィオム
Daisuke Suzuki
大輔 鈴木
Takeshi Sugawara
健 菅原
Takashi Endo
隆 遠藤
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics Corp
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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2013015227A priority Critical patent/JP2014145958A/ja
Publication of JP2014145958A publication Critical patent/JP2014145958A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】ECCに限らずRSA方式などの、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能なマイコンまたはそれを搭載したスマートカードにおいて、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上する。
【解決手段】累算値を格納するメモリと、非剰余演算器と、群演算器とを備え、以下の動作を実行可能に構成される。べき乗演算は、第1ステップと第2ステップとを含み、べき乗演算の指数の2進数表現における各桁に対応する少なくとも1回以上の繰り返しを含むループ処理によって演算される。第1ステップでは、累算値をメモリから読み出して任意値との積または和を求め、新たな累算値としてメモリに書き戻す。第2ステップでは、累算値をメモリから読み出して群演算器による演算の結果をメモリに書き戻すことにより累算値を更新する。このとき、任意値は、第1ステップにおいて累算値を異なる値に更新する値に設定される。
【選択図】図1

Description

本発明は、暗号演算を行う半導体装置に関し、特に耐タンパー性の向上に好適に利用できるものである。
スマートカードやそれに搭載されるセキュアマイコンのような耐タンパー機器には、サイドチャネル攻撃によってデータが漏洩することを防ぐ対策が求められている。サイドチャネル攻撃とは、暗号装置の動作を、消費電流や電磁輻射などの物理現象を観測し、データ処理することにより、秘匿されるべきデータ、特に暗号鍵を不正に知得しようとする攻撃である。一般的にサイドチャンネル波形は非常にノイズが多く、秘密データの情報を直ちに抽出することは非常に困難である。これに対し、特に差分電力解析と呼ばれる攻撃は、ノイズを減らし確実に目的のデータを抽出するために、重複漏洩測定や平均化技術(非特許文献1)を利用する。
差分電力解析に対抗する標準的な方法は、秘密データをランダム化する方法である。例えばRSA方式では、下式を用いてメッセージを復号する。
M = C^D mod N ・・・・・・・・・・・・・・・・・・・・・ (式1)
ここで、記号「^」はべき乗演算、「mod」は剰余演算を表し、「×」と「*」は非モジュラ乗算を表すものとし、(以下本明細書及び図面において同じ)、Mはメッセージ、Cは署名、Dは暗号鍵、Nは剰余の法である。耐タンパー性のためには、暗号鍵Dを漏洩から守ることが最も重要である。
特許文献1には、暗号鍵Dをランダム化する技術が開示されている。下式のとおり、式1の指数部をランダム化することができる。
M = C^(D+r1×Φ(N)) mod N ・・・・・・・・・・・・・・(式2)
ここで、r1は乱数、Φはオイラーのトーシェント関数であり、指数をランダム化しても全く同じ演算結果を得ることができる。
特許文献2には、さらに、式3のように、べき乗演算の基数Cと剰余の法Nをそれぞれランダム化する技術が開示されている。ランダム化されたメッセージM’は、式4によって復号される。
M’=(C+r3×N)^(D+r1×Φ(N)) mod (r2×N) ・・・・(式3)
M = M’mod N ・・・・・・・・・・・・・・・・・・・・・・・ (式4)
ここで、r1、r2、r3は乱数であり、任意に変更することができるため、ランダム化された指数、法、及び基数が使用される回数を1回のみにすることができ、平均化技術を使った攻撃に対抗することができる。
平均化技術は、ノイズを減らすのに有効な攻撃であるが、同一のシーケンスが繰り返し出現することを前提としているため、以上のようなランダム化技術により、平均化技術を無効化し耐タンパー性を向上することができる。ところが、観測技術の向上によって、単発の現象を観測することが可能となり、暗号装置に「演算の間の衝突」と呼ばれる現象があると、秘密データの情報が漏洩する恐れがあることが指摘された(非特許文献2)。
ここでいう「演算の間の衝突」とは、べき乗演算などで同じ値のデータが異なった2つの地点(暗号装置内の場所やタイミング)で演算処理されることをいう。RSAやDSAのような公開鍵暗号方式ではべき剰余演算を利用し、楕円曲線暗号(ECC:Elliptic Curve Cryptography)でもべき乗演算を利用する。べき乗演算法の入力や出力に、異なったタイミングで同じデータが現れる、「演算の間の衝突」が発生したときに、暗号装置の単発の現象を観測することにより、演算の間の衝突が発生したことが検知される可能性がある。さらに、この発生のタイミングは、秘密データを推定するためのヒントになり得る。
非特許文献2には、ECCスカラー倍演算での演算の間の衝突に対する一部の対策が示されている。べき乗演算で処理されている中間データに乱数を乗じてランダム化することにより、演算の間の衝突の発生を回避している。
米国特許第7506165号 米国特許第5991415号
Paul Kocher,Joshua Jaffe,and Benjamin Jun: "Differential Power Analysis",LNCS 1666,Springer-Verlag,1999. Neil Hanley,HeeSeok Kim,and Michael Tunstall: "Exploiting Collisions in Addition Chain-based Exponentiation Algorithms",Cryptology ePrint Archive,Report 2012/485,2012-08-22
特許文献1、2及び非特許文献1、2について本発明者が検討した結果、以下のような新たな課題があることがわかった。
すでに述べたように、特許文献1と2に記載される、べき乗演算の指数、基数、及び剰余の法をランダム化することによって、平均化技術を使った攻撃に対抗することができるが、単発の物理現象の観測まで考慮すると、演算の間の衝突が攻撃の対象となるおそれがある。非特許文献2に記載される技術によれば、演算の中間データにおける演算の間の衝突による問題の一部を解決するが、以下の問題がある。
一般に乱数の生成には時間を要するのに対し、非特許文献2に記載されている技術では、乱数が数多く使用されている。さらに、ランダム化のステップ自体に、演算の間の衝突が発生し、攻撃の対象となる恐れがある。非特許文献2はこの課題を指摘してはいるが、解決手段は示していない。
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
一実施の形態によれば、下記の通りである。
すなわち、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置であって、累算値を格納可能な記憶装置と、非剰余演算器と、群演算器とを備え、以下の動作を実行可能に構成される。
べき乗演算は、第1ステップと第2ステップとを含むループ処理であって、べき乗演算の指数の2進数表現における各桁に対応する少なくとも1回以上の繰り返しを含むループ処理によって演算される。
第1ステップにおいて、累算値を記憶装置から読み出して任意値とともに非剰余演算器に入力し、出力される積または和を記憶装置に書き戻すことにより累算値を更新する。
第2ステップにおいて、累算値を記憶装置から読み出して群演算器に入力し、出力される群演算の結果を記憶装置に書き戻すことにより累算値を更新する。
このとき、任意値は、第1ステップにおいて累算値を異なる値に更新する値に設定される。
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
すなわち、ECCに限らずRSA方式などの、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
図1は、代表的な実施の形態に係る半導体装置の構成を表すブロック図である。 図2は、代表的な実施の形態に係る半導体装置の動作を表すフローチャートである。 図3は、代表的な実施の形態に係る半導体装置の構成、及び、それをRSA暗号演算を行うスマートカードに搭載したシステムの構成例を表すブロック図である。 図4は、代表的な実施の形態に係る半導体装置を搭載した、RSA暗号演算を行うスマートカードシステムの動作例を表す説明図である。 図5は、RSA暗号演算におけるランダム化による保護動作を表すフローチャートである。 図6は、RSA暗号演算におけるべき乗演算の動作を表すフローチャートである。 図7は、RSA暗号演算のべき乗演算における演算の間の衝突を示す説明図である。 図8は、実施形態1のべき乗演算の動作を表すフローチャートである。 図9は、実施形態1のべき乗演算における演算の間の衝突を示す説明図である。 図10は、実施形態2のべき乗演算の動作を表すフローチャートである。 図11は、実施形態2のべき乗演算における演算の間の衝突を示す説明図である。 図12は、実施形態3のべき乗演算の動作を表すフローチャートである。 図13は、実施形態3のべき乗演算における演算の間の衝突を示す説明図である。 図14は、代表的な実施の形態に係る半導体装置の構成、及び、それをECC演算を行うスマートカードに搭載したシステムの構成例を表すブロック図である。 図15は、ECC演算におけるランダム化による保護動作を表すフローチャートである。 図16は、ECC演算におけるべき乗演算の動作を表すフローチャートである。 図17は、ECC演算の比較例のべき乗演算における演算の間の衝突を示す説明図である。 図18は、比較例のべき乗演算の動作を表すフローチャートであり、図16における楕円曲線点加算ECADDと楕円曲線点2倍算ECDBLの一般的な実装例である。 図19は、べき乗演算の動作を表すフローチャートであり、図16における楕円曲線点加算ECADDと楕円曲線点2倍算ECDBLの実施形態4による実施の形態である。
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
〔1〕<演算の間の衝突を抑えたべき乗演算回路>
べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置(1、120、620)であって、累算値(5、170、670)を格納可能な記憶装置(2、127、627)と、非剰余演算器(3、145、648)と、群演算器(4、140、141、640、641)とを備え、以下の動作を可能に構成される。
前記べき乗演算は、第1ステップ(14、431、413、417、511、1001、1021)と第2ステップ(15、432、414、512、1002、1022)とを含むループ処理であって、前記べき乗演算の指数(D’、d)の2進数表現における各桁(dn-1,…d0)に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算される。
前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して任意値(6、N’,N”,a、b)とともに前記非剰余演算器に入力し、出力される積または和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第2ステップにおいて、前記累算値を前記記憶装置から読み出して前記群演算器に入力し、出力される群演算の結果を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記任意値は、前記第1ステップにおいて前記累算値を異なる値に更新する値に設定される。
これにより、ECCに限らずRSA方式などの、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
〔2〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N’>
項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記非剰余演算器は加算器(143)であり、前記群演算器は剰余演算を実行可能な剰余演算器(141)であり、前記任意値は前記剰余演算の法(161)の倍数である。
前記第1ステップ(431)において、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
〔3〕<RSA/DSA公開鍵方式 C’[di]=C’[1]*M’ mod N’>
項2において、前記記憶装置はさらにダミー累算値(170)を格納可能に構成される。
前記ループ処理はさらに第3ステップ(433)を含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第3ステップにおいて、前記任意値と前記第2ステップで更新された前記累算値とを前記記憶装置から読み出して前記剰余演算器に入力する。前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔4〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N”(乱数a)>
項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記非剰余演算器は加算器(143)であり、前記群演算器は剰余演算を実行可能な剰余演算器(141)であり、前記任意値(N”)は前記剰余演算の法(N’)に乱数(a)を乗じた値(N”=a×N’)である。
前記第1ステップ(413)において、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔5〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N”(乱数a,b)>
項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記任意値を第1任意値(a)とし、前記記憶装置はさらにダミー累算値を格納可能であり、前記非剰余演算器は加算器であり、前記群演算器は剰余演算を実行可能な剰余演算器であり、
前記ループ処理は、さらに第4ステップ(412)と第5ステップ(416)と第6ステップ(417)と第7ステップ(418)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第4ステップ(412)において、前記剰余演算の法(N’)と第1乱数(a)の積を前記第1任意値(N”)として算出する。
前記第1ステップ(413)において、前記累算値を前記記憶装置から読み出して前記第1任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第5ステップ(416)において、前記法(N’)と第2乱数(b)の積を第2任意値(N”)として算出する。
前記第6ステップ(417)において、前記累算値を前記記憶装置から読み出して前記第2任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第7ステップ(418)において、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔6〕<RSA/DSA公開鍵方式 C’[NOT(di)]=C’[1]+N’>
項2において、前記記憶装置はさらにダミー累算値を格納可能に構成される。
前記ループ処理はさらに第8ステップ(513)と第9ステップ(514)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第8ステップ(513)において、前記累算値を前記記憶装置から読み出して前記任意値とともに前記加算器に入力し出力される和を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
前記第9ステップ(514)において、前記第2ステップで更新された前記累算値を前記記憶装置から読み出して前記任意値とともに前記剰余演算器に入力する。さらにそのときの前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔7〕<コプロセッサ+バス+RAM>
項2から項6のうちのいずれか1項において、前記記憶装置はRAM(Random Access Memory)(127)であり、前記加算器と前記剰余演算器を含むコプロセッサ(124)を備え、前記RAMは前記コプロセッサによりバス(128)を介してアクセス可能に構成される。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上した半導体装置を提供することができる。
〔8〕<楕円曲線暗号(ECC)>
項1において、前記公開鍵暗号方式は楕円曲線暗号方式であり、前記非剰余演算器は乗算器(642)であり、前記群演算器は剰余演算を実行可能な剰余演算器(641)であり、前記累算値を第1累算値とし、前記記憶装置はさらに第2累算値を格納可能に構成される。
前記ループ処理は、前記第1ステップと前記第2ステップをサブステップとして含む第10ステップ(811)と第11ステップ(812)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第10ステップ(811)において、前記第1累算値と前記第2累算値とを前記記憶装置から読み出して、楕円曲線点加算(ECADD)を行う。前記楕円曲線点加算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記第1累算値を更新するか、または、前記記憶装置に前記第2累算値として書き込む。
前記第11ステップ(812)において、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記第1累算値または前記第2累算値を読み出して、楕円曲線点2倍算(ECDBL)を行って書き戻す。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
〔9〕<楕円曲線暗号(ECC) ランダム化>
項8において、前記任意値を第1任意値(a)とし、前記第11ステップは、サブステップとして第12ステップ(1021)を含む。
前記第1ステップ(1001)において、前記第10ステップの前記楕円曲線点加算(ECADD)における2つの入力点の座標の値のそれぞれに前記第1任意値(a)を乗じる。
前記第12ステップ(1021)において、前記第11ステップの前記楕円曲線点2倍算(ECDBL)における1つの入力点の座標の値のそれぞれに第2任意値(b)を乗じる。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔10〕<コプロセッサ+バス+RAM>
項8または項9において、前記記憶装置はRAM(627)であり、前記乗算器と前記剰余演算器を含むコプロセッサ(624)を備え、前記RAMは前記コプロセッサによりバス(628)を介してアクセス可能に構成される。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上した半導体装置を提供することができる。
〔11〕<任意値a、bはハードコード>
項10において、CPU(Central Processing Unit)(622)と前記CPUで実行可能なプログラム(650)を格納する不揮発性メモリ(625)を備え、前記プログラムは、前記第1任意値と前記第2任意値をプログラムコードの一部(650、651、または652)に含む。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上した半導体装置を提供することができる。
〔12〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N’>
べき乗演算を含むRSA方式の演算処理を実行可能な半導体装置であって、累算値を格納可能な記憶装置(127)と、加算器(143)と、剰余演算器(141)とを備え、以下の動作を可能に構成される。
前記べき乗演算は、第1ステップ(431、413、417、511)と第2ステップ(432、414、418、512)とを含むループ処理であって、前記べき乗演算の指数(D’)の2進数表現における各桁(dn-1,…d0)に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算される。
前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して任意値(N’)とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第2ステップにおいて、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記任意値は、前記第1ステップにおいて前記累算値を異なる値に更新する値に設定される。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
〔13〕<RSA/DSA公開鍵方式 C’[di]=C’[1]*M’ mod N’>
項12において、前記記憶装置はさらにダミー累算値(170)を格納可能に構成される。
前記ループ処理はさらに第3ステップ(433)を含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第3ステップにおいて、前記任意値と前記第2ステップで更新された前記累算値とを前記記憶装置から読み出して前記剰余演算器に入力する。前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔14〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N”>
項12において、前記任意値(N”)は前記剰余演算の法(N’)に乱数(a)を乗じた値(N”=a×N’)である。
前記第1ステップ(413)において、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔15〕<RSA/DSA公開鍵方式 C’[1]=C’[1]+N”>
項12において前記任意値を第1任意値(a)とし、前記記憶装置はさらにダミー累算値を格納可能に構成される。
前記ループ処理は、さらに第4ステップ(412)と第5ステップ(416)と第6ステップ(417)と第7ステップ(418)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第4ステップ(412)において、前記剰余演算の法(N’)と第1乱数(a)の積を前記第1任意値(N”)として算出する。
前記第1ステップ(413)において、前記累算値を前記記憶装置から読み出して前記第1任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第5ステップ(416)において、前記法(N’)と第2乱数(b)の積を第2任意値(N”)として算出する。
前記第6ステップ(417)において、前記累算値を前記記憶装置から読み出して前記第2任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する。
前記第7ステップ(418)において、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔16〕<RSA/DSA公開鍵方式 C’[NOT(di)]=C’[1]+N’>
項12において、前記記憶装置はさらにダミー累算値を格納可能に構成される。
前記ループ処理はさらに第8ステップ(513)と第9ステップ(514)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第8ステップ(513)において、前記累算値を前記記憶装置から読み出して前記任意値とともに前記加算器に入力し出力される和を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
前記第9ステップ(514)において、前記第2ステップで更新された前記累算値を前記記憶装置から読み出して前記任意値とともに前記剰余演算器に入力する。さらにそのときの前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔17〕<コプロセッサ+バス+RAM>
項12から項16のうちのいずれか1項において、前記記憶装置はRAM(127)であり、前記加算器と前記剰余演算器を含むコプロセッサ(124)を備え、前記RAMは前記コプロセッサによりバス(128)を介してアクセス可能に構成される。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上した半導体装置を提供することができる。
〔18〕<楕円曲線暗号(ECC) ECADDとECDBL>
べき乗演算を含む楕円曲線暗号方式の演算処理を実行可能な半導体装置(1)であって、第1累算値と第2累算値を格納可能な記憶装置(627)と、乗算器(642)と、剰余演算器(641)とを備え、以下の動作を可能に構成される。
前記べき乗演算は、第1ステップ(1001)と第2ステップ(1002)とを含むループ処理であって、前記べき乗演算の指数(d)の2進数表現における各桁(dn-1,…d0)に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算される。
前記第1ステップにおいて、前記第1累算値を前記記憶装置から読み出して任意値(a)とともに前記非剰余演算器に入力し、出力される積を前記記憶装置に書き戻すことにより前記第1累算値を更新する。
前記第2ステップにおいて、前記第1累算値を前記記憶装置から読み出して前記群演算器に入力し、出力される群演算の結果を前記記憶装置に書き戻すことにより前記第1累算値を更新する。
前記任意値は、前記第1ステップにおいて前記第1累算値を異なる値に更新する値に設定される。
前記ループ処理は、前記第1ステップと前記第2ステップをサブステップとして含む第10ステップ(811)と第11ステップ(812)とを含み、前記べき乗演算の前記指数の2進数表現におけるビット数(n)を繰り返し回数とする。
前記第10ステップ(811)において、前記第1累算値と前記第2累算値とを前記記憶装置から読み出して、楕円曲線点加算(ECADD)を行なう。さらにその前記楕円曲線点加算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記記憶装置に書き戻すことにより前記第1累算値を更新するか、または、前記記憶装置に前記第2累算値として書き込む。
前記第11ステップ(812)において、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値(di)に基づいて、前記第1累算値または前記第2累算値を読み出して、楕円曲線点2倍算(ECDBL)を行って書き戻す。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
〔19〕<楕円曲線暗号(ECC) ランダム化>
項18において、前記任意値を第1任意値(a)とし、前記第11ステップは、サブステップとして第12ステップ(1021)を含む。
前記第1ステップ(1001)において、前記第10ステップの前記楕円曲線点加算(ECADD)における2つの入力点の座標の値のそれぞれに前記第1任意値(a)を乗じる。
前記第12ステップ(1021)において、前記第11ステップの前記楕円曲線点2倍算(ECDBL)における1つの入力点の座標の値のそれぞれに第2任意値(b)を乗じる。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
〔20〕<コプロセッサ+バス+RAM>
項18または項19において、前記記憶装置はRAM(627)であり、前記乗算器と前記剰余演算器を含むコプロセッサ(624)を備え、前記RAMは前記コプロセッサによりバス(628)を介してアクセス可能に構成される、半導体装置。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上した半導体装置を提供することができる。
2.実施の形態の詳細
実施の形態について更に詳述する。
〔代表的な実施の形態〕
図1は、代表的な実施の形態に係る半導体装置の構成を表すブロック図であり、図2は、その動作を表すフローチャートである。
半導体装置1は、累算値5を格納可能な記憶装置2と、非剰余演算器3と、群演算器4とを備え、以下の動作により、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能に構成される。
前記べき乗演算は、第1ステップ14と第2ステップ15とを含むループ処理であって、前記べき乗演算の指数(D’)の2進数表現における各桁(dn-1,…d0)に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算される。第1ステップ14において、累算値5を記憶装置2から読み出して任意値6とともに非剰余演算器3に入力し、出力される積または和を記憶装置2に書き戻すことにより累算値5の値を更新する。第2ステップ15において、累算値5を記憶装置2から読み出して群演算器4に入力し、出力される群演算の結果を記憶装置2に書き戻すことにより累算値5の値を更新する。任意値6は、第1ステップ14において累算値5を異なる値に更新する値に設定される。
公開鍵暗号方式の演算処理は、式1によって暗号化されたメッセージMを受信したとき、下式によって署名Cを算出し、真正の署名と照合することによって認証する。
C = M^D mod N ・・・・・・・・・・・・・・・・・ (式5)
ここで、式3に示したように、べき乗演算の基数Cと指数D及び剰余の法Nをランダム化することにより、耐タンパー性を向上する技術が、採用されている。そのため、署名生成のための演算は、下式となる。
C’= M’^D’mod N’ ・・・・・・・・・・・・・・ (式6)
ここで、C’、M’、D’、N’はそれぞれ、ランダム化された署名C、メッセージM、指数D、法Nである。
従来の公開鍵暗号方式では、初めに署名C’に適当な初期値を与えて中間データとし、指数(D’)の2進数表現における各桁(dn-1,…d0)に対応するn回の下記のべき剰余演算を繰り返すことにより、ループ処理を終えた中間データC’が署名C’として算出される。
C’= C’^2 mod N’ ・・・・・・・・・・・・・・・・ (式7)
C’= M’×C’mod N’ if di=1・・・・・・・・・・・・ (式8)
ここで、「×」または「*」は群演算ではない通常の乗算(非モジュラ乗算)であり(全ての図面における記載も同様)、式7と式8は剰余乗算である。式8は指数(D’)の2進数表現における各桁(dn-1,…d0)の値に依存する演算で、di=1のときは中間データC’を式8の剰余乗算の結果によって置き換えて更新するが、di=0のときは式8の剰余乗算の結果は使われずに破棄される。この処理を実行するハードウェアでは、C’を累算値5として記憶装置2に記憶しておき、累算値5を記憶装置2から読み出して群演算器4に入力し、出力される群演算の結果を記憶装置2に書き戻すことにより累算値5の値を更新するステップを繰り返す、ループ処理によって演算される。
i回目のループにおいて、di=0のときは式8の剰余乗算の結果は使われずに破棄されるとすると、C’の値は変更されず、i+1回目のループにおけるC’の値はi回目のループにおけるC’の値と同じ値(演算の間の衝突)となる。C’が記憶装置2に記憶されており、ループの度に読み出される。i回目のループとi+1回目のループにおいて、記憶装置2から読み出される値は、di=1のときは異なる値となるが、di=0のときは同じ値(演算の間の衝突)となる。したがって、演算の間の衝突を利用した攻撃が行われると、演算の間の衝突が発生したか否かを検知することにより、指数(D’)の2進数表現における各桁(dn-1,…d0)の値が、探知されてしまう。
これに対し、代表的な実施の形態に係る半導体装置においては、第1ステップ14において、署名C’を求めるための中間データである、累算値5を記憶装置2から読み出して任意値6とともに非剰余演算器3に入力し、出力される積または和を記憶装置2に書き戻すことにより累算値5の値を更新する。任意値6は、第1ステップ14において累算値5を異なる値に更新する値に設定されているので、累算値5は指数(D’)の2進数表現における各桁(dn-1,…d0)の値によらず、必ず異なる値に更新され、演算の間の衝突は発生しない。
これにより、ECCに限らずRSA方式などの、べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。
半導体装置1は、公知の半導体製造技術を使って、例えば単一の半導体基板上の回路として実装することができる。また、その動作は、例えば同じ半導体装置1に搭載されたCPUなどのプロセッサ上で動作するソフトウェアによって制御、実行されることができる。単一の半導体基板上に形成することにより、外部からの観測が困難となり、耐タンパー性を向上することができる。一方、複数のLSIなどで構成された半導体装置に、本実施形態を適用することもできる。
〔実施形態1〕<RSA暗号のセキュアなべき乗演算(中間データの改変)>
図3は、代表的な実施の形態に係る半導体装置の構成、及び、それをRSA暗号演算を行うスマートカードに搭載したシステムの構成例を表すブロック図である。
スマートカード120は、UART(Universal Asynchronous Receiver Transmitter)121をインターフェースとしてリーダライタ100と接続され、通信を行う。非接触の場合は、UART121に代えて無線通信インターフェースを備えればよい。スマートカード120は、UART121、CPU122、乱数発生器(RNG)123、コプロセッサ124、ROM(Read Only Memory)125、EEPROM(Electrically Erasable Programmable Read Only Memory)126、及び、RAM127を備え、バス128を介して互いに接続されている。コプロセッサ124は、群演算を行う、べき剰余演算器140、剰余乗算器141、モジュラリダクション器144、及び、非モジュラ演算器145として乗算器142と加算器143とを備える。それぞれ独立のハードウェアとして備える必要はなく、より単純な演算ハードウェアを使うシーケンスによって、複雑な演算を実装しても良い。例えば、剰余乗算は非モジュラ加減算によるシーケンスで実装しても良い。このことは、他の実施形態についても同様である。ROM125には、CPU122で実行されるプログラム150、共通データ151、RSAのプログラム152が格納されている。これらは、CPU122の制御により、コプロセッサ124にも供給されることができる。EEPROM126には、スマートカードのデータ160、法(N)161、指数(D)162、ブラインディング要素Φ(N)163が格納されている。RAM127には、RSA演算の中間データ170が格納されている。中間データ170を格納する記憶装置は、本実施形態ではRAM127として実装したが、書き換え可能な記憶装置であればよく、例えばレジスタ、ラッチ、フリップフロップでもよい。このことは、他の実施形態についても同様である。
スマートカード120はUART121を介して、リーダライタ100と通信する。例えば、リーダライタ100がメッセージM110を送信し、スマートカードはRSAの法N(161)と指数D(162)を使って、署名(111)C=M^D mod Nを生成する。RSAにおいてべき乗M^D mod Nは、群の演算、この場合は剰余乗算、の繰り返しによって実装される。署名C(111)の生成は、ROM125に格納されているプログラム152を用い、コプロセッサ124を使用してCPU122によって実行される。また演算の中間データ170はRAM127に格納され、主にコプロセッサ124が、バス128を介してRAM127にアクセスして中間データ170を使う。RSA演算は時間のかかる多倍長演算を伴うため、演算を速めるためにハードウェア演算器を備えた、コプロセッサ124が有効である。コプロセッサ124は群演算であるべき剰余演算140、剰余乗算141、モジュラリダクション144の他、多倍長の非モジュラ演算145として乗算器142と加算器143とを含んでいる。乱数発生器(RNG:Random Number Generator)123は、サイドチャンネル攻撃に対するRSA実行を保護するため、RSA指数のブラインディングのブラインディング要素Φ(N)163となる乱数を生成する。
図4は、代表的な実施の形態に係る半導体装置を搭載した、RSA暗号演算を行うスマートカードシステムの動作例を表す説明図である。RSA演算は、ユーザ認証のためディジタル署名C(111)を生成し検証するために使われる。他の公開鍵暗号システムにも応用されている。図4では、スマートカード120を持つユーザが、アクセス制限によって保護されたリソースにアクセスしようとする例を示している。現実的な適用例としては、駅での電子切符改札などが挙げられる。保護されたリソースにアクセスするためには、スマートカードを持つユーザは、認証をうける必要があり、その認証プロトコルは、スマートカード120とリーダライタ100との間で実行される。
スマートカード120は、RSAの剰余の法N(161)と秘密指数D(162)とを保持しており、リーダライタ100は、同じ法N(161)と公開指数E(180)とを保持している。RSAアルゴリズムの特徴により、0以上N−1以下の任意の整数Mについて、下式の関係が成り立つ。
M =(M^D)^E mod N ・・・・・・・・・・・・・・・・・ (式9)
メッセージM(110)に対し、秘密指数D(162)を指数とするべき乗を施し、さらに公開指数E(180)を指数とするべき乗を施し、法N(161)の剰余を求めれば、元のメッセージM(110)が再現される。結果として、スマートカード120を持つユーザの秘密指数D(162)は、ディジタル署名C(111)を、C=M^D mod Nとして生成することができ、ディジタル署名C(111)は、V=C^E mod Nを計算し、算出されたVを元のメッセージM(110)と照合することによって、検証されることができる。真正のディジタル署名C(111)については、C^E=(M^D)E=M mod Nが成り立ち、秘密指数D(162)を知ることなく真正のディジタル署名を生成する方法は、知られていない。したがって、秘密指数Dを漏洩から守ることが、特に重要である。
以下の認証プロトコルには、このような性質を利用することができる。まず、スマートカード120はアクセス要求プロトコルを送信する(ステップ190)。リーダライタ100は、0以上N−1以下のランダムなメッセージM(110)を生成し(ステップ191)、スマートカード120に送信する。スマートカード120は、ディジタル署名C(111)を、C=M^D mod Nとして生成し、リーダライタ100に送り返す。リーダライタ100は、受信したディジタル署名C(111)から、V=C^E mod Nを計算し(ステップ193)、算出されたVを元のメッセージM(110)と比較する(ステップ194)。スマートカード120からのアクセス要求は、算出されたVと元のメッセージM(110)が等しいときにのみ許可され(ステップ196)、異なるときには拒否される(ステップ195)。
RSA演算を保護するためには、いくつかの対策が必要である。
<RSA演算の比較例> 実施形態1の詳細な説明の前に、比較例として、RSA暗号演算における一般的な実装形態について説明する。
図5は、RSA暗号演算におけるランダム化による保護動作を表すフローチャートである。メッセージM(110)はべき剰余演算の基数として入力され、さらに、秘密指数D(162)と法N(161)、ブラインディング要素Φ(N)163が入力される(ステップ200)。RNG(乱数発生器)123により、3つの64ビット乱数r1、r2、r3を生成する(ステップ201)。その後、入力された基数M,指数D,法Nはそれぞれ以下のようにランダム化される。
ステップ202; ランダム化されたD’は、D’=D+r1×Φ(N)として算出される。ここで、Φ(N)はブラインディング要素163である。ランダム化されたD’は、コプロセッサ124によって乗算器142と加算器143を使って算出され、中間データ170の1つとしてRAM127に格納される。
ステップ203; ランダム化されたN’は、N’=r3×Nとして、コプロセッサ124によって乗算器142を使って算出され、中間データ170の1つとしてRAM127に格納される。ランダム化されたM’は、M’=M+r2×Nとして、コプロセッサ124によって乗算器142と加算器143を使って算出され、中間データ170の1つとしてRAM127に格納される。
ステップ204; ランダム化された署名C’は、C’=M’^D’ mod N’として、コプロセッサ124によってべき剰余140を使って算出され、結果はRAM127に格納される。
ステップ205; 最終的には、ディジタル署名Cは、C=C’ mod Nとして、コプロセッサ124によってモジュラリダクション144を使って算出される。算出されたディジタル署名Cは、UART121を介してリーダライタ100に送信される。
ステップ202と203におけるランダム化は、差分電力解析のような攻撃に対しては、耐性を持つことが、非特許文献1などによって知られている。しかし、非特許文献2に記述されている攻撃に対しては、耐性が十分ではない可能性がある。そこで、上記のRSA暗号演算におけるランダム化による保護動作について、さらに詳しく検討する。
図6は、RSA暗号演算におけるべき乗演算の動作を表すフローチャートである。これは、図5に示したRSA演算におけるステップ204の一般的な実装形態の一つである。べき乗演算はRAM127に中間データ170として格納されるC’[0]とC’[1]の二つのワークスペース変数を使用して実行される。C’[0]はダミー累算値であり、C’[1]はべき乗の累算値である。まず、C’[0]=1、C’[1]=1に初期化される(ステップ301)。ステップ302、310、313によって、ループカウンタをiとするn回のループ処理が構成される。ここで、nは指数D’のビット長である。2進数表示された指数D’の各桁dn−1,dn−2,…d,dを走査(スキャン)する動作に対応する。ループ内では、以下の2つのステップの演算を実行する。
ステップ311; C’[1]=C’[1]^2 mod N’
ステップ312; C’[d]=C’[1]×M’ mod N’
ステップ312では、d=0のとき、演算結果がダミー累算値であるC’[0]に代入される。C’[0]は、以降、参照されることはなく演算結果は破棄されることになり、ステップ312の剰余乗算はダミーとして実行されたことになる。一方、d=1のときは結果がC’[1]に格納され、ステップ312の演算はダミーでない。指数D’の各桁の走査(スキャン)に対応するn回のループ処理が完了した時点で、C’[1]には、M’^D’ mod N’が算出され、格納されることになる(ステップ320)。
このダミー演算のおかげで、アルゴリズムの実行タイミングは入力データから独立しているので、(例えば、dが0でも1でも同じ演算が実行されるので、)差分電力解析のような攻撃に対して耐性を持つ。しかし、この演算過程には、演算の間の衝突が発生することが分かった。このため、非特許文献2に記述されている攻撃に対しては、耐性が十分ではない可能性がある。その理由を以下に示す。
図7は、RSA暗号演算のべき乗演算における演算の間の衝突を示す説明図である。ループのステップiと次のステップi−1について、図6のフローチャートのステップ311と312について、実行される演算の種類と入出力の値を示したものである。
ステップiでC’[1]=X、C’[0]=Y、d=1と仮定すると、(a)に示されるように、ステップiにおける剰余乗算(2乗)の入力はXとXであり、出力はX^2である(ステップ311)。次の剰余乗算の入力はX^2とM’であり、出力はX^2×M’である。次のステップi−1における剰余乗算(2乗)の入力はX^2×M’とX^2×M’であり、出力は(X^2×M’)^2である(ステップ311)。
これに対し、ステップiでC’[1]=X、C’[0]=Y、d=0と仮定すると、(b)に示されるように、ステップiにおける剰余乗算(2乗)の入力はXとXであり、出力はX^2である(ステップ311)。次の剰余乗算の入力はX^2とM’であり、出力はX^2×M’である。しかし、この代入先は、C’[1]ではなく、ダミー累算値C’[0]でありから、次のステップi−1における剰余乗算(2乗)の入力はX^2とX^2であり、出力はX^4である(ステップ311)。
ステップiの剰余乗算とステップi−1の剰余乗算(2乗)でd=1のときは入力が異なり、d=0のときは入力が同じであることが分かる。剰余乗算器141の一方の入力値が連続する実行ステップで変化しない場合には、その2回目の演算のための消費電力は、通常より低くなる。これは、剰余乗算器141の入力はレジスタにラッチされており、剰余乗算器141の消費電力はラッチされている入力のうち何ビットが反転したかに依存して増減するからである。したがって、このような入力レジスタの内容が変化しない場合には、消費電力は低くなる。その結果、消費電力の大小を観測することができれば、d=1かd=0か、即ち指数D’のi番目のビットの値を検知することができることになる。このような消費電力の大小が、検知可能か否かは、同時に実行されている処理による消費電力を含めた全体の消費電力に占める、剰余乗算器141の消費電力の比率に依存する。しかし、C’[0]とC’[1]が中間データ170としてRAM127に格納されており、それらが演算のために、コプロセッサ124に内蔵されるべき剰余演算器141に、バス128を介して転送されるとすれば、その消費電力は無視できる程度に小さいとは考えられず、外部から観測される可能性がある。このため、非特許文献2に記述されている攻撃に対しては、耐性が十分ではない可能性がある。
<解決手段; RSA暗号のセキュアなべき乗演算(中間データの改変)>
以上述べてきた問題を解決するための、実施形態1に係る半導体装置1の構成とその動作について、詳細に説明する。
べき乗演算を含むRSA方式の演算処理を実行可能な半導体装置であって、累算値C’[1]を格納可能な記憶装置127と、加算器143と、剰余演算器141とを備え、以下の動作を可能に構成される。
前記べき乗演算は、第1ステップ431と第2ステップ432とを含むループ処理であって、前記べき乗演算の指数(D’)の2進数表現における各桁(dn-1,…d0)に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算される。第1ステップ431において、累算値C’[1]を記憶装置127から読み出して任意値N’とともに加算器143に入力し、出力される和を記憶装置127に書き戻すことにより累算値C’[1]を更新する。第2ステップ432において、累算値C’[1]を記憶装置127から読み出して剰余演算器141に入力し、出力される剰余演算の結果を記憶装置127に書き戻すことにより累算値C’[1]を更新する。任意値N’は、第1ステップ431において累算値C’[1]を異なる値に更新する値に設定される。
図8は、実施形態1のべき乗演算の動作を表すフローチャートである。これは、図5に示したRSA演算におけるステップ204を実装する一つの実施形態であり、図6に示した一般的な実装形態で発生する問題を解決することができる。入力(ステップ420)、ダミー累算値C’[0]と累算値C’[1]の初期化(ステップ421)、ループ処理(ステップ422、430、434)、及び出力(ステップ440)は、図6に示した一般的な実装形態の対応するステップと同様である。一方、ループ処理内は下記の3ステップで構成される。
ステップ431; C’[1]=C’[1]+N’
ステップ432; C’[1]=C’[1]^2 mod N’
ステップ433; C’[d]=C’[1]×M’ mod N’
ステップ432と433は、それぞれ、図6のステップ311と312と同様であるが、その前に、ステップ431を実行する。ステップ431は、非モジュラの加算器143によって実行される。ステップ431を実行することにより、累算値C’[1]の値を変化させる。N’は剰余の法であるから、これを累算値C’[1]に加算しても、ステップ432と433の演算結果には影響を与えない。即ち、一般に下式が成り立つ。
(X+N’)×Y mod N’=X×Y mod N’ ・・・・・・ (式10)
換言すれば、法N’を剰余乗算器141の入力に加算しても、剰余乗算の演算結果には影響しない。一方、べき乗のステップの相互関係は、排除することができる。累算値C’[1]の値自体は、ループ毎に変化するので、上で指摘したような、連続するループで同じ値がべき剰余演算器141に入力されるという問題は、解決される。加算する値は剰余の法N’の倍数であれば、同様の効果を奏する。これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を向上することができる。しかし、発明者がさらに詳しく検討したところ、別の演算の間の衝突が残存していることがわかった。
図9は、実施形態1のべき乗演算における演算の間の衝突を示す説明図である。ループのステップiと次のステップi−1について、図8のフローチャートのステップ431からステップ433について、実行される演算の種類と入出力の値を示したものである。
ステップiでd=1と仮定すると、(a)に示されるように、ステップiにおける加算の入力はXとN’であり(ステップ431)、剰余乗算(2乗)の2つの入力はX+N’であり、出力はX^2である(ステップ432)。次の剰余乗算の入力はX^2とM’であり、出力はX^2×M’である(ステップ433)。次のステップi−1における加算の入力はX^2×M’とN’であり(ステップ431)、剰余乗算(2乗)の2つの入力はX^2×M’+N’であり、出力は(X^2×M’)^2である(ステップ432)。
これに対し、ステップiでd=0と仮定すると、(b)に示されるように、ステップiにおける加算の入力はXとN’であり(ステップ431)、剰余乗算(2乗)の2つの入力はX+N’であり、出力はX^2である(ステップ432)。次の剰余乗算の入力はX^2とM’であり、出力はX^2×M’である(ステップ433)。d=0であるので、出力X^2×M’はダミー累算値C’[0]に書き込まれ、累算値C’[1]は更新されない。次のステップi−1における加算の入力はX^2とN’であり(ステップ431)、剰余乗算(2乗)の2つの入力はX^2+N’であり、出力はX^4である(ステップ432)。
ステップiでd=0のとき、ステップiの剰余乗算141の一方の入力と、ステップi−1の非モジュラ演算の加算器143の一方の入力が、ともに同じ値X^2となって、演算の間の衝突が発生している。この場合は、入力値は同じ値であるが、実行される演算は異なる。したがって、コプロセッサ124の実際の実装状態に依存するとは言え、秘密データの漏洩が発生するか否かは定かではない。例えば、仮に加算器142と剰余乗算器141が同じレジスタを共有して入力値をラッチする場合、入力値が変化しないために加算器142の消費電力は低くなる。しかし、加算器142と剰余乗算器141が入力値をラッチするために同じレジスタを共有しない場合には、レジスタの消費電力は、衝突によって影響されることはなく、したがって、本実施形態によれば、非特許文献2に記述されている攻撃に対して、耐タンパー性を向上することができる。
〔実施形態2〕<RSA暗号のセキュアなべき乗演算(中間データのランダム化)>
図10は、実施形態2のべき乗演算の動作を表すフローチャートである。これは、図5に示したRSA演算におけるステップ204のべき剰余演算を実装する別の実施形態であり、図6に示した一般的な実装形態で発生する問題を解決することができる。入力(ステップ400)、ダミー累算値C’[0]と累算値C’[1]の初期化(ステップ401)、ループ処理(ステップ402、410、419)、及び出力(ステップ420)は、図6に示した一般的な実装形態の対応するステップと同様である。一方、ループ処理内において、図10のステップ414の剰余2乗乗算は、図6のステップ311に対応し、図10のステップ418の剰余乗算は、図6のステップ312に対応する。
図6に示した一般的な実装形態との違いは以下の通りである。
ステップ414の剰余2乗乗算の前に以下の3ステップが実行される。
ステップ411; 64ビットの乱数aを生成(RNG123)
ステップ412; N”=a×N’(非モジュラ乗算器142)
ステップ413; C’[1]=C’[1]+N”(加算器143)
ステップ418の剰余乗算の前に以下の3ステップが実行される。
ステップ415; 64ビットの乱数bを生成(RNG123)
ステップ416; N”=b×N’(非モジュラ乗算器142)
ステップ417; C’[1]=C’[1]+N”(加算器143)
図11は、実施形態2のべき乗演算における演算の間の衝突を示す説明図である。ループのステップiと次のステップi−1について、図10のフローチャートのステップ412からステップ418について、実行される演算の種類と入出力の値を示したものである。ステップiでd=1と仮定したときの入出力値の変化を(a)に、ステップiでd=0と仮定したときの入出力値の変化を(b)に、それぞれ示す。
(b)に示したd=0のとき、ステップiの剰余除算(ステップ418)の入力1と、ステップi−1の加算(ステップ413)の入力1がともにX^2+b×N’となり、衝突が生じる。図8と図9に示した実施形態1の場合と比較すると、衝突の発生/不発生がdの値に依存する点と、衝突したデータに対するコプロセッサ124の実行する演算の種類は同じであるが、演算の実行シーケンスに違いがある。図8と図9に示した実施形態1の場合は、コプロセッサ124は、衝突したデータに対する剰余乗算(ステップ433)と加算(ステップ431)を連続して実行するのに対し、図10と図11に示した本実施形態2では、衝突したデータに対する剰余除算(ステップ418)と加算(ステップ413)との間に非モジュラ乗算(ステップ412)が実行される点で異なる。仮に剰余除算(ステップ418)と加算(ステップ413)とが、同じレジスタを共有して入力値を保持する実装を採ったとしても、そのレジスタの値は、その2つの演算に挟まれる非モジュラ乗算(ステップ412)の入力aによって、一旦書き換えられるので、演算の間の衝突による消費電力の低下は観測されない。
これにより、べき乗演算を含むRSA/DSA方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性をさらに向上することができる。
本実施形態2は、図10と図11に例示した形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。例えば、乱数aとbは、同じ値でもよく、ループの前に1度だけ生成されても良く、またさらに、予め生成された乱数をプログラムの中にハードコードとして埋め込んでおいてもよい。a=b=1とした場合には、実施形態1となる。同様に、ステップ413と417の「+a×N’」と「+b×N’」は、「+N’」の繰り返しで実装してもよい。換言すれば、本実施形態は、繰り返しループの中の加算の回数を、1ループあたり1回または2回に限定するものではなく、任意の整数の非モジュラ乗算を含むこともできる。
〔実施形態3〕<RSA暗号のセキュアなべき乗演算(ダミー中間データ)>
実施形態3では、さらに耐タンパー性を向上した実施の形態を示す。
まず、実施形態2によってもなお残存する問題点について、以下に説明する。
実施形態2では、仮に演算の間の衝突が発生しても、その影響が観測不能とすることができるために、耐タンパー性を向上することができる実施形態を示した。しかしながら、衝突の発生自体を抑えるわけではないので、この実施形態では、ハードウェアのアーキテクチャによっては、なお秘密データを漏洩させる可能性が潜在する。例えば、この実施形態2では、コプロセッサ124の加算器143と剰余乗算器141は、共に、バス128を介してRAM127からデータをロードする。バス128がプリチャージバスである場合、ステップ418の剰余乗算のためのデータのロードと、ステップ413の加算のためのデータのロードは、その値が同じであるために、バス128の消費電力は同じ値となる。暗号演算の場合、データは多倍長であるため、データの転送には複数サイクルを要する。その結果、ステップ418とステップ413の入力データのロードのときに、消費電力に同じ波形、実際には自己相関の高い波形が観測される可能性がある。衝突の発生/不発生がdの値に依存するため、観測された消費電力に発生する波形の自己相関が高いか否かによって、dの値を検知することができる。ステップ418とステップ413で自己相関が高い波形が観測されたときはd=0であり、自己相関が高くない波形が観測されたときはd=1であると、判断することができるからである。
以上は、あくまでも実施形態2に内在する、データ漏洩の潜在的な可能性を示すに過ぎず、この可能性はハードウェアアーキテクチャに強く依存する点に注意すべきである。実施形態2において適切なハードウェアアーキテクチャを採用すれば、データ漏洩の潜在的な可能性を、実用上無視できる程度に低く抑えることができる。例えば、バスをランダム化または暗号化し、または加算器143と剰余乗算器141のデータの入出力のためのバスを、それぞれ独立に設けるなどの対策により、上述のような攻撃は、無効化することができる。
図12は、実施形態3のべき乗演算の動作を表すフローチャートである。これは、図5に示したRSA演算におけるステップ204を実装する別の実施形態であり、図8と図10に示した実施形態1と実施形態2とをさらに改善するものである。図12を引用して説明する実施形態3に係る実施の形態は、例えばバスのランダム化などの特別なハードウェアアーキテクチャを前提としない点で好適である。
入力(ステップ500)、ダミー累算値C’[0]と累算値C’[1]の初期化(ステップ501)、ループ処理(ステップ502、510、515)、及び出力(ステップ520)は、図6に示した一般的な実装形態の対応するステップと同様である。一方、ループ処理内において、図12のステップ511、512及び514は、それぞれ図8のステップ431、432及び433に対応する。本実施形態3では、ステップ514の前に、d=1のときにはダミー累算値C’[0]をC’[0]=C’[1]+N’のように更新し、d=0のときには累算値C’[1]をC’[1]=C’[1]+N’のように更新する、ステップ513を追加している。
図13は、実施形態3のべき乗演算における演算の間の衝突を示す説明図である。ループのステップiと次のステップi−1について、図12のフローチャートのステップ511からステップ514について、実行される演算の種類と入出力の値を示したものである。ステップiでd=1と仮定したときの入出力値の変化を(a)に、ステップiでd=0と仮定したときの入出力値の変化を(b)に、それぞれ示す。
(a)に示したd=1と(b)に示したd=0の両方で、ステップiの加算(ステップ513)の入力1と剰余乗算(ステップ514)の入力1がともにX^2となり、衝突が生じる。しかし、衝突はd=1とd=0のときの両方で生じるのでセキュリティには問題がない。
また、下記のような演算の間の衝突がなお存在する。
=1(a)のとき、ステップiの剰余除算(ステップ514)の出力と、ステップi−1の加算(ステップ511)の入力1がともにX^2×M’となり、衝突が生じる。
=0(b)のとき、ステップiの加算(ステップ513)の出力と、ステップi−1の加算(ステップ511)の入力1がともにX^2+N’となり、衝突が生じる。
しかしながら、これらの衝突を外部から観測することは実用上不可能であって、セキュリティには問題がない。その理由は、以下の3点である。
非モジュラ演算の加算は、剰余乗算などのモジュラ演算に比べ非常に短く、それによって、攻撃の機会のウィンドウを縮小する。
非モジュラ演算の加算と剰余乗算は本質的に異なり、またそれぞれ強相関を示さない異なったハードウェアによって演算される。
メモリの入力動作と出力動作の物理的な違いによって、入力値と出力値の相関関係は消滅する。
本実施形態3は、図12と図13に例示した形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。例えば、図12においては、べき乗演算のためのループ1回あたり、累算値に対して2度の剰余の加算が実行されるが、実施形態1(図8)に示したように、1回だけの加算でもよく、2回以上の加算でも、さらに複数回の加算の代わりに剰余の倍数を加算してもよい。この複数回は乱数の回数であってよく、非モジュラ加算器による実装だけではなく、非モジュラ乗算器を使って実装される形態を含む。
〔実施形態4〕<ECC暗号のセキュアなべき乗演算>
図14は、代表的な実施の形態に係る半導体装置の構成、及び、それをECC演算を行うスマートカードに搭載したシステムの構成例を表すブロック図である。
図3に示した実施形態1に係る半導体装置の構成、及び、それをRSA暗号演算を行うスマートカード120に搭載したシステムと同様に、スマートカード620は、UART621をインターフェースとしてリーダライタ600と接続され、通信を行う。非接触の場合は、UART621に代えて無線通信インターフェースを備えればよい。スマートカード620は、スマートカード120と同様に、UART621、CPU622、乱数発生器(RNG)623、コプロセッサ624、ROM625、EEPROM626、及び、RAM627を備え、バス628を介して互いに接続されている。RSA演算の代わりに楕円曲線暗号(ECC:Elliptic Curve Cryptography)を行う。数学的な慣例上、加法は乗法の代わりにECC演算を表すために使われる。例えば、楕円曲線群の演算は「指数」よりも「べき乗」と「スカラー」よりも「乗算」、「2乗」と「スカラー倍演算」よりも「加算」または「2倍算」の楕円曲線点として参照されることがしばしばである。しかし、二つの表記法は等値であり、スカラー倍演算は実際、楕円曲線点によって構成される群ではべき乗である。ECCのついての詳細は、例えば下記の公知文献に記載されている。
Darrel Hankerson,Alfred Menezes,Scott Vanstone: "Guide to Elliptic Curve Cryptography",Springer
これに伴って、コプロセッサ624は、群演算を行う、べき剰余演算器640、剰余乗算器641、モジュラリダクション器644、及び、非モジュラ演算器648として乗算器642と加算器643とを備える他、さらに、ECCスカラー倍演算645、楕円曲線点加算(ECADD)646、及び、楕円曲線点2倍算(ECDBL)647を実行可能に構成される。ROM625には、CPU622で実行されるプログラム650、共通データ651、ECCのプログラム652が格納されている。これらは、CPU622の制御により、コプロセッサ624にも供給されることができる。EEPROM626には、スマートカードのデータ660、スカラー(d)661、法(p)662、及び、曲線のパラメータ663が格納されている。RAM627には、RSA演算の中間データ670と中間データの一つである、共通点(Q=d×P)611が格納されている。
スマートカード620はUART621を介して、リーダライタ600と通信する。一例としてEC Diffie-Hellman(ECDH)式の鍵交換プロトコルについて説明する。リーダライタ600は、公開鍵を表わす、点(P)610を送信する。スマートカード620は、EEPROM626に格納されている、秘密鍵を表すECCスカラー(d)661と、ECCパラメータである曲線のパラメータ663と、楕円曲線の定義体として用いている有限体(「体」は群論における演算によって定義される集合の一種、英語では“field”)の剰余の法(p)662とを使用して、共有点(Q=d*P)611を生成する。生成された共有点(Q=d*P)611は、RAM627に格納され、スマートカード620とリーダライタ600で共有される共通鍵を導出するなどのさまざまな目的で、後に使用可能である。
ECC演算は、CPU622がROM625に格納されているプログラム652を実行することによって、コプロセッサ624を使用しながら実行する演算によって実現され、また、その演算途中の中間データ670はRAM627に格納される。ECC演算は、時間のかかる多倍長演算を伴うため、演算を速めるためにコプロセッサ624を備えるのが好適であり、図3のコプロセッサ124にサポートされる演算に加え、ECCスカラー倍演算645、楕円曲線点加算(ECADD)646、及び、楕円曲線点2倍算(ECDBL)647の各演算を実行可能に構成される。楕円曲線点加算(ECADD)646と楕円曲線点2倍算(ECDBL)647は、図19と図20を引用して後述するように、剰余乗算641、モジュラ加減算649、及び非モジュラ演算648を使った、固定コードのシーケンスとして実装される。
一般にECC演算を保護するためには、いくつかの対策が必要である。
<ECC演算の比較例> 実施形態4の詳細な説明の前に、比較例として、ECC演算における一般的な実装形態について説明する。
図15は、ECC演算におけるランダム化による保護動作を表すフローチャートである。
座標(xp,yp)で表される点(P)610がリーダライタ600から入力され、スカラー(d)661と法(p)662がEEPROM626から読み出される(ステップ700)。RNG623を使ってランダムな座標zを生成する(ステップ701)。座標(xP,yP)はそれぞれランダムな座標zを乗じられ、p(662)を法とする剰余演算により、ランダム化された射影座標(xP’,yP’)が算出される(ステップ702)。ランダム化された点P’の座標は(xP’,yP’,z)となる(ステップ703)。
次に共有点(Q=d*P)611の座標を算出する。コプロセッサ624によるスカラー倍演算645により、Q’=d×P’=(xQ’,yQ’,zQ’)を求め、結果はRAM627に格納される(ステップ704)。Q’が射影座標として表されるため、アフィン座標に変換されなければならない。モジュラ逆数1/zQ mod pはモジュラべき乗640を使用して、zQ’^(p−2) mod pとして演算される(ステップ705)。最後に、座標xQ’とyQ’は、剰余乗算641を使用して逆数zQ’を乗じられ、アフィン座標xQとyQが求められ(ステップ706)、共有点Q=(xQ,yQ)=d×Pが出力される(ステップ710)。
以上述べてきたランダム座標zによるランダム化は、差分電力解析のような攻撃に対しては、耐性を持つことが、非特許文献1などによって知られている。しかし、非特許文献2に記述されている攻撃に対しては、耐性が十分ではない可能性がある。そこで、上記のECC演算におけるランダム化による保護動作について、さらに詳しく検討する。
図16は、ECC演算におけるべき乗演算の動作を表すフローチャートである。これは、図15に示したECC演算におけるステップ704の一般的な実装形態の一つであり、モンゴメリラダー法のスカラー倍演算を基にしている。べき乗演算はRAM627に中間データ670として格納されるQ’[0]とQ’[1]の二つのワークスペース変数を使用して実行される。
Q’[0]とQ’[1]はx,y,zの3つの射影座標として表される楕円曲線点である。図6〜13に記述のモジュラべき乗とは異なり、図16のスカラー倍演算はダミー演算を使用しない。
まず、Q’[0]=P’、Q’[1]=無限点∞に初期化される(ステップ801)。無限点はECDBL(∞)=∞とECADD(P,∞)=Pの楕円曲線の単位元である。
ステップ802、810、813によって、ループカウンタをiとするn回のループ処理が構成される。ここで、nはスカラーd(661)のビット長である。2進数表示されたスカラーd(661)の各桁dn−1,dn−2,…d,dを走査(スキャン)する動作に対応する。ループ内では、以下の2つのステップの演算を実行する。
ステップ811; Q’[d]=ECADD(Q’[d],Q’[NOT(d)])
ステップ812; Q’[NOT(d)]=ECDBL(Q’[NOT(d)])
スカラービットd=1の場合、ECADD646を使用して、Q’[1]にはQ’[0]が加算されてRAM627のQ’[1]に再度格納され(ステップ811)、Q’[0]はECDBL647により2倍算され、RAM627のQ’[0]に再度格納される(ステップ812)。
逆に、スカラービットd=0の場合、ECADD646を使用して、Q’[0]にはQ’[1]が加算されてRAM627のQ’[0]に再度格納され(ステップ811)、Q’[1]はECDBL647により2倍算され、RAM627のQ’[1]に再度格納される(ステップ812)。
スカラーd(661)の各桁の走査(スキャン)に対応するn回のループ処理が完了した時点で、Q’[1]には、d×P’が算出され、格納されることになる(ステップ820)。
この実装形態は、モンゴメリラダー法の特質から、タイミングは入力データから独立しており、いくつかの攻撃に対して耐性がある。しかし、この演算過程には、演算の間の衝突が発生することが分かった。このため、非特許文献2に記述されている攻撃に対しては、耐性が十分ではない可能性がある。その理由を以下に示す。
図17は、ECC演算の比較例のべき乗演算における演算の間の衝突を示す説明図である。ループのステップiと次のステップi−1について、図16のフローチャートのステップ811と812について、実行される演算の種類と入出力の値を示したものである。ステップiでd=1、di−1=1と仮定したときの入出力値の変化を(a)に、ステップiでd=0、di−1=0と仮定したときの入出力値の変化を(b)に、ステップiでd=1、di−1=0と仮定したときの入出力値の変化を(c)に、ステップiでd=0、di−1=1と仮定したときの入出力値の変化を(d)に、それぞれ示す。
図6に示したべき剰余演算とは異なり、dとdi−1のビットパターンに依存することなく発生するので、複数の入力の間の衝突は問題ではないが、入力と出力の間の衝突が問題となることがわかった。
とdi−1の値が同じ値の場合、即ち、d=1、di−1=1(a)とd=0、di−1=0(b)の場合、以下の衝突が発生する。
ステップiのECADDの出力とステップi−1のECADDの入力1
ステップiのECDBLの出力とステップi−1のECADDの入力2及びECDBLの入力。
とdi−1の値が異なる値の場合、即ち、d=1、di−1=0(c)とd=0、di−1=1(d)の場合、以下の衝突が発生する。
ステップiのECADDの出力とステップi−1のECADDの入力2及びECDBLの入力
ステップiのECDBLの出力とステップi−1のECADDの入力1。
とdi−1の値が同じ値か異なる値かによって、衝突の発生パターンが変わるので、逆に衝突の位置を観測することによって、dとdi−1の値が同じ値か異なる値かを推測することができる。
ECC演算の状況は、RSA演算に比べて、一見深刻ではないように見える。なぜなら、衝突は出力と入力の間で発生し、また、ECCのデータ長はRSAの場合よりも短いため、衝突時間が短くなる。しかし、ECADDとECDBLの実行シーケンスの内部をさらに詳しく解析すると、他の衝突の問題も発生することが分かった。
通常のハードウェアアーキテクチャでは、入出力間の衝突を検出することは困難である。入力と出力とは、通常、同じハードウェア資源を共有しないからである。しかし、ECADDとECDBLは、複雑な演算であって、複数のモジュラ演算のシーケンスとして実装されることが多い。特に、もしECADDとECDBLのx、y、zの3出力のうちの1つが、ECADDとECDBLの実行シーケンスの内部では、モジュラ演算の入力として使われる場合には、実際の衝突は入出力間ではなく、複数の入力間の衝突となる。
図18は、比較例のべき乗演算の動作を表すフローチャートであり、図16のステップ811と812におけるECADD646とECDBL647の一般的な実装例である。この実装例は、剰余乗算器641とモジュラ加減算649を使う。モジュラ加減算649におけるモジュラ加算x+y mod pは、下記のように非モジュラ加減算器643を使って実装することができる。
サブステップ1: w=x+y
サブステップ2: z=w−p
サブステップ3: if z>=0,then zを出力 ; else wを出力
wが出力される場合には、サブステップ2は不要であり、ダミー演算となる。
同様に、モジュラ減算x−y mod pは、下記のように非モジュラ加減算器643を使って実装することができる。
サブステップ1: w=x−y
サブステップ2: z=w+p
サブステップ3: if w>=0,then wを出力 ; else zを出力
この場合も、wが出力される場合には、サブステップ2は不要であり、ダミー演算となる。
また、同様の実装が剰余乗算にも適用することができ、その場合も最後の引き算は、結果的にダミー演算となる場合がある。
図18では、演算の間の衝突を丸印で示す。また、単純化のため、ECADDの出力yRと、ECADDの入力yPとyQ、及び、ECDBLの出力yPとの間の衝突のみを示し、他の衝突は図示を省略する。
ECADDの出力yRは、以下の複数の地点で使用される。
ECDBLのステップ7における剰余乗算の入力1、
ECDBLのステップ8における剰余乗算の入力1、
ECDBLのステップ14における剰余乗算の入力1と入力2、
=1のときのECADDのステップ7における剰余乗算の入力1、
=0のときのECADDのステップ7における剰余乗算の入力2。
以上のように、出力値yRがECADDとECDBLの後続ステップにおける複数の入力値との間で、衝突を発生させることがわかる。さらに悪いことに、出力値yRは出力値としてだけではなく、内部では入力値として使われることもある。例えば、ステップ902に、ECADDのステップ21におけるモジュラ減算649の非モジュラ加減算器643によるさらに詳細な実装例を示す。ステップ902のサブステップ3ではyRが正であればwは破棄されるが、出力値yRはサブステップ2の入力にも使われることになる。
以上検討したように、RSA演算とは異なり、ECC演算では衝突は多数の地点で発生することがわかった。これは、ECC演算ではデータ長が短いという優位性を減殺するものである。また、RSA演算の場合と同様に、いくつかの演算の入力の間で、衝突が発生することがわかった。したがって、非特許文献2に記述されているような攻撃に対しては、ECC演算はRSA演算と同様に、耐性が十分ではない可能性があることがわかった。
<解決手段; ECC暗号のセキュアなべき乗演算>
以上述べてきた問題を解決するための、実施形態4に係る半導体装置1の構成とその動作について、詳細に説明する。実施形態4に係る半導体装置1の構成は図14に示す通りであり、図15に示したランダム化による保護も、そのまま適用することができる。
図19は、べき乗演算の動作を表すフローチャートであり、図16のステップ811と812におけるECADD646とECDBL647の実施形態4による実施の形態である。図19に示すECADD646とECDBL647の実施形態は、図16に示すようなスカラー乗算アルゴリズムと組み合わせて実装される。図18に示した一般的な実装の形態からの改善点は以下の通りである。
ステップ1001において、入力点P=(xP,yP,zP)及びQ=(xQ,yQ,zQ)の座標に、値aが乗算される。群演算ECADD646に先立って、入力をaとする非モジュラ乗算642が実行される。
同様にステップ1021において、入力点P=(xP,yP,zP)の座標に、値bが乗算される。群演算ECDBL647に先立って、入力をbとする非モジュラ乗算642が実行される。
ステップ1002とステップ1022における全ての法pの剰余減算は、ダミー演算を含まない、値pの非モジュラ演算に、機械的に置き換えられている。例えばECADDのステップ21では、図18の剰余除算yR=yR−t3 mod pが、図19のECADDのステップ21のように、ダミー演算を使わない非モジュラ演算yR=yR−t3+pに置き換えられている。ECADDのステップ3、10、14、15、16、19、及び、ECDBLのステップ17、18、20、22も同様である。
ステップ1002とステップ1022における全ての法pの剰余加算は、非モジュラ演算に、機械的に置き換えられている。ECDBLのステップ4、5、6、9、10がこれにあたる。
前2者の改善点である、ステップ1001とステップ1021において、それぞれ、座標に値aとbを乗じたことにより、出力と入力との衝突はなくなり、入力の間の衝突に限定することができる。図18に示した比較例では、繰り返しステップiの出力xR,yR,zRが次のステップi−1の入力xP,yP,zPと同じ値となる可能性があるので、衝突が発生していたが、座標に値a、bを乗じることにより、各ステップで必ず異なる座標値となるため、出力と入力の衝突は解消する。したがって、図18に示した比較例に対して、より少ない地点のみで、衝突が発生することとなる。ここで、値aとbは、それぞれ、0か1以外の値であれば任意の固定値でよく、乱数である必要もないため、プログラムで定数として保持される固定値として実装することもできる。
他の2つの改善点である、ダミー演算のない非モジュラ演算への置き換えにより、演算の間の衝突の発生を、ステップ1002とステップ1022の剰余乗算の出力と、ステップ1001とステップ1021の非モジュラ演算の入力の間でのみに抑えることができる。
まとめると、以上の改善により、演算の間の衝突は、ごく限られた数のごく短時間の演算の期間に発生し、且つ、入出力間のみの発生に抑えることができる。
これにより、べき乗演算を含むECC方式の演算処理を実行可能な半導体装置において、演算の間の衝突を利用した攻撃に対する、耐タンパー性を著しく向上することができる。
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。例えば、値aとbは、毎回生成される乱数として与えてもよく、aとbは同じ値でも良い。また、他の実施形態と同様に、耐タンパー性の向上の効果は、ハードウェアアーキテクチャに依存するので、ステップ1001とステップ1021を実装しない実施形態によっても、一定の効果を期待することができる。また、ステップ1001とステップ1021において、非モジュラ乗算の代わりに法p(662)またはpの倍数の加算を用いても、同様の効果を得られる。
1、120、620 半導体装置(LSI、マイコン、スマートカード)
2、127、627 記憶装置(レジスタ、RAM)
3、143、642 非剰余演算器(加算器、乗算器)
4、141、641 群演算器(剰余演算器)
5、170、670 累算値(中間データ)
6 任意値
7 ループ制御部
100、600 リーダライタ
110 メッセージM
610 点P
111 署名C
121、621 UART
122、622 CPU
123、623 乱数発生器(RNG)
124、624 コプロセッサ
125、625 ROM
126、626 EEPROM
127、627 RAM
128、628 バス

Claims (20)

  1. べき乗演算を含む公開鍵暗号方式の演算処理を実行可能な半導体装置であって、
    累算値を格納可能な記憶装置と、非剰余演算器と、群演算器とを備え、
    前記べき乗演算は、第1ステップと第2ステップとを含むループ処理であって、前記べき乗演算の指数の2進数表現における各桁に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算され、
    前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して任意値とともに前記非剰余演算器に入力し、出力される積または和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第2ステップにおいて、前記累算値を前記記憶装置から読み出して前記群演算器に入力し、出力される群演算の結果を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記任意値は、前記第1ステップにおいて前記累算値を異なる値に更新する値に設定される、半導体装置。
  2. 請求項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記非剰余演算器は加算器であり、前記群演算器は剰余演算を実行可能な剰余演算器であり、前記任意値は前記剰余演算の法の倍数であり、
    前記第1ステップにおいて、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する、半導体装置。
  3. 請求項2において、前記記憶装置はさらにダミー累算値を格納可能であり、
    前記ループ処理はさらに第3ステップを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第3ステップにおいて、前記任意値と前記第2ステップで更新された前記累算値とを前記記憶装置から読み出して前記剰余演算器に入力し、前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  4. 請求項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記非剰余演算器は加算器であり、前記群演算器は剰余演算を実行可能な剰余演算器であり、前記任意値は前記剰余演算の法に乱数を乗じた値であり、
    前記第1ステップにおいて、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する、半導体装置。
  5. 請求項1において、前記公開鍵暗号方式はRSA方式またはDSA方式であり、前記任意値を第1任意値とし、前記記憶装置はさらにダミー累算値を格納可能であり、前記非剰余演算器は加算器であり、前記群演算器は剰余演算を実行可能な剰余演算器であり、
    前記ループ処理は、さらに第4ステップと第5ステップと第6ステップと第7ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第4ステップにおいて、前記剰余演算の法と第1乱数の積を前記第1任意値として算出し、
    前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して前記第1任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第5ステップにおいて、前記法と第2乱数の積を第2任意値として算出し、
    前記第6ステップにおいて、前記累算値を前記記憶装置から読み出して前記第2任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第7ステップにおいて、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  6. 請求項2において、前記記憶装置はさらにダミー累算値を格納可能であり、
    前記ループ処理はさらに第8ステップと第9ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第8ステップにおいて、前記累算値を前記記憶装置から読み出して前記任意値とともに前記加算器に入力し出力される和を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込み、
    前記第9ステップにおいて、前記第2ステップで更新された前記累算値を前記記憶装置から読み出して前記任意値とともに前記剰余演算器に入力し、前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  7. 請求項2において、前記記憶装置はRAMであり、前記加算器と前記剰余演算器を含むコプロセッサを備え、前記RAMは前記コプロセッサによりバスを介してアクセス可能に構成される、半導体装置。
  8. 請求項1において、前記公開鍵暗号方式は楕円曲線暗号方式であり、前記非剰余演算器は乗算器であり、前記群演算器は剰余演算を実行可能な剰余演算器であり、前記累算値を第1累算値とし、前記記憶装置はさらに第2累算値を格納可能であり、
    前記ループ処理は、前記第1ステップと前記第2ステップをサブステップとして含む第10ステップと第11ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第10ステップにおいて、前記第1累算値と前記第2累算値とを前記記憶装置から読み出して、楕円曲線点加算を行い、前記楕円曲線点加算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記第1累算値を更新するか、または、前記記憶装置に前記第2累算値として書き込み、
    前記第11ステップにおいて、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記第1累算値または前記第2累算値を読み出して、楕円曲線点2倍算を行って書き戻す、半導体装置。
  9. 請求項8において、前記任意値を第1任意値とし、前記第11ステップは、サブステップとして第12ステップを含み、
    前記第1ステップにおいて、前記第10ステップの前記楕円曲線点加算における2つの入力点の座標の値のそれぞれに前記第1任意値を乗じ、
    前記第12ステップにおいて、前記第11ステップの前記楕円曲線点2倍算における1つの入力点の座標の値のそれぞれに第2任意値を乗じる、半導体装置。
  10. 請求項8において、前記記憶装置はRAMであり、前記乗算器と前記剰余演算器を含むコプロセッサを備え、前記RAMは前記コプロセッサによりバスを介してアクセス可能に構成される、半導体装置。
  11. 請求項10において、CPUと前記CPUで実行可能なプログラムを格納する不揮発性メモリを備え、前記プログラムは、前記第1任意値と前記第2任意値をプログラムコードの一部に含む、半導体装置。
  12. べき乗演算を含むRSA方式の演算処理を実行可能な半導体装置であって、
    累算値を格納可能な記憶装置と、加算器と、剰余演算器とを備え、
    前記べき乗演算は、第1ステップと第2ステップとを含むループ処理であって、前記べき乗演算の指数の2進数表現における各桁に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算され、
    前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第2ステップにおいて、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記任意値は、前記第1ステップにおいて前記累算値を異なる値に更新する値に設定される、半導体装置。
  13. 請求項12において、前記記憶装置はさらにダミー累算値を格納可能であり、
    前記ループ処理はさらに第3ステップを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第3ステップにおいて、前記任意値と前記第2ステップで更新された前記累算値とを前記記憶装置から読み出して前記剰余演算器に入力し、前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  14. 請求項12において、前記任意値は前記剰余演算の法に乱数を乗じた値であり、
    前記第1ステップにおいて、前記任意値と前記累算値とを前記記憶装置から読み出して前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新する、半導体装置。
  15. 請求項12において前記任意値を第1任意値とし、前記記憶装置はさらにダミー累算値を格納可能であり、前記ループ処理は、さらに第4ステップと第5ステップと第6ステップと第7ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第4ステップにおいて、前記剰余演算の法と第1乱数の積を前記第1任意値として算出し、
    前記第1ステップにおいて、前記累算値を前記記憶装置から読み出して前記第1任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第5ステップにおいて、前記法と第2乱数の積を第2任意値として算出し、
    前記第6ステップにおいて、前記累算値を前記記憶装置から読み出して前記第2任意値とともに前記加算器に入力し、出力される和を前記記憶装置に書き戻すことにより前記累算値を更新し、
    前記第7ステップにおいて、前記累算値を前記記憶装置から読み出して前記剰余演算器に入力し、出力される剰余演算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  16. 請求項12において、前記記憶装置はさらにダミー累算値を格納可能であり、
    前記ループ処理はさらに第8ステップと第9ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第8ステップにおいて、前記累算値を前記記憶装置から読み出して前記任意値とともに前記加算器に入力し出力される和を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込み、
    前記第9ステップにおいて、前記第2ステップで更新された前記累算値を前記記憶装置から読み出して前記任意値とともに前記剰余演算器に入力し、前記剰余演算器からの出力を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記累算値を更新するか、または、前記記憶装置に前記ダミー累算値として書き込む、半導体装置。
  17. 請求項12において、前記記憶装置はRAMであり、前記加算器と前記剰余演算器を含むコプロセッサを備え、前記RAMは前記コプロセッサによりバスを介してアクセス可能に構成される、半導体装置。
  18. べき乗演算を含む楕円曲線暗号方式の演算処理を実行可能な半導体装置であって、
    第1累算値と第2累算値を格納可能な記憶装置と、乗算器と、剰余演算器とを備え、
    前記べき乗演算は、第1ステップと第2ステップとを含むループ処理であって、前記べき乗演算の指数の2進数表現における各桁に対応する少なくとも1回以上の繰り返しを含む前記ループ処理によって演算され、
    前記第1ステップにおいて、前記第1累算値を前記記憶装置から読み出して任意値とともに前記非剰余演算器に入力し、出力される積を前記記憶装置に書き戻すことにより前記第1累算値を更新し、
    前記第2ステップにおいて、前記第1累算値を前記記憶装置から読み出して前記群演算器に入力し、出力される群演算の結果を前記記憶装置に書き戻すことにより前記第1累算値を更新し、
    前記任意値は、前記第1ステップにおいて前記第1累算値を異なる値に更新する値に設定される、半導体装置。
    前記ループ処理は、前記第1ステップと前記第2ステップをサブステップとして含む第10ステップと第11ステップとを含み、前記べき乗演算の前記指数の2進数表現におけるビット数を繰り返し回数とし、
    前記第10ステップにおいて、前記第1累算値と前記第2累算値とを前記記憶装置から読み出して、楕円曲線点加算を行い、前記楕円曲線点加算の結果を、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記記憶装置に書き戻すことにより前記第1累算値を更新するか、または、前記記憶装置に前記第2累算値として書き込み、
    前記第11ステップにおいて、前記ループ処理における繰り返しに対応する前記べき乗演算の前記指数の2進数表現における桁の値に基づいて、前記第1累算値または前記第2累算値を読み出して、楕円曲線点2倍算を行って書き戻す、半導体装置。
  19. 請求項18において、前記任意値を第1任意値とし、前記第11ステップは、サブステップとして第12ステップを含み、
    前記第1ステップにおいて、前記第10ステップの前記楕円曲線点加算における2つの入力点の座標の値のそれぞれに前記第1任意値を乗じ、
    前記第12ステップにおいて、前記第11ステップの前記楕円曲線点2倍算における1つの入力点の座標の値のそれぞれに第2任意値を乗じる、半導体装置。
  20. 請求項18において、前記記憶装置はRAMであり、前記乗算器と前記剰余演算器を含むコプロセッサを備え、前記RAMは前記コプロセッサによりバスを介してアクセス可能に構成される、半導体装置。
JP2013015227A 2013-01-30 2013-01-30 半導体装置 Pending JP2014145958A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2013015227A JP2014145958A (ja) 2013-01-30 2013-01-30 半導体装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013015227A JP2014145958A (ja) 2013-01-30 2013-01-30 半導体装置

Publications (1)

Publication Number Publication Date
JP2014145958A true JP2014145958A (ja) 2014-08-14

Family

ID=51426252

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013015227A Pending JP2014145958A (ja) 2013-01-30 2013-01-30 半導体装置

Country Status (1)

Country Link
JP (1) JP2014145958A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021502743A (ja) * 2017-11-10 2021-01-28 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 計算デバイス及び方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021502743A (ja) * 2017-11-10 2021-01-28 コーニンクレッカ フィリップス エヌ ヴェKoninklijke Philips N.V. 計算デバイス及び方法
JP7191097B2 (ja) 2017-11-10 2022-12-16 コーニンクレッカ フィリップス エヌ ヴェ 計算デバイス及び方法

Similar Documents

Publication Publication Date Title
CN107040362B (zh) 模乘设备和方法
US8391477B2 (en) Cryptographic device having tamper resistance to power analysis attack
US8369517B2 (en) Fast scalar multiplication for elliptic curve cryptosystems over prime fields
CN101902331B (zh) 用于rsa算法的素数生成的保护
JP4909403B2 (ja) 安全にデータを求める方法
US20150339102A1 (en) Cryptography Method Comprising an Operation of Multiplication by a Scalar or an Exponentiation
US10374790B2 (en) Countermeasure method for an electronic component implementing an elliptic curve cryptography algorithm
EP2211265B1 (en) Elliptic curve arithmetic processing unit and elliptic curve arithmetic processing program and method
US20100183142A1 (en) Encryption Processing Apparatus, Encryption Processing Method, and Computer Program
Tunstall Smart card security
JP2011530093A (ja) 累乗法による暗号化を保護する解決策
Clavier et al. Square always exponentiation
CN101213512A (zh) 保护数据处理设备以抵御攻击或分析的装置和方法
TWI512610B (zh) 利用模數的特殊形式之模組約化
JP5261088B2 (ja) 不正操作検知回路、不正操作検知回路を備えた装置、及び不正操作検知方法
US11824986B2 (en) Device and method for protecting execution of a cryptographic operation
US20080021941A1 (en) Detection of a disturbance in a calculation performed by an integrated circuit
US9780946B2 (en) Elliptic curve encryption method comprising an error detection
JP6262085B2 (ja) データ処理装置及び復号処理方法
JP2014145958A (ja) 半導体装置
Pontie et al. Dummy operations in scalar multiplication over elliptic curves: a tradeoff between security and performance
Kabin et al. Fast dual-field ECDSA accelerator with increased resistance against horizontal SCA attacks
Bock SCA resistent implementation of the Montgomery kP-algorithm
US20240163085A1 (en) Method for Combined Key Value-Dependent Exchange and Randomization of Two Input Values
US20240163074A1 (en) Circuit for a Combined Key Value-Dependent Exchange and Randomization of Two Values