(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6420497
(24)【登録日】2018年10月19日
(45)【発行日】2018年11月7日
(54)【発明の名称】固定実行フロー乗数再コーディングおよびスカラ乗算のための方法およびデバイス
(51)【国際特許分類】
G09C 1/00 20060101AFI20181029BHJP
【FI】
G09C1/00 650A
【請求項の数】45
【全頁数】31
(21)【出願番号】特願2017-557081(P2017-557081)
(86)(22)【出願日】2016年4月22日
(65)【公表番号】特表2018-514809(P2018-514809A)
(43)【公表日】2018年6月7日
(86)【国際出願番号】US2016028875
(87)【国際公開番号】WO2016178831
(87)【国際公開日】20161110
【審査請求日】2017年10月31日
(31)【優先権主張番号】14/705,686
(32)【優先日】2015年5月6日
(33)【優先権主張国】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】507364838
【氏名又は名称】クアルコム,インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100163522
【弁理士】
【氏名又は名称】黒田 晋平
(72)【発明者】
【氏名】ロベルト・アヴァンジ
(72)【発明者】
【氏名】デイヴィッド・ジェイコブソン
【審査官】
中里 裕正
(56)【参考文献】
【文献】
国際公開第2004/070681(WO,A1)
【文献】
特開2005−020735(JP,A)
【文献】
桶屋勝幸,高木剛,wNAF法に基づく安全かつ高速な楕円スカラー倍計算方法,電子情報通信学会技術研究報告,2003年 5月14日,Vol.103 No.61,p.49-56
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
電子デバイスであって、
メモリ回路と、
前記メモリ回路に通信可能に結合された処理回路とを備え、前記処理回路が、
入力乗数kとベースPとを受信すること、
修正因子sを前記入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが前記入力乗数kに加算されて、k'が生成される、こと、
桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および
k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、前記スカラ乗算出力Zを取得すること
によって、前記スカラ乗算出力Zを計算するように適合され、ただし、Z=k・Pであり、
前記スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用され
、
前記k'の桁展開が、
【数1】
に基づき、前記桁kiの列が、前記桁集合D={±1,±3,±5,...,±2w-1}からのものであり、wが1以上の整数値であり、cが0または1に等しい、電子デバイス。
【請求項2】
前記修正因子sが1または2に等しい、請求項1に記載の電子デバイス。
【請求項3】
前記中間スカラ乗算出力Z'を計算することが、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
kiが偶数である場合:
ki:=ki+1;
c:=1;
それ以外の場合:
c:=0
である、こと
を含む、請求項1に記載の電子デバイス。
【請求項4】
前記中間スカラ乗算出力Z'を計算することが、
Z'をZ'=kl・Pとして初期化すること、および
i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること、または
Z'をZ'=0として初期化すること、および
i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること
のうちの1つをさらに含む、請求項3に記載の電子デバイス。
【請求項5】
前記処理回路が、
すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算することであって、ただし、|d|∈Dである、こと、ならびに
前記事前計算された複数の値d・Pおよび/または-d・Pを、前記メモリ回路内に記憶すること
を行うようにさらに適合される、請求項4に記載の電子デバイス。
【請求項6】
ki・Pを、前記メモリ回路内に記憶された、前記事前計算された複数の値d・Pおよび/または-d・Pから取り出すことによって、Z'=Z'+ki・Pが実施される、請求項5に記載の電子デバイス。
【請求項7】
前記桁集合Dが、複数の整数値{d0,d1,...,dn}を含み、前記処理回路が、
i=0からi=nについて、複数の値di・Pを事前計算し、記憶すること
を行うようにさらに適合される、請求項1に記載の電子デバイス。
【請求項8】
前記処理回路が、
少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶することであって、ただし、mは、前記桁集合Dにおける最小値よりも大きく、前記桁集合Dにおける最大値未満であり、前記修正因子sおよびs+1が、両方とも集合{d0,d1,...,dn}∪{m}内にある、こと
を行うようにさらに適合される、請求項7に記載の電子デバイス。
【請求項9】
前記中間スカラ乗算出力Z'を計算することが、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
c:=1-LSB(ki);
ki=ki+c
である、こと
を含む、請求項1に記載の電子デバイス。
【請求項10】
スカラ乗算出力Zを計算することによって、電子デバイス内のデータを安全にするための方法であって、ただし、Z=k・Pであり、
入力乗数kとベースPとを受信するステップと、
処理回路を介して、修正因子sを前記入力乗数kに加算して、k'を生成するステップであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが前記入力乗数kに加算されて、k'が生成される、ステップと、
前記処理回路を介して、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するステップであって、ただし、Z'=k'・Pである、ステップと、
前記処理回路を介して、k'が奇数である場合、Z'からs・Pを減算して、前記スカラ乗算出力Zを取得するステップ、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、前記スカラ乗算出力Zを取得するステップと
を含み、
前記スカラ乗数出力Zが、前記データを安全にするために、暗号セキュリティアルゴリズムにおいて使用されるように構成され
、
前記k'の桁展開が、
【数2】
に基づき、前記桁kiの列が、前記桁集合D={±1,±3,±5,...,±2w-1}からのものであり、wが1以上の整数値であり、cが0または1に等しい、方法。
【請求項11】
前記修正因子sが1または2に等しい、請求項10に記載の方法。
【請求項12】
前記中間スカラ乗算出力Z'を計算するステップが、
桁上げ値cを0に等しく初期化するステップと、
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定するステップであって、前記演算が、
ki:=ki-2wc;
kiが偶数である場合:
ki:=ki+1;
c:=1;
それ以外の場合:
c:=0
である、ステップと
を含む、請求項10に記載の方法。
【請求項13】
前記中間スカラ乗算出力Z'を計算するステップが、
Z'をZ'=kl・Pとして初期化するステップ、および
i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施するステップ、または
Z'をZ'=0として初期化するステップ、および
i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施するステップ
のうちの1つをさらに含む、請求項12に記載の方法。
【請求項14】
すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算するステップであって、ただし、|d|∈Dである、ステップと、
前記事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶するステップと
をさらに含む、請求項13に記載の方法。
【請求項15】
Z'=Z'+ki・Pが、
前記メモリ回路内に記憶された、前記事前計算された複数の値d・Pおよび/または-d・Pから、ki・Pを取り出すステップ
によって実施される、請求項14に記載の方法。
【請求項16】
前記桁集合Dが、複数の整数値{d0,d1,...,dn}を含み、前記方法が、
i=0からi=nについて、複数の値di・Pを事前計算し、記憶するステップ
をさらに含む、請求項10に記載の方法。
【請求項17】
少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶するステップであって、ただし、mは、前記桁集合Dにおける最小値よりも大きく、前記桁集合Dにおける最大値未満であり、前記修正因子sおよびs+1が、両方とも集合{d0,d1,...,dn}∪{m}内にある、ステップ
をさらに含む、請求項16に記載の方法。
【請求項18】
前記中間スカラ乗算出力Z'を計算するステップが、
桁上げ値cを0に等しく初期化するステップと、
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定するステップであって、前記演算が、
ki:=ki-2wc;
c:=1-LSB(ki);
ki=ki+c
である、ステップと
を含む、請求項10に記載の方法。
【請求項19】
スカラ乗算出力Zを計算することによって、電子デバイス内のデータを安全にするように適合された電子デバイスであって、ただし、Z=k・Pであり、
入力乗数kとベースPとを受信するための手段と、
修正因子sを前記入力乗数kに加算して、k'を生成するための手段であって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが前記入力乗数kに加算されて、k'が生成される、手段と、
桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するための手段であって、ただし、Z'=k'・Pである、手段と、
k'が奇数である場合、Z'からs・Pを減算して、前記スカラ乗算出力Zを取得するための手段、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、前記スカラ乗算出力Zを取得するための手段と
を備え、
前記スカラ乗数出力Zが、前記データを安全にするために、暗号セキュリティアルゴリズムにおいて使用されるように構成され
、
前記k'の桁展開が、
【数3】
に基づき、前記桁kiの列が、前記桁集合D={±1,±3,±5,...,±2w-1}からのものであり、wが1以上の整数値であり、cが0または1に等しい、電子デバイス。
【請求項20】
前記修正因子sが1または2に等しい、請求項19に記載の電子デバイス。
【請求項21】
前記中間スカラ乗算出力Z'を計算するための前記手段が、
桁上げ値cを0に等しく初期化するための手段と、
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定するための手段であって、前記演算が、
ki:=ki-2wc;
kiが偶数である場合:
ki:=ki+1;
c:=1;
それ以外の場合:
c:=0
である、手段と
を含む、請求項19に記載の電子デバイス。
【請求項22】
前記中間スカラ乗算出力Z'を計算するための前記手段が、
Z'をZ'=kl・Pとして初期化するための手段、および
i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施するための手段、または
Z'をZ'=0として初期化するための手段、および
i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施するための手段
のうちの1つをさらに含む、請求項19に記載の電子デバイス。
【請求項23】
すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算するための手段であって、ただし、|d|∈Dである、手段と、
前記事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶するための手段と
をさらに備える、請求項22に記載の電子デバイス。
【請求項24】
Z'=Z'+ki・Pが、
前記メモリ回路内に記憶された、前記事前計算された複数の値d・Pおよび/または-d・Pから、ki・Pを取り出すための手段
によって実施される、請求項23に記載の電子デバイス。
【請求項25】
前記桁集合Dが、複数の整数値{d0,d1,...,dn}を含み、前記電子デバイスが、
i=0からi=nについて、複数の値di・Pを事前計算するための手段と、前記複数の値di・Pを記憶するための手段と
をさらに備える、請求項19に記載の電子デバイス。
【請求項26】
少なくとも1つの整数中間値mのためのm・Pを事前計算するための手段と、前記m・Pを記憶するための手段であって、ただし、mは、前記桁集合Dにおける最小値よりも大きく、前記桁集合Dにおける最大値未満であり、前記修正因子sおよびs+1が、両方とも集合{d0,d1,...,dn}∪{m}内にある、手段と
をさらに備える、請求項25に記載の電子デバイス。
【請求項27】
前記中間スカラ乗算出力Z'を計算するための前記手段が、
桁上げ値cを0に等しく初期化するための手段と、
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定するための手段であって、前記演算が、
ki:=ki-2wc;
c:=1-LSB(ki);
ki=ki+c
である、手段と
を含む、請求項19に記載の電子デバイス。
【請求項28】
スカラ乗算出力Zを計算するための1つまたは複数の命令を記憶するように適合された非一時的コンピュータ可読記憶媒体であって、ただし、Z=k・Pであり、前記命令が、少なくとも1つのプロセッサによって実行されたとき、前記プロセッサに、
入力乗数kとベースPとを受信すること、
修正因子sを前記入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが前記入力乗数kに加算されて、k'が生成される、こと、
桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および
k'が奇数である場合、Z'からs・Pを減算して、前記スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、前記スカラ乗算出力Zを取得すること
を行わせ、
前記スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用され
、
前記k'の桁展開が、
【数4】
に基づき、前記桁kiの列が、前記桁集合D={±1,±3,±5,...,±2w-1}からのものであり、wが1以上の整数値であり、cが0または1に等しい、非一時的コンピュータ可読記憶媒体。
【請求項29】
前記修正因子sが1または2に等しい、請求項28に記載のコンピュータ可読記憶媒体。
【請求項30】
前記中間スカラ乗算出力Z'を計算することを、前記プロセッサに行わせるための前記命令が、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
kiが偶数である場合:
ki:=ki+1;
c:=1;
それ以外の場合:
c:=0
である、こと
を前記プロセッサに行わせるための命令をさらに含む、請求項28に記載のコンピュータ可読記憶媒体。
【請求項31】
前記中間スカラ乗算出力Z'を計算することを、前記プロセッサに行わせるための前記命令が、
Z'をZ'=kl・Pとして初期化すること、および
i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること、または
Z'をZ'=0として初期化すること、および
i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること
のうちの1つを前記プロセッサに行わせるための命令をさらに含む、請求項30に記載のコンピュータ可読記憶媒体。
【請求項32】
前記命令が、前記少なくとも1つのプロセッサによって実行されたとき、
すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算することであって、ただし、|d|∈Dである、こと、ならびに
前記事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶すること
を前記プロセッサにさらに行わせる、請求項31に記載のコンピュータ可読記憶媒体。
【請求項33】
前記命令が、前記少なくとも1つのプロセッサによって実行されたとき、
前記メモリ回路内に記憶された、前記事前計算された複数の値d・Pおよび/または-d・Pから、ki・Pを取り出して、Z'=Z'+ki・Pを実行すること
を前記プロセッサにさらに行わせる、請求項32に記載のコンピュータ可読記憶媒体。
【請求項34】
前記桁集合Dが、複数の整数値{d0,d1,...,dn}を含み、前記命令が、前記少なくとも1つのプロセッサによって実行されたとき、
i=0からi=nについて、複数の値di・Pを事前計算し、記憶すること
を前記プロセッサにさらに行わせる、請求項28に記載のコンピュータ可読記憶媒体。
【請求項35】
前記命令が、前記少なくとも1つのプロセッサによって実行されたとき、
少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶することであって、ただし、mは、前記桁集合Dにおける最小値よりも大きく、前記桁集合Dにおける最大値未満であり、前記修正因子sおよびs+1が、両方とも集合{d0,d1,...,dn}∪{m}内にある、こと
を前記プロセッサにさらに行わせる、請求項34に記載のコンピュータ可読記憶媒体。
【請求項36】
前記中間スカラ乗算出力Z'を計算することを、前記プロセッサに行わせるための前記命令が、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
c:=1-LSB(ki);
ki=ki+c
である、こと
を前記プロセッサに行わせるための命令をさらに含む、請求項28に記載のコンピュータ可読記憶媒体。
【請求項37】
集積回路であって、
メモリ回路と、
前記メモリ回路に通信可能に結合された処理回路とを備え、前記処理回路が、
入力乗数kとベースPとを受信すること、
修正因子sを前記入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが前記入力乗数kに加算されて、k'が生成される、こと、
桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および
k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、前記スカラ乗算出力Zを取得すること
によって、前記スカラ乗算出力Zを計算するように適合され、ただし、Z=k・Pであり、
前記スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用され
、
前記k'の桁展開が、
【数5】
に基づき、前記桁kiの列が、前記桁集合D={±1,±3,±5,...,±2w-1}からのものであり、wが1以上の整数値であり、cが0または1に等しい、集積回路。
【請求項38】
前記修正因子sが1または2に等しい、請求項37に記載の集積回路。
【請求項39】
前記中間スカラ乗算出力Z'を計算することが、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
kiが偶数である場合:
ki:=ki+1;
c:=1;
それ以外の場合:
c:=0
である、こと
を含む、請求項37に記載の集積回路。
【請求項40】
前記中間スカラ乗算出力Z'を計算することが、
Z'をZ'=kl・Pとして初期化すること、および
i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること、または
Z'をZ'=0として初期化すること、および
i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+ki・P
を実施すること
のうちの1つをさらに含む、請求項39に記載の集積回路。
【請求項41】
前記処理回路が、
すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算することであって、ただし、|d|∈Dである、こと、ならびに
前記事前計算された複数の値d・Pおよび/または-d・Pを、前記メモリ回路内に記憶すること
を行うようにさらに適合される、請求項40に記載の集積回路。
【請求項42】
ki・Pを、前記メモリ回路内に記憶された、前記事前計算された複数の値d・Pおよび/または-d・Pから取り出すことによって、Z'=Z'+ki・Pが実施される、請求項41に記載の集積回路。
【請求項43】
前記桁集合Dが、複数の整数値{d0,d1,...,dn}を含み、前記処理回路が、
i=0からi=nについて、複数の値di・Pを事前計算し、記憶すること
を行うようにさらに適合される、請求項37に記載の集積回路。
【請求項44】
前記処理回路が、
少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶することであって、ただし、mは、前記桁集合Dにおける最小値よりも大きく、前記桁集合Dにおける最大値未満であり、前記修正因子sおよびs+1が、両方とも集合{d0,d1,...,dn}∪{m}内にある、こと
を行うようにさらに適合される、請求項43に記載の集積回路。
【請求項45】
前記中間スカラ乗算出力Z'を計算することが、
桁上げ値cを0に等しく初期化すること、および
1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(kl,kl-1,...,k1,k0)を決定することであって、前記演算が、
ki:=ki-2wc;
c:=1-LSB(ki);
ki=ki+c
である、こと
を含む、請求項37に記載の集積回路。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本出願は、内容全体が参照により本明細書に組み込まれる、2015年5月6日に米国特許商標庁に出願された、非仮出願第14/705,686号の優先権および利益を主張する。
【0002】
様々な特徴は、一般に暗号セキュリティに関し、より詳細には、暗号セキュリティアルゴリズムにおいて使用される、固定実行フロー乗数再コーディングおよびスカラ乗算のための方法およびデバイスに関する。
【背景技術】
【0003】
楕円曲線点乗算、および一般に、g個の要素をもつ巡回群における定数による乗算は、乗数k(ただしk≧0)とベースPとを受け入れる計算であり、結果を次のように計算する。
【0004】
【数1】
【0005】
この演算はスカラ乗算と呼ばれ、多数の暗号プロトコル、たとえば、ディフィーヘルマン鍵交換およびデジタル署名の生成における、基本的演算である。
【0006】
一般に、k・Pは、最初に乗数kを
【0007】
【数2】
【0008】
として書き出すことによって計算され得、ただし、k
iは、整数の桁集合Dの要素である。最初に、楕円曲線では無限遠点と呼ばれる、加法単位元に初期化されるZがあるとする。次に、kの桁k
iが、最上位から最下位まで検査される。桁k
iについて、0である場合、Z:=2*Zである。k
i≠0である場合、Z:=2*Z+k
i*Pである。すべてのビットが処理されたとき、次いで、結果は、Zの現在値である。しかしながら、そのような展開を利用する方法は、サイドチャネル解析攻撃およびタイミング解析攻撃を受けやすく、その理由は、0および0でない桁の列は規則的ではなく、それによって乗数kについての何らかの情報を漏洩するからである。
【0009】
Nicholas Theriaultによって開発された従来技術の方法は、サイドチャネル解析およびタイミング解析のリスクを低減する。Nicholas Theriault、SPA Resistant Left-to-Right Integer Recodings、Selected Areas in Cryptography (2005)、345〜358ページ。Theriaultは、乗数kを、次の展開として展開し、
【0010】
【数3】
【0011】
ただし、wは、ウィンドウ長さのパラメータであり、k
iは、2つの整数の集合のうちの1つから選定される。
桁集合#1: ウィンドウwについて、{±1}∪{±2,±4,...,±2
w}
桁集合#2: ウィンドウwについて、{±1,±3,±5,...,±2
w-1}
【0012】
とはいえ、Theriaultの方法は、いくつかの顕著な欠点を有する。第1に、桁集合#2は、奇数桁のみを展開することができる。したがって、Theriaultは、奇数位数の群とともにこの乗数展開を使用すること、および、元の乗数kが偶数である場合、群の位数gの奇数の倍数を加算し、新しい乗数k'=k+n*gが奇数になるようにすることを提案する。これは、乗数をより長くし、したがって、スカラ乗算をより遅くするという欠点を有する。第2に、k'>gであるので、中間計算のうちの1つは、g・Pに等しくなる結果になり得る。これは、楕円曲線を用いて計算するための式において例外の場合につながり、この結果は、この発生が情報を漏洩し、サイドチャネル攻撃を用いて検出され得るということである。
【0013】
第3に、桁集合#2を使用して乗数展開を計算すると、0または1の桁上げを生じることになり、これには、結果を固定するために余分な演算またはダミー演算が必要となる。しかしながら、余分な演算は、サイドチャネル攻撃を用いて検出可能となり、ダミー演算は、フォールト攻撃を用いて検出可能となる。したがって、どちらの場合も、情報が漏洩され、乗数のパリティが明らかにされ得る。
【先行技術文献】
【非特許文献】
【0014】
【非特許文献1】Nicholas Theriault、SPA Resistant Left-to-Right Integer Recodings、Selected Areas in Cryptography (2005)、345〜358ページ
【発明の概要】
【発明が解決しようとする課題】
【0015】
したがって、サイドチャネル攻撃およびフォールト攻撃にも強い、時間およびメモリ効率の良い方法で、スカラ乗算を実行することができる方法およびデバイスの必要がある。
【課題を解決するための手段】
【0016】
1つの特徴は、メモリ回路と、メモリ回路に通信可能に結合された処理回路とを備える、電子デバイスを提供する。処理回路は、入力乗数kとベースPとを受信すること、修正因子sを入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される、こと、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得することによって、スカラ乗算出力Zを計算するように適合され、ただし、Z=k・Pであり、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用される。一態様によれば、k'の桁展開は、
【0017】
【数4】
【0018】
に基づき、桁k
iの列は、桁集合D={±1,±3,±5,...,±2
w-1}からのものであり、wは1以上の整数値であり、cは0または1に等しい。別の態様によれば、修正因子sは1または2に等しい。
【0019】
一態様によれば、中間スカラ乗算出力Z'を計算することは、桁上げ値cを0に等しく初期化すること、および、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定することであって、演算が、
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0
である、ことを含む。
別の態様によれば、中間スカラ乗算出力Z'を計算することは、Z'をZ'=k
l・Pとして初期化すること、および、i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+k
i・P
を実施すること、または
Z'をZ'=0として初期化すること、および、i=lからi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+k
i・P
を実施することのうちの1つをさらに含む。
また別の態様によれば、処理回路は、すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算することであって、ただし、|d|∈Dである、こと、ならびに、事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶することを行うようにさらに適合される。
【0020】
一態様によれば、k
i・Pを、メモリ回路内に記憶された、事前計算された複数の値d・Pおよび/または-d・Pから取り出すことによって、演算Z'=Z'+k
i・Pが実施される。別の態様によれば、桁集合Dは、複数の整数値{d
0,d
1,...,d
n}を含み、処理回路は、i=0からi=nについて、複数の値d
i・Pを事前計算し、記憶することを行うようにさらに適合される。また別の態様によれば、処理回路は、少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶することであって、ただし、mは、桁集合Dにおける最小値よりも大きく、桁集合Dにおける最大値未満であり、修正因子sおよびs+1が、両方とも集合{d
0,d
1,...,d
n}∪{m}内にある、ことを行うようにさらに適合される。別の態様によれば、中間スカラ乗算出力Z'を計算することは、桁上げ値cを0に等しく初期化すること、および、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定することであって、演算が、
k
i:=k
i-2
wc;
c:=1-LSB(k
i);
k
i=k
i+c
である、ことを含む。
【0021】
別の特徴は、スカラ乗算出力Zを計算するための方法を提供し、ただし、Z=k・Pであり、この方法は、入力乗数kとベースPとを受信するステップと、修正因子sを入力乗数kに加算して、k'を生成するステップであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される、ステップと、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するステップであって、ただし、Z'=k'・Pである、ステップと、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得するステップ、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得するステップとを含み、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用される。一態様によれば、中間スカラ乗算出力Z'を計算するステップは、桁上げ値cを0に等しく初期化するステップと、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定するステップであって、演算が、
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0
である、ステップとを含む。
別の態様によれば、中間スカラ乗算出力Z'を計算するステップは、Z'をZ'=k
l・Pとして初期化するステップと、i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+k
i・P
を実施するステップとをさらに含む。
【0022】
一態様によれば、この方法は、すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算するステップであって、ただし、|d|∈Dである、ステップと、事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶するステップとをさらに含む。別の態様によれば、k
i・Pを、メモリ回路内に記憶された、事前計算された複数の値d・Pおよび/または-d・Pから取り出すことによって、演算Z'=Z'+k
i・Pが実施される。また別の態様によれば、桁集合Dは、複数の整数値{d
0,d
1,...,d
n}を含み、この方法は、i=0からi=nについて、複数の値d
i・Pを事前計算し、記憶するステップをさらに含む。
【0023】
一態様によれば、この方法は、少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶するステップであって、ただし、mは、桁集合Dにおける最小値よりも大きく、桁集合Dにおける最大値未満であり、修正因子sおよびs+1が、両方とも集合{d
0,d
1,...,d
n}∪{m}内にある、ステップをさらに含む。別の態様によれば、中間スカラ乗算出力Z'を計算するステップは、桁上げ値cを0に等しく初期化するステップと、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定するステップであって、演算が、
k
i:=k
i-2
wc;
c:=1-LSB(k
i);
k
i=k
i+c
である、ステップとを含む。
【0024】
別の特徴は、スカラ乗算出力Zを計算するように適合された電子デバイスを提供し、ただし、Z=k・Pであり、電子デバイスは、入力乗数kとベースPとを受信するための手段と、修正因子sを入力乗数kに加算して、k'を生成するための手段であって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される、手段と、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するための手段であって、ただし、Z'=k'・Pである、手段と、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得するための手段、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得するための手段とを備え、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用される。一態様によれば、中間スカラ乗算出力Z'を計算するための手段は、桁上げ値cを0に等しく初期化するための手段と、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定するための手段であって、演算が、
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0
である、手段とを含む。
別の態様によれば、中間スカラ乗算出力Z'を計算するための手段は、Z'をZ'=k
l・Pとして初期化するための手段と、i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+k
i・P
を実施するための手段とをさらに含む。
【0025】
一態様によれば、電子デバイスは、すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算するための手段であって、ただし、|d|∈Dである、手段と、事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶するための手段とをさらに備える。別の態様によれば、k
i・Pを、メモリ回路内に記憶された、事前計算された複数の値d・Pおよび/または-d・Pから取り出すための手段によって、演算Z'=Z'+k
i・Pが実施される。また別の態様によれば、桁集合Dは、複数の整数値{d
0,d
1,...,d
n}を含み、電子デバイスは、i=0からi=nについて、複数の値d
i・Pを事前計算するための手段と、複数の値d
i・Pを記憶するための手段とをさらに備える。
【0026】
一態様によれば、電子デバイスは、少なくとも1つの整数中間値mのためのm・Pを事前計算するための手段と、m・Pを記憶するための手段であって、ただし、mは、桁集合Dにおける最小値よりも大きく、桁集合Dにおける最大値未満であり、修正因子sおよびs+1が、両方とも集合{d
0,d
1,...,d
n}∪{m}内にある、手段とをさらに備える。別の態様によれば、中間スカラ乗算出力Z'を計算するための手段は、桁上げ値cを0に等しく初期化するための手段と、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定するための手段であって、演算が、
k
i:=k
i-2
wc;
c:=1-LSB(k
i);
k
i=k
i+c
である、手段とを含む。
【0027】
別の特徴は、スカラ乗算出力Zを計算するための1つまたは複数の命令を記憶するように適合されたコンピュータ可読記憶媒体を提供し、ただし、Z=k・Pであり、命令が、少なくとも1つのプロセッサによって実行されたとき、プロセッサに、入力乗数kとベースPとを受信すること、修正因子sを入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される、こと、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得することを行わせ、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用される。一態様によれば、中間スカラ乗算出力Z'を計算することを、プロセッサに行わせるための命令は、桁上げ値cを0に等しく初期化すること、および、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定することであって、演算が、
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0
である、ことをプロセッサに行わせるための命令をさらに含む。
別の態様によれば、中間スカラ乗算出力Z'を計算することを、プロセッサに行わせるための命令は、Z'をZ'=k
l・Pとして初期化すること、および、i=l-1からi=0までについて、演算
Z'=2・Z'をwに等しい回数行う;
Z'=Z'+k
i・P
を実施することをプロセッサに行わせるための命令をさらに含む。
【0028】
一態様によれば、命令は、少なくとも1つのプロセッサによって実行されたとき、すべての値|d|について、複数の値d・Pおよび/または-d・Pのうちの少なくとも1つを事前計算することであって、ただし、|d|∈Dである、こと、ならびに、事前計算された複数の値d・Pおよび/または-d・Pを、メモリ回路内に記憶することを、プロセッサにさらに行わせる。別の態様によれば、命令は、少なくとも1つのプロセッサによって実行されたとき、メモリ回路内に記憶された、事前計算された複数の値d・Pおよび/または-d・Pから、k
i・Pを取り出して、演算Z'=Z'+k
i・Pを実行することをプロセッサにさらに行わせる。また別の態様によれば、桁集合Dは、複数の整数値{d
0,d
1,...,d
n}を含み、命令は、少なくとも1つのプロセッサによって実行されたとき、i=0からi=nについて、複数の値d
i・Pを事前計算し、記憶することをプロセッサにさらに行わせる。
【0029】
一態様によれば、命令は、少なくとも1つのプロセッサによって実行されたとき、少なくとも1つの整数中間値mのためのm・Pを事前計算し、記憶することであって、ただし、mは、桁集合Dにおける最小値よりも大きく、桁集合Dにおける最大値未満であり、修正因子sおよびs+1が、両方とも集合{d
0,d
1,...,d
n}∪{m}内にある、ことをプロセッサにさらに行わせる。別の態様によれば、中間スカラ乗算出力Z'を計算することを、プロセッサに行わせるための命令は、桁上げ値cを0に等しく初期化すること、および、1以上のウィンドウ長さの値wについて、すべての整数値i=lからi=0までについて演算を実施することによって、桁列(k
l,k
l-1,...,k
1,k
0)を決定することであって、演算が、
k
i:=k
i-2
wc;
c:=1-LSB(k
i);
k
i=k
i+c
である、ことをプロセッサに行わせるための命令をさらに含む。
【0030】
別の特徴は、メモリ回路と、メモリ回路に通信可能に結合された処理回路とを備える、集積回路を提供し、処理回路は、入力乗数kとベースPとを受信すること、修正因子sを入力乗数kに加算して、k'を生成することであって、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される、こと、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算することであって、ただし、Z'=k'・Pである、こと、および、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得すること、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得することによって、スカラ乗算出力Zを計算するように適合され、ただし、Z=k・Pであり、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用される。
【図面の簡単な説明】
【0031】
【
図3】スカラ乗算回路において実行されるアルゴリズムを示す図である。
【
図4A】スカラ乗算回路において実行され得る方法のフロー図である。
【
図4B】スカラ乗算回路において実行され得る方法のフロー図である。
【
図5】値d・Pを記憶する例示的な事前計算テーブルを示す図である。
【
図6A】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第1の例示的な実行を示す図である。
【
図6B】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第1の例示的な実行を示す図である。
【
図7A】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第2の例示的な実行を示す図である。
【
図7B】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第2の例示的な実行を示す図である。
【
図8A】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第3の例示的な実行を示す図である。
【
図8B】k、w、D、およびsのためのサンプル数値における楕円点スカラ乗算の第3の例示的な実行を示す図である。
【
図9】処理回路において実行され得る方法のフロー図である。
【
図10】例示的なスカラ乗算回路の概略ブロック図である。
【発明を実施するための形態】
【0032】
以下の説明では、本開示の様々な態様を完全に理解できるように、具体的な詳細が与えられる。しかしながら、各態様がこれらの具体的な詳細なしに実践され得ることが、当業者には理解されよう。たとえば、回路および構造は、不必要な詳細で態様を不明瞭にすることを避けるために、ブロック図で示されることがある。他の事例では、周知の回路、構造、および技法は、本開示の態様を不明瞭にしないために、詳細には示されないことがある。「例示的」という単語は、本明細書において、「例、事例、または例示として働くこと」を意味するために使用される。「例示的な」として本明細書において説明するいかなる実装形態または態様も、必ずしも本開示の他の態様よりも好ましいか、または有利であると解釈されるべきではない。
【0033】
概要
本明細書で説明するいくつかの方法およびデバイスは、スカラ乗算出力Zを計算することに関し、ただし、Z=k・Pである。方法およびデバイスは、入力乗数kとベースPとを受信し、修正因子sを入力乗数kに加算して、k'を生成し、ただし、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される。方法およびデバイスはまた、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算し、ただし、Z'=k'・Pである。一例によれば、桁集合D={±1,±3,±5,±7,±9,±11,±13,±15}である。加えて、方法およびデバイスは、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得するか、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得する。スカラ乗数出力Zは、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用され得る。
【0034】
固定実行フロー乗数再コーディング(Fixed Execution Flow Multiplier Recoding)およびスカラ乗算のための例示的な方法
図1は、本開示の一態様による電子デバイス100の概略ブロック図を示す。電子デバイス100は、限定はしないが、ワイヤレス通信デバイス、タブレット、スマートフォン、ケーブルテレビジョンセットトップボックス、ラップトップ、デスクトップコンピュータ、スマートウォッチ、ウェアラブル光学ヘッドマウントディスプレイ、サーバなどを含む、任意の電子デバイスであり得る。電子デバイス100は、少なくとも1つの処理回路102(プロセッサ、中央処理ユニット(CPU)、アプリケーション処理ユニット(APU)など)、少なくとも1つのメモリ回路104、少なくとも1つのディスプレイ106、I/Oデバイス108、および/または少なくとも1つの通信インターフェース110を含み得る。これらの構成要素102、104、106、108、110は、たとえば、通信バス112によって互いに通信可能に結合され得る。
【0035】
処理回路102は一般に、メモリ回路104内に記憶されたソフトウェアおよび命令を実行し得る。処理回路102はまた、暗号セキュリティアルゴリズムを実行する暗号回路112を含み得る。たとえば、暗号回路112は、暗号セキュリティ鍵(たとえば、対称鍵、非対称公開秘密鍵ペアなど)を生成し、暗号デジタル署名を生成し、デジタル署名および/または証明書を認証または検証することなどができる。以下でより詳細に説明するように、上述の暗号セキュリティアルゴリズムのうちの1つまたは複数を実施することで、高速でメモリ効率の良い、セキュアでロバストなスカラ乗算のためのアルゴリズムを、暗号回路112に実行させることができる。
【0036】
メモリ回路104は、揮発性および不揮発性メモリを含み得、処理回路102によって実行されるソフトウェアおよび命令を記憶し得る。たとえば、メモリ回路104は、本明細書で説明する暗号セキュリティアルゴリズムおよび/またはプロセスのいずれかを実施することに関連付けられた命令を記憶し得る。
【0037】
ディスプレイ106は、限定はしないが、液晶ディスプレイ(LCD)、プラズマスクリーン、フラットパネルモニタ、および/またはタッチスクリーンディスプレイを含む、任意のディスプレイデバイスであり得る。たとえば、ディスプレイ106は、スマートフォン、タブレット、ラップトップ、スマートウォッチなどにおけるディスプレイであり得る。I/Oデバイス108は、特に、キーボード、マウス、タッチスクリーンディスプレイ、ステータスインジケータライト、スピーカー、および/またはボタンを含み得る。
【0038】
通信インターフェース110は、他の電子デバイスとの短距離および/または長距離通信を可能にし得る。たとえば、通信インターフェース110は、1つまたは複数のワイヤレス通信インターフェースを含み得る。そのようなワイヤレス通信インターフェースは、限定はしないが、Wi-Fi(登録商標)、セルラー通信、Zigbee(登録商標)、Bluetooth(登録商標)などを含む、短距離または長距離通信プロトコルを可能にし得る。通信インターフェース110はまた、たとえば、両方とも直接的に、かつ/または1つもしくは複数の通信ネットワークを通して、他の電子デバイスとのワイヤード通信を可能にし得る。
【0039】
図2は、本開示の一態様による、暗号回路112の例示的なブロック図を示す。暗号回路112は、スカラ乗算回路202と暗号アルゴリズムモジュール204とを含み得る。暗号モジュール204は、限定はしないが、鍵206を生成する鍵生成機能、およびデジタル署名208を生成かつ/または認証/検証するデジタル署名機能を含む、様々な暗号アルゴリズムを実行し得る。以下でより詳細に説明するように、スカラ乗算回路202は、入力パラメータを受信し、出力値を与え得る。詳細には、スカラ乗算回路202は、入力乗数kとベースPとを受信し、楕円曲線点乗算出力Z=k・Pを与え得る。スカラ乗算回路202は、本明細書で説明するように、高速でメモリ効率の良い、セキュアでロバストな方法で、デジタル回路を使用して、演算k・Pを実行する。
【0040】
図3は、一態様による、スカラ乗算回路202(
図2参照)において実行されるアルゴリズム300を示す。
図3を参照すると、302で、固定の0でない整数値sが入力乗数kに加算されて、k'が生じる。したがって、k'=k+sである。次いで、調整された乗数k'は、k・Pを最終的に出力する第1のアルゴリズム(たとえば、アルゴリズムX)304に入力される。アルゴリズムX304によれば、306で、
【0042】
であり、ただし、c∈{0,1}であり、値k
iは、桁集合Dからのもの(すなわち、k
i∈D)であり、値lは、k
iにおける桁数に等しい。一例によれば、桁集合D={±1,±3,±5,...,±2
w-1}、およびw≧1である。展開
【0044】
306は、第2のアルゴリズム(たとえば、アルゴリズムY)308を使用して計算され得る。
【0045】
アルゴリズムY308では、310で、
【0047】
であり、各整数k
iが0≦k
i<2
wを満たし、cが0に等しく初期設定され、したがって、
【0049】
である。次いで、312で、i=lから0までについて、以下が実施される。
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0
この演算312は、c:=1-LSB(k
i)およびk
i:=k
i+cとして、分岐なしで実施され得る。演算LSB(k
i)は、k
iの最下位ビットを戻す。次に、314で、桁列(k
l,k
l-1,...,k
1,k
0)および桁上げcが戻される。
【0050】
アルゴリズムX304に戻ると、316で、すべてのd∈Dについてのd・Pが事前計算され、テーブル内に記憶される。dと-dの両方が桁集合D内にある場合、d・Pが単に事前計算および記憶され、-d・Pは、d・Pから自明にから導出され得る。次に、Z'は、Z'=0として恒等元に設定され得る。次いで、318で、i=lからi=0までについて、以下が実施される。
2倍演算Z':=2・Z'をw回実行する;
Z':=Z'+(k
i・P)
ただし、k
i・Pは、テーブルから取り出されるか、または、-k
i・Pがテーブル内に記憶されている場合、-k
i・Pからオンザフライで計算され、それが次いでZ'を戻す。演算318は、最初にZ'をZ':=k
i・Pに初期化すること、および次いで、i=l-1からi=0までについて、以下を実施することによって、等価的に実施され得る。
2倍演算Z':=2・Z'をw回実行する;
Z':=Z'+(k
i・P)
【0051】
次いで、値Z'が使用されて、Z=k・Pが計算される。これは、320で、k'が奇数である場合、単に-(s・P)をZ'に加算して、Zを取得することによって、または、k'が偶数である場合、-((s+1)・P)をZ'に加算して、Zを取得することによって行われ得る。すなわち、k'が奇数である場合、s・PがZ'から減算されて、Zが取得され、または、k'が偶数である場合、(s+1)・PがZ'から減算されて、Zが取得される。したがって、アルゴリズムX304の出力322は、Z=k・Pである。一例として、s=1である場合、k'が奇数である場合は-PがZ'に加算されて、Zが取得され、k'が偶数である場合は-2PがZ'に加算されて、Zが取得される。別の例として、s=2である場合、k'が奇数である場合は-2PがZ'に加算されて、Zが取得され、k'が偶数である場合は-3PがZ'に加算されて、Zが取得される。
【0052】
特に、上記のアルゴリズムにおいて修正因子sをkに加算することで、kが偶数であるか奇数であるかにかかわらず、Z=k・Pを取得するために、アルゴリズム300の最後に減算演算が実施されることが保証される。したがって、wの所与の値についてのアルゴリズム300の数学演算のシーケンスは、Z'の現在値をw回2倍にして、k
i・Pを加算し、Z'の現在値をw回2倍にして、k
i・Pを加算し、...、Z'の現在値をw回2倍にして、k
i・Pを加算し、s・Pまたは(s+1)・Pを減算することになる。言い換えれば、この数学演算のシーケンスは、w回2倍にして次いで加算し、w回2倍にして次いで加算し、...、最後に減算(すなわち、加算)することである。最後の減算演算は、アルゴリズム300の出力値に対する実際の効果を有するという点で、「有効演算」であり、「ダミー演算」ではない。
【0053】
対照的に、修正因子sがkに加算されず(たとえば、Theriaultの従来技術の方法)、kが奇数である場合、アルゴリズムは、最後の減算/加算演算を必要とすることなく終わり、kが偶数である場合、結果を修正するために、最後の減算/加算演算が必要とされる。これは、kが奇数であるとき、ある演算のシーケンス(w回2倍にして加算し、w回2倍にして加算し、...、w回2倍にして加算する)が必要とされ、kが偶数であるとき、異なる演算のシーケンス(w回2倍にして加算し、w回2倍にして加算し、...、w回2倍にして加算し、加算/減算する)が必要とされることを意味する。演算における違いが、サイドチャネル攻撃において、kの値についての情報を推論し、明らかにするために使用され得る。kが奇数であるとき、ダミー加算/減算演算がTheriaultのアルゴリズムの最後に使用される場合でも、そのようなダミー演算は、アルゴリズムの最終的な出力値に対する影響を有しておらず、したがって、フォールト攻撃に対して非セキュアである。
【0054】
さらに、kが奇数であるか偶数であるかにかかわらず、同じ修正因子値sがkに加算されて、kが取得される。したがって、k'が奇数であるか偶数であるかに応じて、異なる値(たとえば、(s・P)または((s+1)・P)のいずれか)がZ'から減算されて、Zが取得される。本開示の一態様によれば、異なる値sが、スカラ乗算回路202において受信された各乗数値kに加算され得る。したがって、非限定的、非排他的な一例として、s=1が、受信された第1の乗数値k
Aについて使用され得、異なる値s=2が、受信された別の後続の乗数値k
Bについて使用され得る。
【0055】
図4Aおよび
図4Bは、スカラ乗算回路202(
図2参照)において実行され得る、一態様による方法400のフロー図を示す。
図4Aを参照すると、402で、修正因子値sが選択され得る。次に、404で、入力乗数kが、ベースPとともに受信される。次いで、406で、修正因子値sを乗数kに加算することによって、調整された乗数値k'が生成される。したがって、k'=k+sである。kが偶数であるか奇数であるかにかかわらず、同じ修正因子値sがkに加算される。次に、408で、調整された乗数k'が、次の式(1)に従って、展開として書き込まれる/設定される。
【0057】
ただし、c∈{0,1}であり、値k
iは、桁集合Dからのもの(すなわち、k
i∈D)である。一例によれば、桁集合D={±1,±3,±5,...,±2
w-1}である。次いで、410で、複数の値d・Pが事前計算され、テーブル内に記憶され、ただし、d∈Dである。一態様によれば、d・Pまたは-d・Pのいずれかのみが、各値|d|について事前計算および記憶され、その理由は、必要に応じてオンザフライで、-d・Pがd・Pから自明に決定され得、d・Pが-d・Pから自明に決定され得るからである。
【0058】
図5は、値d・Pを記憶する、例示的な事前計算テーブル500を示す。図示の例では、桁集合Dが複数の整数値{d
0,d
1,...,d
n}を含むことが仮定され得る。次いで、テーブル500は、i=0からi=nについて、複数の値d
i・Pを記憶する。テーブル500はまた、少なくとも1つの整数中間値mのためのm・Pを記憶し得、ただし、mは、桁集合Dにおける最小値よりも大きく、桁集合Dにおける最大値未満である。一態様によれば、修正因子値sおよびs+1は、両方とも集合{d
0,d
1,...,d
n}∪{m}内にあり得る。したがって、sおよびs+1は、負または正であり得るが、ゼロ(0)ではない。しかしながら、sおよびs+1が負値である場合は、k'≦0を生じ得る。これが発生し得ないことを保証するために、予防措置が取られるべきである。その上、sおよびs+1のための負値を有することは、kの範囲がk>sに制限され得ない、楕円曲線デジタル署名アルゴリズム(ECDSA)などのプロトコルにおいて使用するには、実行不可能であり得る。
【0059】
再び
図4Aを参照すると、複数の値(k
l,k
l-1,...,k
1,k
0)は、i=lからi=0までについて、412を実施/実行することによって生成され、ただし、cは0に等しく初期設定される。
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0。
ウィンドウ値wは、1以上の整数値である。この演算412は、次のように分岐なしで実施され得る(cが0に等しく初期設定される)。
k
i:=k
i-2
wc;
c:=1-LSB(k
i);
k
i:=k
i+c
【0060】
図4Bを参照すると、次に、最初に414で、Z'を群の恒等元に初期化すること(たとえば、Z'=0)によって、中間出力値Z'=k'・Pが計算される。次いで、416で、i=lからi=0までの各々について、次の演算が実施される。
w回行う:Z':=2・Z'(すなわち、値Z'をw回2倍にする);
Z':=Z'+k
i・P
iの各値について、値k
i・Pが、複数の値d・Pを記憶しているテーブル(たとえば、
図5におけるテーブル500)から取り出されるか、またはそのようなテーブル値から導出される。等価的に、Z'がZ'=k
l・Pに初期化され得(k
l・Pもまた、テーブル500から取り出され得る)、次いで416で、i=l-1からi=0までの各値について、次の演算が実施される。
w回行う:Z':=2・Z'(すなわち、値Z'をw回2倍にする);
Z':=Z'+k
i・P
最後に、418を実行することによって、出力値Zが中間出力値Z'から決定される。
k'が奇数である場合、Z=Z'+[-s・P]、および
k'が偶数である場合、Z=Z'+[-(s+1)・P]
【0061】
図6Aおよび
図6Bは、k、w、D、およびsのためのサンプル数値における上述のアルゴリズムの例示的な実行を示す。たとえば、図示の例では、k=31415であり、w=4であり、D={±1,±3,±5,±7,±9,±11,±13,±15}であり、s=1である。プロセス600は、602で、この場合は1に等しい、修正因子値sを最初に選択することを含み得る。604で、入力乗数値k=31415がベース値Pとともに受信される。次に606で、調整された乗数k'が、k'=k+sに基づいて生成され、したがって、s=1であるので、k'=31416である。16進表記では、k'=(7 10 11 8)
16である。次に、|d|・Pまたは-|d|・Pが、各値|d|∈Dについて計算され、テーブル内に記憶される。したがって、単なる一例として、608で、値P、-3・P、5・P、7・P、-9・P、11・P、-13・P、15・Pが事前計算され、テーブル内に記憶される。反対の符号付き値-P、3・P、-5・P、-7・P、9・P、-11・P、13・P、-15・Pは、記憶された値から容易に取得され得る。一態様によれば、値m・Pもまた、事前計算され、テーブル内に記憶され得、ただし、m=2である。-15・Pと15・Pとの間の他の値もまた、事前計算され、記憶され得る。
【0062】
次いで、再コーディングされた桁(k
3,k
2,k
1,k
0)が、i=3からi=0までについて610を実施することによって取得され得、ただし、最初にc:=0である。
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0。
これによって、再コーディングされた値(7,11,-5,9)
16、および桁上げc=1が生じる。実際には、7*16
3+11*16
2-5*16+9-1=31416である。
【0063】
図6Bを参照すると、612で、中間スカラ乗算出力Z'がZ'=k
3・Pに初期化され、これは7・Pに等しい。値7・Pは、テーブル内に記憶された値から取得され得る。次に、中間スカラ乗算出力Z'が、i=2からi=0までについて614を実施することによって計算される。
Z':=2・Z'(4回実施する);
Z':=Z'+k
i・P
したがって、図示の例では、Z'=DDDD(DDDD(DDDD(7・P)+11・P) -5・P)+9・Pであり、ただし、演算DDDD(x)は、オペランドxを4回2倍にした点を意味する。値11・P、-5・P、および9・Pは、すべて、テーブル内に記憶された値から直接取得されるか、またはそれから導出され得る。最後に、スカラ乗算出力Zは、616を実行することによって、Z'から取得され得る。
k'が奇数である場合、Z=Z'+[-s・P]、または
k'が偶数である場合、Z=Z'+[-(s+1)・P]
したがって、図示の例では、k'が偶数(k'=31416)であるので、Z=Z'-2・Pである。値-2・Pもまた、テーブル内に記憶された値(たとえば、2・P)から導出され得る。
【0064】
このようにして、スカラ乗算出力値Zを取得するために、固定数およびタイプの演算が実施され、これらの演算は、DDDDして次いで加算し、DDDDして次いで加算し、DDDDして次いで加算し、次いで減算することを含む。すなわち、値7・Pを4回2倍にして次いで11・Pを加算し、生じた値を4回2倍にして次いで-5・Pを加算し、生じた値を4回2倍にして次いで9・Pを加算し、次いで2・Pを減算(すなわち、-2・Pを加算)する。
【0065】
図7Aおよび
図7Bは、k、w、D、およびsのためのサンプル数値における上述のアルゴリズムの例示的な実行を示す。たとえば、図示の例では、k=27182であり、w=4であり、D={±1,±3,±5,±7,±9,±11,±13,±15}であり、s=1である。プロセス700は、702で、この場合は1に等しい、修正因子値sを最初に選択することを含み得る。704で、入力乗数値k=27182がベース値Pとともに受信される。次に706で、調整された乗数k'が、k'=k+sに基づいて生成され、したがって、s=1であるので、k'=27183である。16進表記では、k'=(6 10 2 15)
16である。次に、|d|・Pまたは-|d|・Pが、各値|d|∈Dについて計算され、テーブル内に記憶される。したがって、単なる一例として、708で、値P、3・P、5・P、7・P、9・P、11・P、13・P、15・Pが事前計算され、テーブル内に記憶される。反対の符号付き値-P、-3・P、-5・P、-7・P、-9・P、-11・P、-13・P、-15・Pは、記憶された値から容易に取得され得る。一態様によれば、値m・Pもまた、事前計算され、テーブル内に記憶され得、ただし、m=2である。-15・Pと15・Pとの間の他の値もまた、事前計算され、記憶され得る。
【0066】
次いで、再コーディングされた桁(k
3,k
2,k
1,k
0)が、i=3からi=0までについて710を実施することによって取得され得、ただし、最初にc:=0である。
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0。
これによって、再コーディングされた値(7,-5,-13,-1)
16、および桁上げc=0が生じる。実際には、7*16
3-5*16
2-13*16-1=27183である。
【0067】
図7Bを参照すると、712で、中間スカラ乗算出力Z'がZ'=k
3・Pに初期化され、これは7・Pに等しい。値7・Pは、テーブル内に記憶された値から取得され得る。次に、中間スカラ乗算出力Z'が、i=2からi=0までについて714を実施することによって計算される。
Z':=2・Z'(4回実施する);
Z':=Z'+k
i・P
したがって、図示の例では、Z'=DDDD(DDDD(DDDD(7・P) -5・P) -13・P) -Pである。値-5・P、-13・P、および-Pは、すべて、テーブル内に記憶された値から導出され得る。最後に、スカラ乗算出力Zは、716を実行することによって、Z'から取得され得る。
k'が奇数である場合、Z=Z'+[-s・P]、または
k'が偶数である場合、Z=Z'+[-(s+1)・P]
したがって、図示の例では、k'が奇数(k'=27183)であるので、Z=Z'-Pである。値-Pもまた、テーブル内に記憶された値(たとえば、P)から導出され得る。
【0068】
このようにして、スカラ乗算出力値Zを取得するために、固定数およびタイプの演算が実施され、これらの演算は、DDDDして次いで加算し、DDDDして次いで加算し、DDDDして次いで加算し、次いで減算することを含む。すなわち、値7・Pを4回2倍にして次いで-5・Pを加算し、生じた値を4回2倍にして次いで-13・Pを加算し、生じた値を4回2倍にして次いで-Pを加算し、次いでPを減算(すなわち、-Pを加算)する。
【0069】
図8Aおよび
図8Bは、k、w、D、およびsのためのサンプル数値における上述のアルゴリズムの例示的な実行を示す。たとえば、図示の例では、k=18746であり、w=4であり、D={±1,±3,±5,±7,±9,±11,±13,±15}であり、s=2である。プロセス800は、802で、この場合は2に等しい、修正因子値sを最初に選択することを含み得る。804で、入力乗数値k=18746がベース値Pとともに受信される。次に806で、調整された乗数k'が、k'=k+sに基づいて生成され、したがって、s=2であるので、k'=18748である。16進表記では、k'=(4 9 3 12)
16である。次に、|d|・Pまたは-|d|・Pが、各値|d|∈Dについて計算され、テーブル内に記憶される。したがって、単なる一例として、808で、値-P、-3・P、-5・P、-7・P、-9・P、-11・P、-13・P、-15・Pが事前計算され、テーブル内に記憶される。反対の符号付き値P、3・P、5・P、7・P、9・P、11・P、13・P、15・Pは、記憶された値から容易に取得され得る。一態様によれば、値m・Pもまた、事前計算され、テーブル内に記憶され得、ただし、m=2である。-15・Pと15・Pとの間の他の値もまた、事前計算され、記憶され得る。
【0070】
次いで、再コーディングされた桁(k
3,k
2,k
1,k
0)が、i=3からi=0までについて810を実施することによって取得され得、ただし、最初にc:=0である。
k
i:=k
i-2
wc;
k
iが偶数である場合:
k
i:=k
i+1;
c:=1;
それ以外の場合:
c:=0。
これによって、再コーディングされた値(5,-7,3,13)
16、および桁上げc=1が生じる。実際には、5*16
3-7*16
2+3*16+13=18749である。
【0071】
図8Bを参照すると、812で、中間スカラ乗算出力Z'がZ'=k
3・Pに初期化され、これは5・Pに等しい。値5・Pは、テーブル内に記憶された値(-5・P)から導出され得る。次に、中間スカラ乗算出力Z'が、i=2からi=0までについて814を実施することによって計算される。
Z':=2・Z'(4回実施する);
Z':=Z'+k
i・P
したがって、図示の例では、Z'=DDDD(DDDD(DDDD(5・P)-7・P)+3・P)+13・Pである。値-7・P、3・P、および13・Pは、すべて、テーブル内に記憶された値から取得されるか、またはそれらから導出され得る。最後に、スカラ乗算出力Zは、816を実行することによって、Z'から取得され得る。
k'が奇数である場合、Z=Z'+[-s・P]、または
k'が偶数である場合、Z=Z'+[-(s+1)・P]
したがって、図示の例では、k'が偶数(k'=18748)であるので、Z=Z'-3・Pである。値-3・Pもまた、テーブル内に記憶された値から取得され得る。
【0072】
このようにして、スカラ乗算出力値Zを取得するために、固定数およびタイプの演算が実施され、これらの演算は、DDDDして次いで加算し、DDDDして次いで加算し、DDDDして次いで加算し、次いで減算することを含む。すなわち、値5・Pを4回2倍にして次いで-7・Pを加算し、生じた値を4回2倍にして次いで3・Pを加算し、生じた値を4回2倍にして次いで13・Pを加算し、次いで3・Pを減算(すなわち、-3・Pを加算)する。
【0073】
図9は、本開示の一態様による処理回路において実行され得る方法900のフロー図を示す。第1に、902で、入力乗数kおよびベースPが受信される。次いで、904で、修正因子sが入力乗数kに加算されて、k'が生成され、ただし、kが奇数であるか偶数であるかにかかわらず、同じ修正因子sが入力乗数kに加算されて、k'が生成される。次に、906で、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'が計算され、ただし、Z'=k'・Pである。次いで、908で、k'が奇数である場合、s・PがZ'から減算されて、スカラ乗算出力Zが取得されるか、または、k'が偶数である場合、(s+1)・PがZ'から減算されて、スカラ乗算出力Zが取得される。910で、スカラ乗数出力Zが、データを安全にするために、暗号セキュリティアルゴリズムにおいて使用され得る。
【0074】
図10は、本開示の一態様による例示的なスカラ乗算回路1000の概略ブロック図を示す。スカラ乗算回路1000は、乗数kおよびベースP受信回路1002と、調整乗数k'生成回路1004と、中間スカラ出力生成回路1006と、スカラ出力生成回路1008とを含み得る。1つまたは複数の回路構成要素1002、1004、1006、1008は、たとえば、通信バス1010を通して互いに通信可能に結合され得る。
【0075】
乗数kおよびベースP受信回路1002は、入力乗数kおよびベースPを受信するために配線接続され、特別に設計され得る回路である。したがって、乗数kおよびベースP受信回路1002は、入力乗数kおよびベースPを受信するための手段の一例として働き得る。同様に、調整乗数生成回路1004は、kが奇数であるか偶数であるかにかかわらず、修正因子sを入力乗数kに加算して、k'を生成するために配線接続され、特別に設計され得る回路である。したがって、調整乗数生成回路1004は、kが奇数であるか偶数であるかにかかわらず、修正因子sを入力乗数kに加算して、k'を生成するための手段の一例として働き得る。
【0076】
中間スカラ出力生成回路1006は、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するために配線接続され、特別に設計され得る回路であり、ただし、Z'=k'・Pである。したがって、中間スカラ出力生成回路1006は、桁集合Dに属する桁k
iの列を含むk'の桁展開を使用することによって、中間スカラ乗算出力Z'を計算するための手段の一例であり、ただし、Z'=k'・Pである。スカラ出力生成回路1008は、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得するか、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得するために配線接続され、特別に設計され得る回路である。したがって、スカラ出力生成回路1008は、k'が奇数である場合、Z'からs・Pを減算して、スカラ乗算出力Zを取得するか、または、k'が偶数である場合、Z'から(s+1)・Pを減算して、スカラ乗算出力Zを取得するための手段の一例である。
【0077】
図1、
図2、
図3、
図4、
図5、
図6、
図7、
図8、
図9および/または
図10に示す構成要素、ステップ、特徴、および/または機能のうちの1つまたは複数は、単一の構成要素、ステップ、特徴、または機能に再構成され、かつ/または組み合わせられ、あるいは、いくつかの構成要素、ステップ、または機能において具現化され得る。本発明から逸脱することなく、さらなる要素、構成要素、ステップ、および/または機能が追加されてもよい。
図1、
図2、および/または
図10に示す装置、デバイス、および/または構成要素は、
図3、
図4A、
図4B、
図5、
図6A、
図6B、
図7A、
図7B、
図8A、および/または
図8Bにおいて説明した方法、特徴、またはステップのうちの1つまたは複数を実施するように構成され得る。本明細書で説明するアルゴリズムはまた、ソフトウェアにおいて効率的に実装されてもよく、かつ/またはハードウェアに組み込まれてもよい。
【0078】
その上、本開示の一態様では、
図1に示す処理回路102は、
図3、
図4A、
図4B、
図5、
図6A、
図6B、
図7A、
図7B、
図8A、および/または
図8Bと関連する本文とにおいて説明したアルゴリズム、方法、および/またはステップを実施するように特に設計かつ/または配線接続される専用プロセッサ(たとえば、特定用途向け集積回路(たとえば、ASIC))であり得る。したがって、そのような専用プロセッサ(たとえば、ASIC)は、
図3、
図4A、
図4B、
図5、
図6A、
図6B、
図7A、
図7B、
図8A、および/または
図8Bにおいて説明したアルゴリズム、方法、および/またはステップを実行するための手段の一例であり得る。
【0079】
また、本開示の態様は、フローチャート、フロー図、構造図またはブロック図として示されるプロセスとして説明される場合があることに留意されたい。フローチャートは動作を逐次プロセスとして説明する場合があるが、動作の多くは並行してまたは同時に実施され得る。加えて、動作の順序は並べ替えられてもよい。プロセスは、その動作が完了したとき、終了する。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応する場合がある。プロセスが関数に対応するとき、その終了は、関数が呼出し元関数またはメイン関数に戻ることに対応する。
【0080】
その上、記憶媒体は、データを記憶するための1つまたは複数のデバイスを表すことができ、これらのデバイスは、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、および/または他の機械可読媒体、ならびに、情報を記憶するためのプロセッサ可読媒体および/またはコンピュータ可読媒体を含む。「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」という用語は、限定はしないが、ポータブルまたは固定記憶デバイス、光記憶デバイス、ならびに、命令および/またはデータを記憶または格納することが可能な様々な他の媒体のような非一時的媒体を含み得る。したがって、本明細書で説明する様々な方法は、「機械可読媒体」、「コンピュータ可読媒体」、および/または「プロセッサ可読媒体」内に記憶され、1つまたは複数のプロセッサ、機械および/またはデバイスによって実行され得る命令および/またはデータによって、完全にまたは部分的に実装され得る。
【0081】
さらに、本開示の態様は、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、またはそれらの任意の組合せによって実装され得る。ソフトウェア、ファームウェア、ミドルウェアまたはマイクロコードにおいて実装されるとき、必要なタスクを実施するためのプログラムコードまたはコードセグメントは、記憶媒体または他のストレージなどの機械可読媒体内に記憶され得る。プロセッサは、必要なタスクを実施し得る。コードセグメントは、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造もしくはプログラムステートメントの任意の組合せを表す場合がある。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡すことおよび/または受け取ることによって、別のコードセグメントまたはハードウェア回路に結合され得る。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む任意の適切な手段を介して渡され、転送され、または送信され得る。
【0082】
本明細書で開示する例に関して説明する様々な例示的な論理ブロック、モジュール、回路、要素、および/または構成要素は、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理構成要素、個別ゲートもしくはトランジスタ論理、個別ハードウェア構成要素、または本明細書で説明する機能を実施するように設計されたそれらの任意の組合せで実装または実施され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティング構成要素の組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、いくつかのマイクロプロセッサ、DSPコアと連係した1つもしくは複数のマイクロプロセッサ、または他の任意のそのような構成として実装され得る。
【0083】
本明細書で開示する例に関して説明する方法またはアルゴリズムは、処理ユニット、プログラミング命令、または他の指示の形で、ハードウェアにおいて直接、プロセッサによって実行可能なソフトウェアモジュール中で、またはこの両方の組合せで具現化されることがあり、単一のデバイスに含まれること、または複数のデバイスにわたって分散されることがある。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている任意の他の形態の記憶媒体内に存在し得る。プロセッサが記憶媒体から情報を読み取り、記憶媒体に情報を書き込むことができるように、記憶媒体がプロセッサに結合され得る。代替的に、記憶媒体は、プロセッサと一体であり得る。
【0084】
当業者には、本明細書で開示する態様に関して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップが、電子ハードウェア、コンピュータソフトウェア、またはその両方の組合せとして実装されてもよいことが、さらに諒解されよう。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップについて、上記では概してそれらの機能に関して説明した。そのような機能がハードウェアとして実装されるか、ソフトウェアとして実装されるかは、特定の用途およびシステム全体に課される設計制約によって決まる。
【0085】
本明細書で説明する本発明の様々な特徴は、本発明から逸脱することなく、異なるシステム内で実装されてもよい。本開示のこれまでの態様は例にすぎず、本発明を限定するものと解釈されるべきではないことに留意されたい。本開示の態様の説明は、例示的であることが意図され、特許請求の範囲を限定することは意図されない。したがって、本教示は、他のタイプの装置に容易に適用することが可能であり、多くの代替形態、変更形態、および変形形態が当業者には明らかであろう。
【符号の説明】
【0086】
100 電子デバイス
102 処理回路
104 メモリ回路
106 ディスプレイ
108 I/Oデバイス
110 通信インターフェース
112 通信バス、暗号回路
202、1000 スカラ乗算回路
204 暗号アルゴリズムモジュール、暗号モジュール
206 鍵
208 デジタル署名
300 アルゴリズム
304 第1のアルゴリズム、アルゴリズムX
308 第2のアルゴリズム、アルゴリズムY
322 出力
500 事前計算テーブル、テーブル
1002 乗数kおよびベースP受信回路、回路構成要素
1004 調整乗数k'生成回路、回路構成要素、調整乗数生成回路
1006 中間スカラ出力生成回路、回路構成要素
1008 スカラ出力生成回路、回路構成要素
1010 通信バス