推しを推すだけの人生

可読性のなさには自信があります

楕円曲線暗号に対するサイドチャネル攻撃

【はじめに】

こんにちは,最近は Vtuber のぽこピーをよく見ています.とてもかわいい
今回はリレーブログで,テーマは楕円曲線暗号でした.ここ最近仕事が異常に積もってヤバめなので今回は簡単に説明するだけです.正確性とか可読性は期待しないでください.いつかちゃんと書き直します.
前回はこちら次回はこちら

楕円曲線暗号に対するDPA

楕円曲線暗号は,楕円曲線上の点の集合が群を成すことを利用していて,スカラー倍(k倍)した点Pの結果であるkPをみたときに,kを簡単には推測できない性質があります.(離散対数問題)このスカラー倍は乗算と二乗算を使ったバイナリ法によって実装されています.(バイナリ法は,秘密鍵のビットを走査して,1なら乗算を行い,0なら行わないという機序で計算されます.RSAですが,ここに自分の実装があるので興味があれば見てみてください.)

さて,バイナリ法は通常のモジュラ計算より速いことが知られているので,バイナリ法を使った実際の暗号は多く存在しています.ECCもバイナリ法で実装されていることがあります.しかし,このバイナリ法は,暗号鍵のビットが 1 か 0 かで計算内容が変わるので,速い視点で見たときに電力消費量に差がでます.これを利用したのがDPAという攻撃方法です.(これも私の実装があるので興味がある人は見てみてください.AESですが...)

DPAへの対策】

DPAへの対策は,例えばスカラー k にランダムな要素 r をに取り込む方法があります.r の取り方によっては(具体的には楕円曲線上の点の数 E の上で k' = k + r とする),スカラー倍の計算において, Q = k'P = kP となるので計算結果に変更は加えず,鍵を秘匿することができます.一方で,メモリだったり,計算量が新しく問題になります.

他にも,バイナリ法でビットが 1 であろうと 0 であろうと計算するダミーを加える方法もあります.

【参考文献】

ソフトウェア対策

ECCへのサイドチャネル攻撃