暗号技術の実装と数学

MITSUNARI Shigeo
MITSUNARI ShigeoSoftware Engineer at Cybozu Labs, Inc
暗号技術の実装と数学
2022/6/8
IMI Colloquium 九州大学
サイボウズ・ラボ 光成滋生
• 自己紹介
• 暗号技術の概説
• TLS
• 楕円曲線
• DH鍵共有
• 署名
• スカラー倍算
• ペアリング
• BLS署名
• マルチスカラー倍算
目次
2 /35
• サイボウズ・ラボで暗号や最適化に関するR&D
• OSS(Open Source Software)の開発
• Xbyak
• x86/x64用JITアセンブラ
• 高速な暗号ライブラリを開発するために開発
• IntelのoneDNN (AIフレームワーク)などで利用されている
• スーパーコンピュータ富岳用のXbyak/oneDNNにも関わる
• mcl/bls
• ペアリング暗号ライブラリ
• BLS署名ライブラリ
• Ethereumなどのブロックチェーン系ソフトで利用されている
自己紹介
3 /35
• 安全な通信をするために必要な性質
• 機密性 : 通信内容を他人が盗聴しても内容が分からない
• 完全性 : 通信内容を他人が改竄すると分かる・改竄できない
• 真正性 : 通信相手が本当にその人であること
• 機密性だけでは安全ではない
• 共通暗号(機密性)
• 秘密鍵𝑠で平文(ひらぶん)𝑚を暗号化(Encrypt)
• 𝑐 = 𝐸𝑛𝑐(𝑠, 𝑚) ; 𝑐は暗号文
• 秘密鍵𝑠で𝑐を復号する(Decrypt)と元に戻る
• 𝑚 = 𝐷𝑒𝑐(𝑠, 𝑐)
• 認証付き暗号AEAD(機密性+完全性)
• 暗号文𝑐が秘密鍵𝑠で作られたものでなければエラー
• 通常の共通鍵暗号は問答無用で「復号する」
安全な通信と暗号技術
4 /35
• ある人があるデータを生成したことを検証する仕組み
• 鍵生成 : アリスは署名鍵𝑠と検証鍵𝑆の組を生成する
• 検証鍵𝑆を検証者に渡す(署名鍵は誰にも見せない)
• 署名 : アリスはデータ𝑚と署名鍵𝑠から署名𝜎を生成する
• 𝜎 = 𝑆𝑖𝑔𝑛(𝑠, 𝑚)
• 検証 : 検証者は検証鍵𝑆, データ𝑚, 署名𝜎の組が正しければ1,
そうでなければ0を返す
• 𝑉𝑒𝑟𝑖𝑓𝑦 𝑆, 𝑚, 𝜎 ∈ {0,1}
• 「偽造できない」
• 署名鍵𝑠無しで、アリスが生成した
正しい組 𝑚𝑖, 𝜎𝑖 以外の𝑉𝑒𝑟𝑖𝑓𝑦 𝑆, 𝑚, 𝜎 = 1
となる署名は作れない
署名(真正性)
署名σ
アリス
署名鍵𝑠
ボブ
検証鍵𝑆
鍵生成
署名
データ𝑚
受理(1)
拒否(0)
検証
検証鍵𝑆
5 /35
• 安全な通信をするためのプロトコル
• DH鍵共有+AEAD+公開鍵証明書+署名
TLS
アリス ボブ(サーバ)
値A
値B
DH鍵共有により
秘密の値を共有
AEADの秘密鍵
公開鍵証明書X ボブのサーバ情報とボブの検証鍵の
ペアに認証局CAによる署名をつけたもの
送信データに対するボブの署名鍵による署名
CAの検証鍵で
Xの正しさを確認
ボブの検証鍵で
データの正しさを確認
安全な秘密の通信
CA
(信頼できる第三者機関)
6 /35
• 楕円曲線の準備
• 有限体𝔽𝑝上の楕円曲線𝐸を固定する
• 素数𝑟を固定し𝐺 = 𝐸 𝑟 = {𝑃 ∈ 𝐸(𝔽𝑝)|𝑟𝑃 = 0}とする
• 𝑃を𝐺の生成元とすると𝐺 = {0, 𝑃, 2𝑃, … , 𝑟 − 1 𝑃}
• アリスとボブのDH鍵共有
• アリスは𝑎 ∈ [0, 𝑟 − 1]をランダムに選び𝐴 = 𝑎𝑃をボブに送る
• ボブは𝑏 ∈ [0, 𝑟 − 1]をランダムに選び𝐵 = 𝑏𝑃をアリスに送る
• アリスは𝑎𝐵 = 𝑎𝑏𝑃, ボブは𝑏𝐴 = 𝑏𝑎𝑃を計算し共有情報とする
• DLPとDHP
• DLP : 𝑄 ∈ 𝐺がgivenの下で𝑄 = 𝑎𝑃となる𝑎を求める問題
• DHP : 𝑎𝑃, 𝑏𝑃がgivenの下で𝑎𝑏𝑃を求める問題(𝑎, 𝑏は未知)
• 現在最良のアルゴリズムは𝑂( 𝑟) (on 非量子計算機)
• 𝑟~2256の大きさなら十分安全
楕円DH鍵共有
7 /35
• 𝑛ビット整数𝑎と楕円曲線の点𝑃に対して𝑎𝑃を求める
• ナイーブな方法
• 𝑃, 𝑃 + 𝑃 = 2𝑃, 2𝑃 + 𝑃 = 3𝑃, … ; 𝑎~2256だと計算が終わらない
• バイナリ法
• 𝑎 = σ𝑖=0
𝑛−1
𝑎𝑖2𝑖と2進数展開(𝑎𝑖 ∈ {0,1})
• 𝑎 = 𝑎0 + 2(𝑎1 + … + 2(𝑎𝑛−3+2(𝑎𝑛−2 + 2𝑎𝑛−1)) … )なので
• 𝑏0 = 𝑎𝑛−1, 𝑏𝑖 = 𝑎𝑛−1−𝑖 + 2𝑏𝑖−1とすると𝑏𝑛−1 = 𝑎
• 𝑏0𝑃, 𝑏1𝑃, … , 𝑏𝑛−1𝑃 = 𝑎𝑃を計算(高々2𝑛回)
• ウィンドウ法
• 𝑎 = σ𝑖 𝑎𝑖 2𝑤 𝑖, 𝑎𝑖 ∈ [0,2𝑤 − 1]として同様の計算
• 𝑡𝑃(𝑡 ∈ [0,2𝑤
− 1])は事前計算(コストは2𝑤
+
𝑛
𝑤
+ 𝑛)
• 𝑛~256なら𝑤 = 4が最小, 𝑃が固定なら大きくしてもよい
スカラー倍算
8 /35
• Weierstrass方程式 𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏
• アフィン座標
• 一般の点𝑃𝑖 = (𝑥𝑖, 𝑦𝑖)に対して𝑃1 + 𝑃2 = (𝑥3, 𝑦3)
• 𝑥3 = 𝜆2 − 𝑥1 + 𝑥2 , 𝑦3 = −𝜆 𝑥3 − 𝑥1 − 𝑦1
• 𝜆 = Τ
(𝑦1 − 𝑦2) (𝑥1 − 𝑥2) if 𝑥1 ≠ 𝑥2 else Τ
(3𝑥1
2
+ 𝑎) (2𝑦1)
• ADD : 𝑃 + 𝑄(𝑃 ≠ 𝑄)の計算, DBL : 2𝑃の計算
• 有限体𝔽𝑝の四則演算のおおよそのコスト
• 除算はとても重たい add : mul : div = 1 : 7.3 : 940(BLS12-381)
• 射影座標 𝑃 = 𝑋: 𝑌: 𝑍 = (𝑥, 𝑦), 𝑥 = 𝑋/𝑍, 𝑦 = 𝑌/𝑍
• 加算・乗算回数は増えるが除算が無くなる
• Jacobi座標 𝑃 = 𝑋: 𝑌: 𝑍 = (𝑥, 𝑦), 𝑥 = 𝑋/𝑍2,𝑦 = 𝑌/𝑍3
• 射影座標よりADDは少し重たいがDBLが少し軽い
楕円曲線の座標選択
9 /35
• NAF (Non Adjacent Form)
• 楕円曲線の点𝑃 = (𝑥, 𝑦)に対して−𝑃 = (𝑥, −𝑦)
• [0,2𝑤 − 1]のテーブルではなく[−2𝑤−1, 2𝑤−1 − 1]とする
• − 𝑎𝑃 = −𝑎 𝑃なのでテーブルサイズを半分にできる
• テーブルの偶数倍番目を除去
• 𝑎𝑖が偶数なら𝑄 = 2𝑤
𝑄 + 𝑎𝑖𝑃 = 2 2𝑤−1
𝑄 +
𝑎𝑖
2
𝑃
• 「2倍してから加算」の代わりに「加算してから2倍」
• 𝑎𝑖が奇数になるまで繰り返す
• テーブルは奇数番目だけでよい
• 𝑤 = 6にしても最初の𝑤 = 4と同じ事前計算コスト
ウィンドウ法の事前計算の削減
𝑄 ∶ 途中までの加算結果
𝑄 ← 2𝑤𝑄 : 2𝑤倍
𝑄 ← 𝑄 + 𝑎𝑖𝑃 : 𝑎𝑖𝑃は事前計算のテーブル引き
10 /35
• 𝑋を任意のビット列からなる集合𝑋 = 0,1 ∗
• 𝑌を𝑛ビット列からなる集合𝑌 = 0,1 𝑛
• 𝑛ビットのハッシュ関数𝐻: 𝑋 → 𝑌とは次を満たすもの
• 一方向性
• ℎ ∈ 𝑌に対して𝐻 𝑥 = ℎとなる𝑥を求めるのは困難(𝑂(2𝑛))
• 第二原像計算困難性
• 𝑥 ∈ 𝑋に対して𝐻 𝑥 = 𝐻(𝑥′)となる𝑥′(𝑥 ≠ 𝑥)を求めるのは困難
• 𝑂(2𝑛
)
• 衝突困難性
• 𝐻 𝑥1 = 𝐻(𝑥2)となる𝑥1, 𝑥2 ∈ 𝑋(𝑥1 ≠ 𝑥2)で求めるのは困難
• 𝑂(2 Τ
𝑛 2)
ハッシュ関数
11 /35
• 楕円曲線を用いた署名アルゴリズムの一つ
• TLSやSSH, ビットコインなど広く使われている
• 事前準備
• 楕円曲線𝐸/𝔽𝑝と𝐺 = ⟨𝑃⟩, 𝑃 ∈ 𝐸[𝑟]を共通パラメータとする
• 鍵生成
• 乱数𝑠 ∈ 𝔽𝑟を署名鍵, 𝑆 = 𝑠𝑃を検証鍵とする
• 署名
• 𝑚 ∈ 𝑋に対して乱数𝑘 ∈ 𝔽𝑟をとり𝑘𝑃の𝑥座標を𝑟とする
• 𝜎 = (𝑟, (𝐻 𝑚 + 𝑠𝑟)/𝑘)が署名
• 検証
• 𝑚, 𝜎 = (𝑟, 𝑡)に対して𝑅 = (𝐻 𝑚 𝑃 + 𝑟𝑆)/𝑡を計算して
𝑅の𝑥座標が𝑟なら受理、そうでなければ拒否する
ECDSA
12 /35
• ECDSAの証明の検証では「𝑥1𝑃1 + 𝑥2𝑃2」の計算が必要
• 𝑃は固定なのでウィンドウ法の𝑤を大きく取れる
• テーブルサイズは大きくなるのでメモリが必要
• 𝑄 = 𝑥1𝑃1 + 𝑥2𝑃2
• 𝑥𝑖𝑃𝑖をしてから足すのではなく同時にする
• 𝑃1, 𝑃2それぞれのウィンドウ法の事前計算をする
• 𝑄 ← 2𝑤𝑄の処理が半分になる
• 𝑄 = 𝑥1𝑃1 + ⋯ + 𝑥𝑛𝑃𝑛の場合2倍算は1/𝑛になる
• ただし必要なテーブルは𝑛倍なので逆に遅くなることも
マルチスカラー倍算
𝑄 ∶ 途中までの加算結果
𝑄 ← 2𝑤𝑄 : 2𝑤倍
𝑄 ← 𝑄 + 𝑎𝑖𝑃1 : 𝑎𝑖𝑃1は事前計算のテーブル引き
𝑄 ← 𝑄 + 𝑏𝑖𝑃2 : 𝑏𝑖𝑃2は事前計算のテーブル引き
13 /35
• Faster Point Multiplication on Elliptic Curves with
Efficient Endomorphisms (Gallant, Lambert, Vanstone)
• https://www.iacr.org/archive/crypto2001/21390189.pdf
• 𝑙𝑒𝑛(𝑥)を𝑥のビット長とする
• (𝑥の分解)次の様な𝐿があるとする
• ∀𝑃 ∈ 𝐺について𝐿𝑃が高速計算可能
• ∀𝑥 ∈ 𝔽𝑟について
𝑥 = 𝑎1 + 𝑎2𝐿で𝑙𝑒𝑛 𝑎𝑖 ~𝑙𝑒𝑛(𝑥)/2となる𝑎𝑖を高速に求められる
• 𝑥𝑃 = 𝑎1 + 𝑎2𝐿𝑃 = 𝑎1𝑃 + 𝑎2(𝐿𝑃)
• 𝑃と𝐿𝑃に関するマルチスカラー倍算を適用
• DBLの回数は1/2
• ADDの回数はほぼ変わらず
スカラー倍算をマルチスカラー倍算に
14 /35
• ビットコインで利用される楕円曲線
• 𝑦2 = 𝑥3 + 7
• 𝑝=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
• 𝑟 = #𝐸(𝔽𝑝) =
0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
• 𝑤3
− 1 = 0 𝑖𝑛 𝔽𝑝の非自明な解𝑤 =
−1+ −3
2
∈ 𝔽𝑝, (𝑝 + 1 ≡ 0(𝑚𝑜𝑑 4))
• 𝜑 𝑥, 𝑦 = (𝑤𝑥, 𝑦)とすると𝜑: 𝐸 𝔽𝑝 → 𝐸(𝔽𝑝)は有理写像
• 準同型写像でもある
• 𝜑 𝑃 = 𝐿𝑃となる𝐿 ∈ 𝔽𝑟が存在する(𝐿3
= 1)
• 𝐿𝑃 = (𝑤𝑥, 𝑦)なので𝐿倍は高速に計算できる
secp256k1と自己同型写像
15 /35
• 𝑣 = 𝑎1, 𝑎2 ∈ 𝔽𝑝に対して𝑓 𝑣 = 𝑎1 + 𝑎2𝐿 mod 𝑟とする
• 2行2列の整数係数行列𝐵 = (𝑏𝑖𝑗)で
• det 𝐵 ≠ 0
• 𝑓 𝑣1 = 𝑓 𝑣2 = 0 for 𝑣𝑖 = (𝑏𝑖1, 𝑏𝑖2)
• 𝑙𝑒𝑛 𝑣𝑖 ~𝑙𝑒𝑛(𝑛)/2
• 𝑥の分解方法
• 𝛾1, 𝛾2 = 𝑥, 0 𝐵−1 in ℚとする
• 𝑐𝑖 = 𝐼𝑛𝑡(𝛾𝑖) ; 𝛾𝑖に一番近い整数とすると 𝑐1, 𝑐2 𝐵は(𝑥, 0)に近い
• 𝑎1, 𝑎2 = 𝑥, 0 − 𝑐1, 𝑐2 𝐵とすると概ね𝑙𝑒𝑛 𝑎𝑖 は小さい
• 𝑓 𝑎1, 𝑎2 = 𝑎1 + 𝑎2𝐿 = 𝑥 + 0𝐿 − 𝑐1, 𝑐2 𝐵 1
𝐿
= 𝑥 − 𝑐1, 𝑐2
𝑏11 + 𝑏12𝐿
𝑏12 + 𝑏22𝐿
≡ 𝑥 mod 𝑟
𝑥の分解
16 /35
• 拡張Euclid互除法を使う
• 𝑟と𝐿について𝑠𝑖𝑟 + 𝑡𝑖𝐿 = 𝑟𝑖
• 𝑠0𝑟 + 𝑡0𝐿 = 𝑟0 : (1 ⋅ 𝑟 + 0 ⋅ 𝐿 = 𝑟)
• 𝑠1𝑟 + 𝑡1𝐿 = 𝑟1 : (0 ⋅ 𝑟 + 1 ⋅ 𝐿 = 𝐿)
• 𝑟𝑖 > 𝑟𝑖+1 > ⋯ , 𝑟𝑖−1 𝑡𝑖 + 𝑟𝑖 𝑡𝑖−1 = 𝑟
• 𝑚を𝑟𝑚 > 𝑟となる最大の𝑚として
𝑣1 = 𝑟𝑚+1, −𝑡𝑚+1 , 𝑣2 = (𝑟𝑚, −𝑡𝑚)が望みのもの
• 詳細は論文参照
行列𝐵の構築方法
17 /35
• Weilペアリング
• 𝐸/𝔽𝑝 : 楕円曲線, 𝐺 = 𝐸 𝑟 = 𝑃 ∈ 𝐸 𝔽𝑝 𝑟𝑃 = 0 = Τ
ℤ
𝑟ℤ
2
• 𝑒: 𝐺 × 𝐺 → 𝜇𝑟 ≔ {𝑥 ∈ 𝔽𝑝|𝑥𝑟 = 1}で次の性質を満たす
• 𝑒 𝑃1 + 𝑃2, 𝑄 = 𝑒 𝑃1, 𝑄 𝑒(𝑃2, 𝑄) for 𝑃, 𝑃1, 𝑃2, 𝑄 ∈ 𝐺
• 𝑒 𝑃, 𝑃 = 1, 𝑒 𝑃, 𝑄 = 𝑒 𝑄, 𝑃 −1
• 注意 : 𝑃, 𝑄 ∈ 𝐺に対して適当な点𝑋, 𝑌 ∈ 𝐺をとり
𝑑𝑖𝑣 𝑓 = 𝑚 𝑋 + 𝑃 − 𝑚 𝑋
𝑑𝑖𝑣 𝑔 = 𝑚 𝑌 + 𝑄 − 𝑚 𝑌
となる関数𝑓, 𝑔 ∈ 𝔽𝑝(𝐸)をとると𝑒 𝑃, 𝑄 =
𝑓 𝑌+𝑄
𝑔 𝑋+𝑃
⋅
𝑔 𝑋
𝑓 𝑌
とかける
• See "The Arithmetic of Elliptc Curves", Silverman
• 𝑓(𝑌 + 𝑄)などの計算方法(Millerアルゴリズム)は今回は省略
ペアリング
18 /35
• 𝐺 = 𝐸[𝑟], 𝑃, 𝑄 ∈ 𝐺をfix
• ECDLP : 𝑎𝑃, 𝑃 : givenに対して𝑎 ∈ 𝔽𝑟を求める
• 𝑢 ≔ 𝑒 𝑎𝑃, 𝑄 = 𝑒 𝑃, 𝑄 𝑎
• もし𝑢と𝑒(𝑃, 𝑄)に対するDLPが解ければECDLPが解ける
• ECDLPをDLPに帰着するためにペアリングを利用
• MOV(Menezes-Okamoto-Vanstone) reduction, 1990
• 帰着後のDLPが解けなければ暗号に利用可能 1999~
DLPとペアリングの関係
19 /35
• 暗号で使うには𝑓: 𝐺1 × 𝐺2 → 𝐺𝑇で
• 𝑓 𝑃1 + 𝑃2, 𝑄 = 𝑓 𝑃1, 𝑄 𝑓 𝑃2, 𝑄
• 𝑓 𝑃, 𝑄1 + 𝑄2 = 𝑓 𝑃, 𝑄1 𝑓 𝑃, 𝑄2
を満たし、𝐺1, 𝐺2, 𝐺𝑇のDLPが困難なら概ね利用可能
• 𝐺1, 𝐺2は加法巡回群, 𝐺𝑇は乗法巡回群表記とする
• Weilペアリングよりも計算効率がよいもの
• Tateペアリング, ateペアリング, etc.
• 𝐺𝑇の拡大次数がなるべく小さいもの
• 有限体のDLPを解くコストとECDLPを解くコストの兼ね合い
• 𝐺1 = 𝐺2 : 対称ペアリング
• 𝐺1 ≠ 𝐺2 : 非対称ペアリング : より計算効率がよい
• type 2 : 𝐺1と𝐺2の同型写像が計算しやすいもの
• type 3 : 簡単に計算できる同型写像が知られていないもの
ペアリングの亜種
20 /35
• 現在128bitセキュリティ相当で一番利用されている
• 曲線 : 𝑦2 = 𝑥3 + 4 /𝔽𝑝 (𝑝は381bit素数で𝑝 mod 6 ≡ 1)
• 𝐺1 = 𝐸[𝑟] (𝑝は255bit素数)
• 𝜑: 𝐸 ∋ 𝑥, 𝑦 ↦ 𝑥′, 𝑦′ =
𝑥
𝑤2 ,
𝑦
𝑤3 ∈ 𝐸′ = 𝑦′2 = 𝑥′3 + 4𝜉
• 𝜉 = 1 + 𝑖, 𝑣3
= 𝜉, 𝑤2
= 𝑣, 𝐺2 = 𝐸′
𝔽𝑝2 𝑟
• 𝐺𝑇 = {𝑥 ∈ 𝔽𝑝12|𝑥12 = 1}, 𝔽𝑝12 = 𝔽𝑝6[𝑤], 𝔽𝑝6 = 𝔽𝑝3[𝑣]
• 𝑒 𝑃, 𝑄 = 𝐹𝐸 𝑀𝐿 𝑃, 𝑄
• 𝑀𝐿 : 双線型性を持つMiller Loop関数, 𝐹𝐸 𝑥 = 𝑥𝑟0 : 固定べき
• 安全性仮定(用途に応じていろいろ提案されている)
• DDH(Decisional DH)仮定
• 𝐺𝑖 ∋ 𝑃, 𝑎𝑃, 𝑏𝑃, 𝑐𝑃に対し𝑎𝑏𝑃 =
?
𝑐𝑃を判定困難
• co-DHP*仮定 :𝑎𝑃1, 𝑄 ∈ 𝐺1, 𝑎𝑃2 ∈ 𝐺2に対して𝑎𝑄は計算困難
BLS12-381曲線(Barreto-Lynn-Scott)
21 /35
• 𝔽𝑝2 = 𝔽𝑝[𝑖] where 𝑖2 = −1 in 𝔽𝑝
• 𝑥 = 𝑎 + 𝑏𝑖, 𝑦 = 𝑐 + 𝑑𝑖の乗算
• 𝑥𝑦 = 𝑎 + 𝑏𝑖 𝑐 + 𝑑𝑖 = 𝑎𝑐 − 𝑏𝑑 + 𝑎𝑑 + 𝑏𝑐 𝑖
• 𝑎𝑑 + 𝑏𝑐 = 𝑎 + 𝑏 𝑐 + 𝑑 − 𝑎𝑐 − 𝑏𝑑
• 𝑋 = 𝑎𝑐, 𝑌 = 𝑏𝑑, 𝑍 = (𝑎 + 𝑏)(𝑐 + 𝑑)の乗算3回(Karatsuba)
• 𝔽𝑝の乗算=𝑝ビット整数同士の乗算 + mod p
• 本当はMontgomery乗算を使うがここでは省略
• コストは乗算よりmod pがやや重たい
• 𝑋, 𝑌, 𝑍をmod pなしで計算(Mitsunari, et al. Pairing2010)
• 𝑎𝑐 − 𝑏𝑑 = (𝑋 − 𝑌) mod p
• 𝑎𝑑 + 𝑏𝑐 = (𝑍 − 𝑋 − 𝑌) mod p
• mod pの処理が3回から2回に減る
𝔽𝑝2の演算の効率化
22 /35
• BLS12-381でのFrobenius写像
• 𝐹: 𝔽𝑝2 ∋ 𝑎 + 𝑏𝑖 ↦ 𝑎 + 𝑏𝑖 𝑝 = 𝑎 − 𝑏𝑖 because 𝑝 mod 4 = 3
• 𝐺2 = 𝐸′
𝔽𝑝2 𝑟 に対するFrobenius写像
• 𝐹′ 𝑥′, 𝑦′ ≔ 𝜑𝐹𝜑−1 𝑥′, 𝑦′ = 𝜑𝐹 𝑥′/𝑤2, 𝑦′/𝑤3 = 𝜑൫
൯
(
)
𝑥′/
𝑤2 𝑝
, 𝑦′
/𝑤3 𝑝
= 𝑥′𝑝
/𝑤2𝑝−2
, 𝑦′𝑝
/𝑤3𝑝−3
=
(𝐹 𝑥′ 𝑔−2, 𝐹 𝑦′ 𝑔−3) where 𝑔 ≔ 𝑤
6
𝑝−1
6 = 𝜉
𝑝−1
6
• 𝐹′12 = 𝑖𝑑𝐺2
, 𝐹′ 𝑃 = 𝑧𝑃 where 𝑧 = -0xd201000000010000
• 𝑡 ∈ 𝔽𝑟(𝑙𝑒𝑛(𝑟)は256bit程度)に対して
• 𝑡 = 𝑢0 + 𝑢1𝑧 + 𝑢2𝑧2 + 𝑢3𝑧3とすると𝑙𝑒𝑛 𝑢𝑖 ~64𝑏𝑖𝑡
• 𝑢0 ≔ 𝑡 mod 𝑧, 𝑢1 ≔
𝑡−𝑢0
𝑧
mod 𝑧, ...で計算可能
• 𝑡𝑃 = 𝑢0𝑃 + 𝑢1𝐹′ 𝑃 + 𝑢2𝐹′2 𝑃 + 𝑢3𝐹′3(𝑃)
𝐺2のスカラー倍算(GLV method)
23 /35
• 𝐻𝑖: 0,1 ∗ → 𝐺𝑖をハッシュ関数とする
• 𝑃𝑖を𝐺𝑖の生成元を共有
• 𝑒 ≔ 𝑒 𝑃1, 𝑃2 ∈ 𝐺𝑇とすると 𝑒 = 𝐺𝑇
• 鍵生成
• 𝑠 ∈ 𝔽𝑟を署名鍵として𝑆 = 𝑠𝑃2 ∈ 𝐺2を検証鍵とする
• 検証鍵は検証者に配布する(公開鍵)
• 署名
• メッセージ𝑚に対して𝜎 = 𝑠𝐻1 𝑚 ∈ 𝐺1が署名
• 検証
• メッセージ𝑚と署名𝜎と検証鍵𝑆に対して
• 𝑒(𝐻1 𝑚 , 𝑆) =
?
𝑒(𝜎, 𝑃2)を確認する
• validなら左辺=𝑒 𝐻1 𝑚 , 𝑠𝑃2 = 𝑒 𝑠𝐻1 𝑚 , 𝑃2 =右辺
BLS署名(Boneh–Lynn–Shacham)
24 /35
• 攻撃者が知り得るもの
• 公開パラメータ𝑃1, 𝑃2
• 検証鍵𝑆 = 𝑠𝑃2
• 過去の署名 𝑚に対する𝜎 = 𝑠𝐻1(𝑚)
• 偽造したいもの
• 𝑚′ ≠ 𝑚で𝜎′ = 𝑠𝐻1(𝑚′)
• それを作れたとしたら
• 𝐻1 𝑚′ = 𝑡𝐻1(𝑚)となる𝑡は分からない
• ECDLPとハッシュ関数の"ランダムさ"
• 𝑠𝐻1 𝑚 , 𝑠𝑃2, 𝐻1(𝑚′) から𝜎′ = 𝑠𝐻1(𝑚′)が作れたことになる
• co-DHP*の困難さを破れることになる
BLS署名の安全性の根拠(の雰囲気)
25 /35
• 𝑒(𝐻1 𝑚 , 𝑆) =
?
𝑒(𝜎, 𝑃2)
• 𝑒 𝑃, 𝑄 = 𝑀𝐿 𝑃, 𝑄 𝑟0 : 𝑀𝐿は双線型性を持つ
• 𝑒 𝐻1 𝑚 , 𝑆 = 𝑒 𝜎, 𝑃2 ⇔ 𝑒 𝐻1 𝑚 , 𝑆 𝑒 𝜎, −𝑃2 = 1
⇔ 𝐹𝐸 𝑀𝐿 𝐻1 𝑚 , 𝑆 𝑀𝐿 𝜎, −𝑃2 = 1
• 演算コスト𝑀𝐿 ∶ 𝐹𝐸 = 1: 1.4なので40%の高速化
検証部分
26 /35
• 𝑓 𝑥 = 𝑓0 + 𝑓1𝑥 + ⋯ + 𝑓𝑘−1𝑥𝑘−1 ∈ 𝔽𝑟[𝑥] : 𝑘 − 1次多項式
• 𝑛個の相異なる𝑥1, … , 𝑥𝑛に対して𝑦𝑖 = 𝑓(𝑥𝑖)とする
• ここから任意の相異なる𝑘個のペア 𝑥𝑖𝑎
, 𝑦𝑖𝑎
1 ≤ 𝑎 ≤ 𝑘 を取る
•
𝑦𝑖1
⋮
𝑦𝑖𝑘
=
1 ⋯ 𝑥𝑖1
𝑘−1
⋮ ⋱ ⋮
1 ⋯ 𝑥𝑖𝑘
𝑘−1
𝑓0
⋮
𝑓𝑘−1
= 𝐴
𝑓0
⋮
𝑓𝑘−1
• 𝐴 = 𝑥𝑖𝑎
𝑏
はdet 𝐴 ≠ 0なので (𝑦𝑖𝑎
)から(𝑓𝑖)が求まる
• 秘密分散
• 𝑓0を秘密とする
• 𝑓1, … , 𝑓𝑘−1をランダムに選び𝑛個のペア 𝑥𝑖𝑎
, 𝑦𝑖𝑎
= 𝑓(𝑥𝑖𝑎
) を作る
• そのうち𝑘個のペアで𝑓0を復元できる
• 𝑘 − 1以下なら不可能(𝑓0の取り得る可能性は𝔽𝑟全て)
Lagrange補間
27 /35
• 単なる秘密分散は一度しか使えない
• BLS署名の検証鍵𝑠𝑃2, 署名𝑠𝐻1(𝑚)
• BLS署名の署名鍵𝑠を秘密分散する
• 𝑓 𝑥 = 𝑠 + 𝑓1𝑥 + ⋯ + 𝑓𝑘−1𝑥𝑘−1 : 𝑘次多項式(𝑓𝑖はランダム)
• 𝑥1, … , 𝑥𝑛に対して署名鍵𝑠𝑖 = 𝑓(𝑥𝑖)をユーザ𝑥𝑖に配布する
• 検証鍵𝑠𝑃も公開
• 𝑠𝑖𝑃2が各自の検証鍵
• 𝑚に対する各自の署名𝑠𝑖𝐻1(𝑚)
• 𝑛人が署名𝑠𝑖𝐻1(𝑚)を公開
• 検証して𝑘個集まれば𝐴−1 𝑠𝑖𝑎
𝐻1 𝑚 により𝑠𝐻1(𝑚)を復元
• 𝑠𝑃で検証可能
• 「多数決」に利用可能
BLS署名と秘密分散
28 /35
• 複数の署名を一つにまとめる
• 検証コストを下げる
• 検証に必要な署名のデータ量を減らす
• BLS multi-signatures with public-key aggregation, 2018
• https://crypto.stanford.edu/~dabo/pubs/papers/BLSmultisig.html
• 𝐻2: 𝐺2
𝑛
→ 𝔽𝑟
𝑛
: 𝑛個ハッシュ関数
• 鍵生成 : 𝑠𝑖 ∈ 𝔽𝑟 ; 署名鍵, 𝑆𝑖 = 𝑠𝑖𝑃1 ∈ 𝐺1 ; 検証鍵
• 署名 : 𝜎𝑖 = 𝑠𝑖𝐻1(𝑚)
• 𝑛個の𝑚に対する署名{𝑆𝑖, 𝜎𝑖}を集約する
• 𝑡1, … , 𝑡𝑛 ← 𝐻2(𝑆1, … , 𝑆𝑛), 𝜎 ≔ σ𝑖 𝑡𝑖𝜎𝑖
• 𝑆𝑖 , 𝑚, 𝜎に対する検証
• 𝑡1, … , 𝑡𝑛 ← 𝐻2(𝑆1, … , 𝑆𝑛), 𝑒 𝑃1, 𝜎 = 𝑒(σ𝑖 𝑡𝑖𝑆𝑖 , 𝐻1 𝑚 )
集約署名
29 /35
• 𝑛個のメッセージ𝑚𝑖に対する検証鍵𝑆𝑖と署名𝜎𝑖
• 𝐹𝐸 𝑀𝐿 𝐻1 𝑚𝑖 , 𝑆𝑖 𝑀𝐿 𝜎𝑖, −𝑃2 = 1 for all 𝑛 ※
• 普通にやると 2𝑀𝐿 + 1𝐹𝐸 × 𝑛の検証コスト
• 乱数を使うトリック
• 𝑟1, … , 𝑟𝑛を乱数として1/|𝑟𝑖|の確率を除いて※が成立する
⇔ 𝐹𝐸 ෑ
𝑖
𝑀𝐿 𝐻1 𝑚𝑖 , 𝑆𝑖
𝑟𝑖𝑀𝐿 𝜎𝑖, −𝑃2
𝑟𝑖 = 1
⇔ 𝐹𝐸 ෑ
𝑖
(𝑀𝐿 𝐻1 𝑚𝑖 , 𝑟𝑖𝑆𝑖 𝑀𝐿 ෍
𝑖
𝑟𝑖𝜎𝑖, −𝑃2 = 1
• 検証コスト 𝑛 + 1 𝑀𝐿 + 1𝐹𝐸 + 𝑛𝑀𝑈𝐿2+𝑛𝑀𝑈𝐿𝑆𝑈𝑀1
• 𝑟𝑖 ~264程度だとFE>(G1-mul + G2-mul)なので速くなる
複数の署名をまとめて検証する
30 /35
• 𝑄 = σ𝑖 𝑥𝑖𝑃𝑖の形の演算が割と出てくる
• ここではMULSUMと呼ぶことにする
• マルチスカラー倍算の考察からコストはDBL+(n/const)ADD
• もう少し改善したい
• {𝑥𝑖}が小さいときを考える
• 例 : 2𝑃1 + 𝑃2 + 3𝑃3 + 2𝑃4 + 2𝑃5 + 3𝑃6 + ⋯
= 𝑃2 + ⋯ + 2 𝑃1 + 𝑃4 + 𝑃5 + ⋯ + 3 𝑃3 + 𝑃6 + ⋯ + 4(…
• 𝑥𝑖が同じものをグルーピングする
• 𝑛が大きくなるほど効果が高くなる
MULSUMの高速化
31 /35
• 𝑧 ← σ𝑖=0
𝑛−1
𝑥𝑖𝑃𝑖の擬似コード
• 𝐿 : max 𝑙𝑒𝑛 𝑥𝑖
• 𝑐 : まとめるテーブルのビット長
• 𝑁 = 2𝑐 : テーブルT[𝑁]のサイズ, 𝑀 =
𝐿
𝑐
: 区切った個数
• 𝑇 𝑖 ← 0 for all 𝑖
• for 𝑤 from 0 to 𝑀 − 1
• for 𝑖 from 0 to 𝑛 − 1
• 𝑣 ← 𝑥𝑖の𝑐𝑤から𝑐ビットの値
• T[𝑣] ← 𝑇 𝑣 + 𝑃𝑖 // 𝑣倍される𝑃𝑖を集める
• 𝑠𝑢𝑚 ← 0, 𝑊[𝑤] ← 0
• for 𝑖 from 0 to 𝑁
• 𝑠𝑢𝑚 ← 𝑠𝑢𝑚 + 𝑇[𝑁 − 𝑖]
• 𝑊 𝑤 ← 𝑊 𝑤 + 𝑠𝑢𝑚
MULSUMの概要(1/2)
𝑥𝑖
𝑐
𝑣
𝑊 𝑤
= ⋯ + 𝑇 𝑁 − 2 + 𝑇 𝑁 − 1 + 𝑇 𝑁
+ 𝑇 𝑁 − 1 + 𝑇 𝑁 + 𝑇 𝑁
= 𝑇[1] + 2𝑇[2] + 3𝑇 3 + ⋯
← 𝑤番目
32 /35
• 続き
• 𝑊 𝑤 = 𝑤番目の𝑥𝑖達の𝑃𝑖のスカラー倍の和
• 𝑍 ← 0
• for 𝑤 from 0 to 𝑀 − 1
• 𝑍 ← 2𝑐𝑍 + 𝑊[𝑀 − 1 − 𝑤]
• 演算コスト
• 𝐿 : 𝑥𝑖の最大ビット(e.g., 256), 𝑁 = 2𝑐
, 𝑀 = 𝐿/𝑐
• ADD : 𝑀 𝑛 + 2𝑁 + 𝑀 = Τ
𝐿(𝑛 + 2𝑐+1 + 1) 𝑐, DBL : 𝐿
• ADDのコストが最小になる𝑐
• (適当に見つけた)近似値𝑐min = 𝑖𝑛𝑡(log2 𝑛 − log2(log2 𝑛))
• 𝑛~229ぐらいまでで誤差±1ぐらい
• 余談 : int(log2 𝑛)は𝑛の2進数表記の左から初めて1がある位置
• 𝑛 = 1024なら𝑐 = 8(𝑛 ≈ 64(GLV適用前)が速度の分岐点)
MULSUMの概要(2/2)
𝑥𝑖
𝑐
𝑣
← 𝑤番目
33 /35
• 楕円曲線の加算𝑃 + 𝑄
• 片方の点がAffine座標と分かっていれば加算を効率よくできる
• [𝑥: 𝑦: 𝑧]の𝑧を1にできる
• しかしJacobi/Proj→Affineは除算が入るので遅い
• mul : div = 1:100
• 複数の逆数をまとめて処理
• 𝑎, 𝑏の逆数 Τ
1 𝑎 , Τ
1 𝑏は Τ
𝑏 𝑎𝑏, Τ
𝑎 𝑎𝑏なので1/𝑎𝑏の逆数1回で計算
• {𝑥1, 𝑥2, 𝑥3, 𝑥4}に対して
• 𝑇[] = {𝑥1, 𝑥1𝑥2, 𝑥1𝑥2𝑥3, 𝑥1𝑥2𝑥3𝑥4}, 𝑟 ← 𝑥1𝑥2𝑥3𝑥4
−1
• Τ
1 𝑥4 = 𝑥1𝑥2𝑥3 𝑟, 𝑟 ← 𝑟𝑥4 = 𝑥1𝑥2𝑥3
−1
Τ
1 𝑥3 = 𝑥1𝑥2 𝑟, 𝑟 ← 𝑟𝑥3 = 𝑥1𝑥2
−1
Τ
1 𝑥2 = 𝑥1 𝑟, 𝑟 ← 𝑟𝑥1 = 𝑥1
−1
• 𝑛回逆数が「 2(𝑛 − 1)回の乗算+1回除算」になる
複数の除算とAffine化の高速化
34 /35
• 暗号の実装では
• 代数的な構造を利用したアルゴリズムの改良
• 特定の環境の演算コストに応じた組合せ論的最適化
• 乱数を用いた確率的アルゴリズムの導入(やや飛び道具)
• などを組み合わせる
まとめ
35 /35
1 of 35

Recommended

エンジニアの個人ブランディングと技術組織 by
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
23.3K views40 slides
分散システムについて語らせてくれ by
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
119.4K views45 slides
例外設計における大罪 by
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
68.5K views37 slides
ChatGPT 人間のフィードバックから強化学習した対話AI by
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIShota Imai
106K views52 slides
開発速度が速い #とは(LayerX社内資料) by
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
61.5K views18 slides
TLS, HTTP/2演習 by
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習shigeki_ohtsu
13.1K views129 slides

More Related Content

What's hot

RSA暗号運用でやってはいけない n のこと #ssmjp by
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
58.4K views32 slides
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回 by
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回Yoshiki Hayama
27.9K views134 slides
テスト文字列に「うんこ」と入れるな by
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
177.9K views16 slides
ネットワーク ゲームにおけるTCPとUDPの使い分け by
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
61.4K views63 slides
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料) by
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)NTT DATA Technology & Innovation
5.9K views56 slides
世界一わかりやすいClean Architecture by
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
47.1K views77 slides

What's hot(20)

RSA暗号運用でやってはいけない n のこと #ssmjp by sonickun
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun58.4K views
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回 by Yoshiki Hayama
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
Yoshiki Hayama27.9K views
テスト文字列に「うんこ」と入れるな by Kentaro Matsui
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui177.9K views
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料) by NTT DATA Technology & Innovation
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)
世界一わかりやすいClean Architecture by Atsushi Nakamura
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura47.1K views
Python 3.9からの新定番zoneinfoを使いこなそう by Ryuji Tsutsui
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui6.9K views
SPAセキュリティ入門~PHP Conference Japan 2021 by Hiroshi Tokumaru
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru99.5K views
目grep入門 +解説 by murachue
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue89.4K views
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える by pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome65.3K views
オブジェクト指向エクササイズのススメ by Yoji Kanno
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno57.1K views
本当は恐ろしい分散システムの話 by Kumazaki Hiroki
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki686.1K views
イベント駆動プログラミングとI/O多重化 by Gosuke Miyashita
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita15.4K views
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2 by Preferred Networks
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks1.5K views
それはYAGNIか? それとも思考停止か? by Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima29.3K views
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料) by 株式会社MonotaRO Tech Team
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive by Tokoroten Nakayama
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama122.2K views
Redisの特徴と活用方法について by Yuji Otani
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani101.5K views
マルチテナントのアプリケーション実装〜実践編〜 by Yoshiki Nakagawa
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa4.2K views
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!) by Trainocate Japan, Ltd.
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)

Similar to 暗号技術の実装と数学

楕円曲線入門 トーラスと楕円曲線のつながり by
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながりMITSUNARI Shigeo
18K views59 slides
楕円曲線と暗号 by
楕円曲線と暗号楕円曲線と暗号
楕円曲線と暗号MITSUNARI Shigeo
5.2K views46 slides
University CodeSprint 4 - Magic value by
University CodeSprint 4 - Magic valueUniversity CodeSprint 4 - Magic value
University CodeSprint 4 - Magic valuesatanic
3.2K views60 slides
暗認本読書会13 advanced by
暗認本読書会13 advanced暗認本読書会13 advanced
暗認本読書会13 advancedMITSUNARI Shigeo
700 views19 slides
Computing for Isogeny Kernel Problem by Groebner Basis by
Computing for Isogeny Kernel Problem by Groebner BasisComputing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner BasisYasu Math
293 views19 slides
ニューラル論文を読む前に by
ニューラル論文を読む前にニューラル論文を読む前に
ニューラル論文を読む前にHayahide Yamagishi
341 views22 slides

Similar to 暗号技術の実装と数学(20)

楕円曲線入門 トーラスと楕円曲線のつながり by MITSUNARI Shigeo
楕円曲線入門トーラスと楕円曲線のつながり楕円曲線入門トーラスと楕円曲線のつながり
楕円曲線入門 トーラスと楕円曲線のつながり
MITSUNARI Shigeo18K views
University CodeSprint 4 - Magic value by satanic
University CodeSprint 4 - Magic valueUniversity CodeSprint 4 - Magic value
University CodeSprint 4 - Magic value
satanic 3.2K views
Computing for Isogeny Kernel Problem by Groebner Basis by Yasu Math
Computing for Isogeny Kernel Problem by Groebner BasisComputing for Isogeny Kernel Problem by Groebner Basis
Computing for Isogeny Kernel Problem by Groebner Basis
Yasu Math293 views
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用 by MITSUNARI Shigeo
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
MITSUNARI Shigeo1.6K views
SMO徹底入門 - SVMをちゃんと実装する by sleepy_yoshi
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
sleepy_yoshi31.2K views
PRML第6章「カーネル法」 by Keisuke Sugawara
PRML第6章「カーネル法」PRML第6章「カーネル法」
PRML第6章「カーネル法」
Keisuke Sugawara28.4K views
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis by Deep Learning JP
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
[DL輪読会]Parallel WaveNet: Fast High-Fidelity Speech Synthesis
Deep Learning JP5.9K views
これならわかる最適化数学8章_動的計画法 by kenyanonaka
これならわかる最適化数学8章_動的計画法これならわかる最適化数学8章_動的計画法
これならわかる最適化数学8章_動的計画法
kenyanonaka743 views
第15回 配信講義 計算科学技術特論B(2022) by RCCSRENKEI
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI172 views
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018) by MITSUNARI Shigeo
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
ペアリングベースの効率的なレベル2準同型暗号(SCIS2018)
MITSUNARI Shigeo4.4K views
ブロックチェーン系プロジェクトで着目される暗号技術 by MITSUNARI Shigeo
ブロックチェーン系プロジェクトで着目される暗号技術ブロックチェーン系プロジェクトで着目される暗号技術
ブロックチェーン系プロジェクトで着目される暗号技術
MITSUNARI Shigeo6K views
読書会 「トピックモデルによる統計的潜在意味解析」 第2回 3.2節 サンプリング近似法 by 健児 青木
読書会 「トピックモデルによる統計的潜在意味解析」 第2回 3.2節 サンプリング近似法読書会 「トピックモデルによる統計的潜在意味解析」 第2回 3.2節 サンプリング近似法
読書会 「トピックモデルによる統計的潜在意味解析」 第2回 3.2節 サンプリング近似法
健児 青木12.2K views
PRML復々習レーン#3 3.1.3-3.1.5 by sleepy_yoshi
PRML復々習レーン#3 3.1.3-3.1.5PRML復々習レーン#3 3.1.3-3.1.5
PRML復々習レーン#3 3.1.3-3.1.5
sleepy_yoshi3K views
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃 by trmr
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
katagaitai workshop #7 crypto ナップサック暗号と低密度攻撃
trmr 8.3K views

More from MITSUNARI Shigeo

範囲証明つき準同型暗号とその対話的プロトコル by
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコルMITSUNARI Shigeo
2K views23 slides
暗認本読書会12 by
暗認本読書会12暗認本読書会12
暗認本読書会12MITSUNARI Shigeo
702 views25 slides
暗認本読書会11 by
暗認本読書会11暗認本読書会11
暗認本読書会11MITSUNARI Shigeo
454 views18 slides
暗認本読書会10 by
暗認本読書会10暗認本読書会10
暗認本読書会10MITSUNARI Shigeo
419 views22 slides
暗認本読書会9 by
暗認本読書会9暗認本読書会9
暗認本読書会9MITSUNARI Shigeo
2.3K views29 slides
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen by
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
2.4K views20 slides

More from MITSUNARI Shigeo(20)

範囲証明つき準同型暗号とその対話的プロトコル by MITSUNARI Shigeo
範囲証明つき準同型暗号とその対話的プロトコル範囲証明つき準同型暗号とその対話的プロトコル
範囲証明つき準同型暗号とその対話的プロトコル
MITSUNARI Shigeo2K views
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen by MITSUNARI Shigeo
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
MITSUNARI Shigeo2.4K views
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法 by MITSUNARI Shigeo
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
MITSUNARI Shigeo3.9K views
WebAssembly向け多倍長演算の実装 by MITSUNARI Shigeo
WebAssembly向け多倍長演算の実装WebAssembly向け多倍長演算の実装
WebAssembly向け多倍長演算の実装
MITSUNARI Shigeo3.9K views
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化 by MITSUNARI Shigeo
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
Lifted-ElGamal暗号を用いた任意関数演算の二者間秘密計算プロトコルのmaliciousモデルにおける効率化
MITSUNARI Shigeo4K views
BLS署名の実装とその応用 by MITSUNARI Shigeo
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo1.8K views
Intro to SVE 富岳のA64FXを触ってみた by MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo11.6K views

暗号技術の実装と数学

  • 2. • 自己紹介 • 暗号技術の概説 • TLS • 楕円曲線 • DH鍵共有 • 署名 • スカラー倍算 • ペアリング • BLS署名 • マルチスカラー倍算 目次 2 /35
  • 3. • サイボウズ・ラボで暗号や最適化に関するR&D • OSS(Open Source Software)の開発 • Xbyak • x86/x64用JITアセンブラ • 高速な暗号ライブラリを開発するために開発 • IntelのoneDNN (AIフレームワーク)などで利用されている • スーパーコンピュータ富岳用のXbyak/oneDNNにも関わる • mcl/bls • ペアリング暗号ライブラリ • BLS署名ライブラリ • Ethereumなどのブロックチェーン系ソフトで利用されている 自己紹介 3 /35
  • 4. • 安全な通信をするために必要な性質 • 機密性 : 通信内容を他人が盗聴しても内容が分からない • 完全性 : 通信内容を他人が改竄すると分かる・改竄できない • 真正性 : 通信相手が本当にその人であること • 機密性だけでは安全ではない • 共通暗号(機密性) • 秘密鍵𝑠で平文(ひらぶん)𝑚を暗号化(Encrypt) • 𝑐 = 𝐸𝑛𝑐(𝑠, 𝑚) ; 𝑐は暗号文 • 秘密鍵𝑠で𝑐を復号する(Decrypt)と元に戻る • 𝑚 = 𝐷𝑒𝑐(𝑠, 𝑐) • 認証付き暗号AEAD(機密性+完全性) • 暗号文𝑐が秘密鍵𝑠で作られたものでなければエラー • 通常の共通鍵暗号は問答無用で「復号する」 安全な通信と暗号技術 4 /35
  • 5. • ある人があるデータを生成したことを検証する仕組み • 鍵生成 : アリスは署名鍵𝑠と検証鍵𝑆の組を生成する • 検証鍵𝑆を検証者に渡す(署名鍵は誰にも見せない) • 署名 : アリスはデータ𝑚と署名鍵𝑠から署名𝜎を生成する • 𝜎 = 𝑆𝑖𝑔𝑛(𝑠, 𝑚) • 検証 : 検証者は検証鍵𝑆, データ𝑚, 署名𝜎の組が正しければ1, そうでなければ0を返す • 𝑉𝑒𝑟𝑖𝑓𝑦 𝑆, 𝑚, 𝜎 ∈ {0,1} • 「偽造できない」 • 署名鍵𝑠無しで、アリスが生成した 正しい組 𝑚𝑖, 𝜎𝑖 以外の𝑉𝑒𝑟𝑖𝑓𝑦 𝑆, 𝑚, 𝜎 = 1 となる署名は作れない 署名(真正性) 署名σ アリス 署名鍵𝑠 ボブ 検証鍵𝑆 鍵生成 署名 データ𝑚 受理(1) 拒否(0) 検証 検証鍵𝑆 5 /35
  • 6. • 安全な通信をするためのプロトコル • DH鍵共有+AEAD+公開鍵証明書+署名 TLS アリス ボブ(サーバ) 値A 値B DH鍵共有により 秘密の値を共有 AEADの秘密鍵 公開鍵証明書X ボブのサーバ情報とボブの検証鍵の ペアに認証局CAによる署名をつけたもの 送信データに対するボブの署名鍵による署名 CAの検証鍵で Xの正しさを確認 ボブの検証鍵で データの正しさを確認 安全な秘密の通信 CA (信頼できる第三者機関) 6 /35
  • 7. • 楕円曲線の準備 • 有限体𝔽𝑝上の楕円曲線𝐸を固定する • 素数𝑟を固定し𝐺 = 𝐸 𝑟 = {𝑃 ∈ 𝐸(𝔽𝑝)|𝑟𝑃 = 0}とする • 𝑃を𝐺の生成元とすると𝐺 = {0, 𝑃, 2𝑃, … , 𝑟 − 1 𝑃} • アリスとボブのDH鍵共有 • アリスは𝑎 ∈ [0, 𝑟 − 1]をランダムに選び𝐴 = 𝑎𝑃をボブに送る • ボブは𝑏 ∈ [0, 𝑟 − 1]をランダムに選び𝐵 = 𝑏𝑃をアリスに送る • アリスは𝑎𝐵 = 𝑎𝑏𝑃, ボブは𝑏𝐴 = 𝑏𝑎𝑃を計算し共有情報とする • DLPとDHP • DLP : 𝑄 ∈ 𝐺がgivenの下で𝑄 = 𝑎𝑃となる𝑎を求める問題 • DHP : 𝑎𝑃, 𝑏𝑃がgivenの下で𝑎𝑏𝑃を求める問題(𝑎, 𝑏は未知) • 現在最良のアルゴリズムは𝑂( 𝑟) (on 非量子計算機) • 𝑟~2256の大きさなら十分安全 楕円DH鍵共有 7 /35
  • 8. • 𝑛ビット整数𝑎と楕円曲線の点𝑃に対して𝑎𝑃を求める • ナイーブな方法 • 𝑃, 𝑃 + 𝑃 = 2𝑃, 2𝑃 + 𝑃 = 3𝑃, … ; 𝑎~2256だと計算が終わらない • バイナリ法 • 𝑎 = σ𝑖=0 𝑛−1 𝑎𝑖2𝑖と2進数展開(𝑎𝑖 ∈ {0,1}) • 𝑎 = 𝑎0 + 2(𝑎1 + … + 2(𝑎𝑛−3+2(𝑎𝑛−2 + 2𝑎𝑛−1)) … )なので • 𝑏0 = 𝑎𝑛−1, 𝑏𝑖 = 𝑎𝑛−1−𝑖 + 2𝑏𝑖−1とすると𝑏𝑛−1 = 𝑎 • 𝑏0𝑃, 𝑏1𝑃, … , 𝑏𝑛−1𝑃 = 𝑎𝑃を計算(高々2𝑛回) • ウィンドウ法 • 𝑎 = σ𝑖 𝑎𝑖 2𝑤 𝑖, 𝑎𝑖 ∈ [0,2𝑤 − 1]として同様の計算 • 𝑡𝑃(𝑡 ∈ [0,2𝑤 − 1])は事前計算(コストは2𝑤 + 𝑛 𝑤 + 𝑛) • 𝑛~256なら𝑤 = 4が最小, 𝑃が固定なら大きくしてもよい スカラー倍算 8 /35
  • 9. • Weierstrass方程式 𝑦2 = 𝑥3 + 𝑎𝑥 + 𝑏 • アフィン座標 • 一般の点𝑃𝑖 = (𝑥𝑖, 𝑦𝑖)に対して𝑃1 + 𝑃2 = (𝑥3, 𝑦3) • 𝑥3 = 𝜆2 − 𝑥1 + 𝑥2 , 𝑦3 = −𝜆 𝑥3 − 𝑥1 − 𝑦1 • 𝜆 = Τ (𝑦1 − 𝑦2) (𝑥1 − 𝑥2) if 𝑥1 ≠ 𝑥2 else Τ (3𝑥1 2 + 𝑎) (2𝑦1) • ADD : 𝑃 + 𝑄(𝑃 ≠ 𝑄)の計算, DBL : 2𝑃の計算 • 有限体𝔽𝑝の四則演算のおおよそのコスト • 除算はとても重たい add : mul : div = 1 : 7.3 : 940(BLS12-381) • 射影座標 𝑃 = 𝑋: 𝑌: 𝑍 = (𝑥, 𝑦), 𝑥 = 𝑋/𝑍, 𝑦 = 𝑌/𝑍 • 加算・乗算回数は増えるが除算が無くなる • Jacobi座標 𝑃 = 𝑋: 𝑌: 𝑍 = (𝑥, 𝑦), 𝑥 = 𝑋/𝑍2,𝑦 = 𝑌/𝑍3 • 射影座標よりADDは少し重たいがDBLが少し軽い 楕円曲線の座標選択 9 /35
  • 10. • NAF (Non Adjacent Form) • 楕円曲線の点𝑃 = (𝑥, 𝑦)に対して−𝑃 = (𝑥, −𝑦) • [0,2𝑤 − 1]のテーブルではなく[−2𝑤−1, 2𝑤−1 − 1]とする • − 𝑎𝑃 = −𝑎 𝑃なのでテーブルサイズを半分にできる • テーブルの偶数倍番目を除去 • 𝑎𝑖が偶数なら𝑄 = 2𝑤 𝑄 + 𝑎𝑖𝑃 = 2 2𝑤−1 𝑄 + 𝑎𝑖 2 𝑃 • 「2倍してから加算」の代わりに「加算してから2倍」 • 𝑎𝑖が奇数になるまで繰り返す • テーブルは奇数番目だけでよい • 𝑤 = 6にしても最初の𝑤 = 4と同じ事前計算コスト ウィンドウ法の事前計算の削減 𝑄 ∶ 途中までの加算結果 𝑄 ← 2𝑤𝑄 : 2𝑤倍 𝑄 ← 𝑄 + 𝑎𝑖𝑃 : 𝑎𝑖𝑃は事前計算のテーブル引き 10 /35
  • 11. • 𝑋を任意のビット列からなる集合𝑋 = 0,1 ∗ • 𝑌を𝑛ビット列からなる集合𝑌 = 0,1 𝑛 • 𝑛ビットのハッシュ関数𝐻: 𝑋 → 𝑌とは次を満たすもの • 一方向性 • ℎ ∈ 𝑌に対して𝐻 𝑥 = ℎとなる𝑥を求めるのは困難(𝑂(2𝑛)) • 第二原像計算困難性 • 𝑥 ∈ 𝑋に対して𝐻 𝑥 = 𝐻(𝑥′)となる𝑥′(𝑥 ≠ 𝑥)を求めるのは困難 • 𝑂(2𝑛 ) • 衝突困難性 • 𝐻 𝑥1 = 𝐻(𝑥2)となる𝑥1, 𝑥2 ∈ 𝑋(𝑥1 ≠ 𝑥2)で求めるのは困難 • 𝑂(2 Τ 𝑛 2) ハッシュ関数 11 /35
  • 12. • 楕円曲線を用いた署名アルゴリズムの一つ • TLSやSSH, ビットコインなど広く使われている • 事前準備 • 楕円曲線𝐸/𝔽𝑝と𝐺 = ⟨𝑃⟩, 𝑃 ∈ 𝐸[𝑟]を共通パラメータとする • 鍵生成 • 乱数𝑠 ∈ 𝔽𝑟を署名鍵, 𝑆 = 𝑠𝑃を検証鍵とする • 署名 • 𝑚 ∈ 𝑋に対して乱数𝑘 ∈ 𝔽𝑟をとり𝑘𝑃の𝑥座標を𝑟とする • 𝜎 = (𝑟, (𝐻 𝑚 + 𝑠𝑟)/𝑘)が署名 • 検証 • 𝑚, 𝜎 = (𝑟, 𝑡)に対して𝑅 = (𝐻 𝑚 𝑃 + 𝑟𝑆)/𝑡を計算して 𝑅の𝑥座標が𝑟なら受理、そうでなければ拒否する ECDSA 12 /35
  • 13. • ECDSAの証明の検証では「𝑥1𝑃1 + 𝑥2𝑃2」の計算が必要 • 𝑃は固定なのでウィンドウ法の𝑤を大きく取れる • テーブルサイズは大きくなるのでメモリが必要 • 𝑄 = 𝑥1𝑃1 + 𝑥2𝑃2 • 𝑥𝑖𝑃𝑖をしてから足すのではなく同時にする • 𝑃1, 𝑃2それぞれのウィンドウ法の事前計算をする • 𝑄 ← 2𝑤𝑄の処理が半分になる • 𝑄 = 𝑥1𝑃1 + ⋯ + 𝑥𝑛𝑃𝑛の場合2倍算は1/𝑛になる • ただし必要なテーブルは𝑛倍なので逆に遅くなることも マルチスカラー倍算 𝑄 ∶ 途中までの加算結果 𝑄 ← 2𝑤𝑄 : 2𝑤倍 𝑄 ← 𝑄 + 𝑎𝑖𝑃1 : 𝑎𝑖𝑃1は事前計算のテーブル引き 𝑄 ← 𝑄 + 𝑏𝑖𝑃2 : 𝑏𝑖𝑃2は事前計算のテーブル引き 13 /35
  • 14. • Faster Point Multiplication on Elliptic Curves with Efficient Endomorphisms (Gallant, Lambert, Vanstone) • https://www.iacr.org/archive/crypto2001/21390189.pdf • 𝑙𝑒𝑛(𝑥)を𝑥のビット長とする • (𝑥の分解)次の様な𝐿があるとする • ∀𝑃 ∈ 𝐺について𝐿𝑃が高速計算可能 • ∀𝑥 ∈ 𝔽𝑟について 𝑥 = 𝑎1 + 𝑎2𝐿で𝑙𝑒𝑛 𝑎𝑖 ~𝑙𝑒𝑛(𝑥)/2となる𝑎𝑖を高速に求められる • 𝑥𝑃 = 𝑎1 + 𝑎2𝐿𝑃 = 𝑎1𝑃 + 𝑎2(𝐿𝑃) • 𝑃と𝐿𝑃に関するマルチスカラー倍算を適用 • DBLの回数は1/2 • ADDの回数はほぼ変わらず スカラー倍算をマルチスカラー倍算に 14 /35
  • 15. • ビットコインで利用される楕円曲線 • 𝑦2 = 𝑥3 + 7 • 𝑝=0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f • 𝑟 = #𝐸(𝔽𝑝) = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 • 𝑤3 − 1 = 0 𝑖𝑛 𝔽𝑝の非自明な解𝑤 = −1+ −3 2 ∈ 𝔽𝑝, (𝑝 + 1 ≡ 0(𝑚𝑜𝑑 4)) • 𝜑 𝑥, 𝑦 = (𝑤𝑥, 𝑦)とすると𝜑: 𝐸 𝔽𝑝 → 𝐸(𝔽𝑝)は有理写像 • 準同型写像でもある • 𝜑 𝑃 = 𝐿𝑃となる𝐿 ∈ 𝔽𝑟が存在する(𝐿3 = 1) • 𝐿𝑃 = (𝑤𝑥, 𝑦)なので𝐿倍は高速に計算できる secp256k1と自己同型写像 15 /35
  • 16. • 𝑣 = 𝑎1, 𝑎2 ∈ 𝔽𝑝に対して𝑓 𝑣 = 𝑎1 + 𝑎2𝐿 mod 𝑟とする • 2行2列の整数係数行列𝐵 = (𝑏𝑖𝑗)で • det 𝐵 ≠ 0 • 𝑓 𝑣1 = 𝑓 𝑣2 = 0 for 𝑣𝑖 = (𝑏𝑖1, 𝑏𝑖2) • 𝑙𝑒𝑛 𝑣𝑖 ~𝑙𝑒𝑛(𝑛)/2 • 𝑥の分解方法 • 𝛾1, 𝛾2 = 𝑥, 0 𝐵−1 in ℚとする • 𝑐𝑖 = 𝐼𝑛𝑡(𝛾𝑖) ; 𝛾𝑖に一番近い整数とすると 𝑐1, 𝑐2 𝐵は(𝑥, 0)に近い • 𝑎1, 𝑎2 = 𝑥, 0 − 𝑐1, 𝑐2 𝐵とすると概ね𝑙𝑒𝑛 𝑎𝑖 は小さい • 𝑓 𝑎1, 𝑎2 = 𝑎1 + 𝑎2𝐿 = 𝑥 + 0𝐿 − 𝑐1, 𝑐2 𝐵 1 𝐿 = 𝑥 − 𝑐1, 𝑐2 𝑏11 + 𝑏12𝐿 𝑏12 + 𝑏22𝐿 ≡ 𝑥 mod 𝑟 𝑥の分解 16 /35
  • 17. • 拡張Euclid互除法を使う • 𝑟と𝐿について𝑠𝑖𝑟 + 𝑡𝑖𝐿 = 𝑟𝑖 • 𝑠0𝑟 + 𝑡0𝐿 = 𝑟0 : (1 ⋅ 𝑟 + 0 ⋅ 𝐿 = 𝑟) • 𝑠1𝑟 + 𝑡1𝐿 = 𝑟1 : (0 ⋅ 𝑟 + 1 ⋅ 𝐿 = 𝐿) • 𝑟𝑖 > 𝑟𝑖+1 > ⋯ , 𝑟𝑖−1 𝑡𝑖 + 𝑟𝑖 𝑡𝑖−1 = 𝑟 • 𝑚を𝑟𝑚 > 𝑟となる最大の𝑚として 𝑣1 = 𝑟𝑚+1, −𝑡𝑚+1 , 𝑣2 = (𝑟𝑚, −𝑡𝑚)が望みのもの • 詳細は論文参照 行列𝐵の構築方法 17 /35
  • 18. • Weilペアリング • 𝐸/𝔽𝑝 : 楕円曲線, 𝐺 = 𝐸 𝑟 = 𝑃 ∈ 𝐸 𝔽𝑝 𝑟𝑃 = 0 = Τ ℤ 𝑟ℤ 2 • 𝑒: 𝐺 × 𝐺 → 𝜇𝑟 ≔ {𝑥 ∈ 𝔽𝑝|𝑥𝑟 = 1}で次の性質を満たす • 𝑒 𝑃1 + 𝑃2, 𝑄 = 𝑒 𝑃1, 𝑄 𝑒(𝑃2, 𝑄) for 𝑃, 𝑃1, 𝑃2, 𝑄 ∈ 𝐺 • 𝑒 𝑃, 𝑃 = 1, 𝑒 𝑃, 𝑄 = 𝑒 𝑄, 𝑃 −1 • 注意 : 𝑃, 𝑄 ∈ 𝐺に対して適当な点𝑋, 𝑌 ∈ 𝐺をとり 𝑑𝑖𝑣 𝑓 = 𝑚 𝑋 + 𝑃 − 𝑚 𝑋 𝑑𝑖𝑣 𝑔 = 𝑚 𝑌 + 𝑄 − 𝑚 𝑌 となる関数𝑓, 𝑔 ∈ 𝔽𝑝(𝐸)をとると𝑒 𝑃, 𝑄 = 𝑓 𝑌+𝑄 𝑔 𝑋+𝑃 ⋅ 𝑔 𝑋 𝑓 𝑌 とかける • See "The Arithmetic of Elliptc Curves", Silverman • 𝑓(𝑌 + 𝑄)などの計算方法(Millerアルゴリズム)は今回は省略 ペアリング 18 /35
  • 19. • 𝐺 = 𝐸[𝑟], 𝑃, 𝑄 ∈ 𝐺をfix • ECDLP : 𝑎𝑃, 𝑃 : givenに対して𝑎 ∈ 𝔽𝑟を求める • 𝑢 ≔ 𝑒 𝑎𝑃, 𝑄 = 𝑒 𝑃, 𝑄 𝑎 • もし𝑢と𝑒(𝑃, 𝑄)に対するDLPが解ければECDLPが解ける • ECDLPをDLPに帰着するためにペアリングを利用 • MOV(Menezes-Okamoto-Vanstone) reduction, 1990 • 帰着後のDLPが解けなければ暗号に利用可能 1999~ DLPとペアリングの関係 19 /35
  • 20. • 暗号で使うには𝑓: 𝐺1 × 𝐺2 → 𝐺𝑇で • 𝑓 𝑃1 + 𝑃2, 𝑄 = 𝑓 𝑃1, 𝑄 𝑓 𝑃2, 𝑄 • 𝑓 𝑃, 𝑄1 + 𝑄2 = 𝑓 𝑃, 𝑄1 𝑓 𝑃, 𝑄2 を満たし、𝐺1, 𝐺2, 𝐺𝑇のDLPが困難なら概ね利用可能 • 𝐺1, 𝐺2は加法巡回群, 𝐺𝑇は乗法巡回群表記とする • Weilペアリングよりも計算効率がよいもの • Tateペアリング, ateペアリング, etc. • 𝐺𝑇の拡大次数がなるべく小さいもの • 有限体のDLPを解くコストとECDLPを解くコストの兼ね合い • 𝐺1 = 𝐺2 : 対称ペアリング • 𝐺1 ≠ 𝐺2 : 非対称ペアリング : より計算効率がよい • type 2 : 𝐺1と𝐺2の同型写像が計算しやすいもの • type 3 : 簡単に計算できる同型写像が知られていないもの ペアリングの亜種 20 /35
  • 21. • 現在128bitセキュリティ相当で一番利用されている • 曲線 : 𝑦2 = 𝑥3 + 4 /𝔽𝑝 (𝑝は381bit素数で𝑝 mod 6 ≡ 1) • 𝐺1 = 𝐸[𝑟] (𝑝は255bit素数) • 𝜑: 𝐸 ∋ 𝑥, 𝑦 ↦ 𝑥′, 𝑦′ = 𝑥 𝑤2 , 𝑦 𝑤3 ∈ 𝐸′ = 𝑦′2 = 𝑥′3 + 4𝜉 • 𝜉 = 1 + 𝑖, 𝑣3 = 𝜉, 𝑤2 = 𝑣, 𝐺2 = 𝐸′ 𝔽𝑝2 𝑟 • 𝐺𝑇 = {𝑥 ∈ 𝔽𝑝12|𝑥12 = 1}, 𝔽𝑝12 = 𝔽𝑝6[𝑤], 𝔽𝑝6 = 𝔽𝑝3[𝑣] • 𝑒 𝑃, 𝑄 = 𝐹𝐸 𝑀𝐿 𝑃, 𝑄 • 𝑀𝐿 : 双線型性を持つMiller Loop関数, 𝐹𝐸 𝑥 = 𝑥𝑟0 : 固定べき • 安全性仮定(用途に応じていろいろ提案されている) • DDH(Decisional DH)仮定 • 𝐺𝑖 ∋ 𝑃, 𝑎𝑃, 𝑏𝑃, 𝑐𝑃に対し𝑎𝑏𝑃 = ? 𝑐𝑃を判定困難 • co-DHP*仮定 :𝑎𝑃1, 𝑄 ∈ 𝐺1, 𝑎𝑃2 ∈ 𝐺2に対して𝑎𝑄は計算困難 BLS12-381曲線(Barreto-Lynn-Scott) 21 /35
  • 22. • 𝔽𝑝2 = 𝔽𝑝[𝑖] where 𝑖2 = −1 in 𝔽𝑝 • 𝑥 = 𝑎 + 𝑏𝑖, 𝑦 = 𝑐 + 𝑑𝑖の乗算 • 𝑥𝑦 = 𝑎 + 𝑏𝑖 𝑐 + 𝑑𝑖 = 𝑎𝑐 − 𝑏𝑑 + 𝑎𝑑 + 𝑏𝑐 𝑖 • 𝑎𝑑 + 𝑏𝑐 = 𝑎 + 𝑏 𝑐 + 𝑑 − 𝑎𝑐 − 𝑏𝑑 • 𝑋 = 𝑎𝑐, 𝑌 = 𝑏𝑑, 𝑍 = (𝑎 + 𝑏)(𝑐 + 𝑑)の乗算3回(Karatsuba) • 𝔽𝑝の乗算=𝑝ビット整数同士の乗算 + mod p • 本当はMontgomery乗算を使うがここでは省略 • コストは乗算よりmod pがやや重たい • 𝑋, 𝑌, 𝑍をmod pなしで計算(Mitsunari, et al. Pairing2010) • 𝑎𝑐 − 𝑏𝑑 = (𝑋 − 𝑌) mod p • 𝑎𝑑 + 𝑏𝑐 = (𝑍 − 𝑋 − 𝑌) mod p • mod pの処理が3回から2回に減る 𝔽𝑝2の演算の効率化 22 /35
  • 23. • BLS12-381でのFrobenius写像 • 𝐹: 𝔽𝑝2 ∋ 𝑎 + 𝑏𝑖 ↦ 𝑎 + 𝑏𝑖 𝑝 = 𝑎 − 𝑏𝑖 because 𝑝 mod 4 = 3 • 𝐺2 = 𝐸′ 𝔽𝑝2 𝑟 に対するFrobenius写像 • 𝐹′ 𝑥′, 𝑦′ ≔ 𝜑𝐹𝜑−1 𝑥′, 𝑦′ = 𝜑𝐹 𝑥′/𝑤2, 𝑦′/𝑤3 = 𝜑൫ ൯ ( ) 𝑥′/ 𝑤2 𝑝 , 𝑦′ /𝑤3 𝑝 = 𝑥′𝑝 /𝑤2𝑝−2 , 𝑦′𝑝 /𝑤3𝑝−3 = (𝐹 𝑥′ 𝑔−2, 𝐹 𝑦′ 𝑔−3) where 𝑔 ≔ 𝑤 6 𝑝−1 6 = 𝜉 𝑝−1 6 • 𝐹′12 = 𝑖𝑑𝐺2 , 𝐹′ 𝑃 = 𝑧𝑃 where 𝑧 = -0xd201000000010000 • 𝑡 ∈ 𝔽𝑟(𝑙𝑒𝑛(𝑟)は256bit程度)に対して • 𝑡 = 𝑢0 + 𝑢1𝑧 + 𝑢2𝑧2 + 𝑢3𝑧3とすると𝑙𝑒𝑛 𝑢𝑖 ~64𝑏𝑖𝑡 • 𝑢0 ≔ 𝑡 mod 𝑧, 𝑢1 ≔ 𝑡−𝑢0 𝑧 mod 𝑧, ...で計算可能 • 𝑡𝑃 = 𝑢0𝑃 + 𝑢1𝐹′ 𝑃 + 𝑢2𝐹′2 𝑃 + 𝑢3𝐹′3(𝑃) 𝐺2のスカラー倍算(GLV method) 23 /35
  • 24. • 𝐻𝑖: 0,1 ∗ → 𝐺𝑖をハッシュ関数とする • 𝑃𝑖を𝐺𝑖の生成元を共有 • 𝑒 ≔ 𝑒 𝑃1, 𝑃2 ∈ 𝐺𝑇とすると 𝑒 = 𝐺𝑇 • 鍵生成 • 𝑠 ∈ 𝔽𝑟を署名鍵として𝑆 = 𝑠𝑃2 ∈ 𝐺2を検証鍵とする • 検証鍵は検証者に配布する(公開鍵) • 署名 • メッセージ𝑚に対して𝜎 = 𝑠𝐻1 𝑚 ∈ 𝐺1が署名 • 検証 • メッセージ𝑚と署名𝜎と検証鍵𝑆に対して • 𝑒(𝐻1 𝑚 , 𝑆) = ? 𝑒(𝜎, 𝑃2)を確認する • validなら左辺=𝑒 𝐻1 𝑚 , 𝑠𝑃2 = 𝑒 𝑠𝐻1 𝑚 , 𝑃2 =右辺 BLS署名(Boneh–Lynn–Shacham) 24 /35
  • 25. • 攻撃者が知り得るもの • 公開パラメータ𝑃1, 𝑃2 • 検証鍵𝑆 = 𝑠𝑃2 • 過去の署名 𝑚に対する𝜎 = 𝑠𝐻1(𝑚) • 偽造したいもの • 𝑚′ ≠ 𝑚で𝜎′ = 𝑠𝐻1(𝑚′) • それを作れたとしたら • 𝐻1 𝑚′ = 𝑡𝐻1(𝑚)となる𝑡は分からない • ECDLPとハッシュ関数の"ランダムさ" • 𝑠𝐻1 𝑚 , 𝑠𝑃2, 𝐻1(𝑚′) から𝜎′ = 𝑠𝐻1(𝑚′)が作れたことになる • co-DHP*の困難さを破れることになる BLS署名の安全性の根拠(の雰囲気) 25 /35
  • 26. • 𝑒(𝐻1 𝑚 , 𝑆) = ? 𝑒(𝜎, 𝑃2) • 𝑒 𝑃, 𝑄 = 𝑀𝐿 𝑃, 𝑄 𝑟0 : 𝑀𝐿は双線型性を持つ • 𝑒 𝐻1 𝑚 , 𝑆 = 𝑒 𝜎, 𝑃2 ⇔ 𝑒 𝐻1 𝑚 , 𝑆 𝑒 𝜎, −𝑃2 = 1 ⇔ 𝐹𝐸 𝑀𝐿 𝐻1 𝑚 , 𝑆 𝑀𝐿 𝜎, −𝑃2 = 1 • 演算コスト𝑀𝐿 ∶ 𝐹𝐸 = 1: 1.4なので40%の高速化 検証部分 26 /35
  • 27. • 𝑓 𝑥 = 𝑓0 + 𝑓1𝑥 + ⋯ + 𝑓𝑘−1𝑥𝑘−1 ∈ 𝔽𝑟[𝑥] : 𝑘 − 1次多項式 • 𝑛個の相異なる𝑥1, … , 𝑥𝑛に対して𝑦𝑖 = 𝑓(𝑥𝑖)とする • ここから任意の相異なる𝑘個のペア 𝑥𝑖𝑎 , 𝑦𝑖𝑎 1 ≤ 𝑎 ≤ 𝑘 を取る • 𝑦𝑖1 ⋮ 𝑦𝑖𝑘 = 1 ⋯ 𝑥𝑖1 𝑘−1 ⋮ ⋱ ⋮ 1 ⋯ 𝑥𝑖𝑘 𝑘−1 𝑓0 ⋮ 𝑓𝑘−1 = 𝐴 𝑓0 ⋮ 𝑓𝑘−1 • 𝐴 = 𝑥𝑖𝑎 𝑏 はdet 𝐴 ≠ 0なので (𝑦𝑖𝑎 )から(𝑓𝑖)が求まる • 秘密分散 • 𝑓0を秘密とする • 𝑓1, … , 𝑓𝑘−1をランダムに選び𝑛個のペア 𝑥𝑖𝑎 , 𝑦𝑖𝑎 = 𝑓(𝑥𝑖𝑎 ) を作る • そのうち𝑘個のペアで𝑓0を復元できる • 𝑘 − 1以下なら不可能(𝑓0の取り得る可能性は𝔽𝑟全て) Lagrange補間 27 /35
  • 28. • 単なる秘密分散は一度しか使えない • BLS署名の検証鍵𝑠𝑃2, 署名𝑠𝐻1(𝑚) • BLS署名の署名鍵𝑠を秘密分散する • 𝑓 𝑥 = 𝑠 + 𝑓1𝑥 + ⋯ + 𝑓𝑘−1𝑥𝑘−1 : 𝑘次多項式(𝑓𝑖はランダム) • 𝑥1, … , 𝑥𝑛に対して署名鍵𝑠𝑖 = 𝑓(𝑥𝑖)をユーザ𝑥𝑖に配布する • 検証鍵𝑠𝑃も公開 • 𝑠𝑖𝑃2が各自の検証鍵 • 𝑚に対する各自の署名𝑠𝑖𝐻1(𝑚) • 𝑛人が署名𝑠𝑖𝐻1(𝑚)を公開 • 検証して𝑘個集まれば𝐴−1 𝑠𝑖𝑎 𝐻1 𝑚 により𝑠𝐻1(𝑚)を復元 • 𝑠𝑃で検証可能 • 「多数決」に利用可能 BLS署名と秘密分散 28 /35
  • 29. • 複数の署名を一つにまとめる • 検証コストを下げる • 検証に必要な署名のデータ量を減らす • BLS multi-signatures with public-key aggregation, 2018 • https://crypto.stanford.edu/~dabo/pubs/papers/BLSmultisig.html • 𝐻2: 𝐺2 𝑛 → 𝔽𝑟 𝑛 : 𝑛個ハッシュ関数 • 鍵生成 : 𝑠𝑖 ∈ 𝔽𝑟 ; 署名鍵, 𝑆𝑖 = 𝑠𝑖𝑃1 ∈ 𝐺1 ; 検証鍵 • 署名 : 𝜎𝑖 = 𝑠𝑖𝐻1(𝑚) • 𝑛個の𝑚に対する署名{𝑆𝑖, 𝜎𝑖}を集約する • 𝑡1, … , 𝑡𝑛 ← 𝐻2(𝑆1, … , 𝑆𝑛), 𝜎 ≔ σ𝑖 𝑡𝑖𝜎𝑖 • 𝑆𝑖 , 𝑚, 𝜎に対する検証 • 𝑡1, … , 𝑡𝑛 ← 𝐻2(𝑆1, … , 𝑆𝑛), 𝑒 𝑃1, 𝜎 = 𝑒(σ𝑖 𝑡𝑖𝑆𝑖 , 𝐻1 𝑚 ) 集約署名 29 /35
  • 30. • 𝑛個のメッセージ𝑚𝑖に対する検証鍵𝑆𝑖と署名𝜎𝑖 • 𝐹𝐸 𝑀𝐿 𝐻1 𝑚𝑖 , 𝑆𝑖 𝑀𝐿 𝜎𝑖, −𝑃2 = 1 for all 𝑛 ※ • 普通にやると 2𝑀𝐿 + 1𝐹𝐸 × 𝑛の検証コスト • 乱数を使うトリック • 𝑟1, … , 𝑟𝑛を乱数として1/|𝑟𝑖|の確率を除いて※が成立する ⇔ 𝐹𝐸 ෑ 𝑖 𝑀𝐿 𝐻1 𝑚𝑖 , 𝑆𝑖 𝑟𝑖𝑀𝐿 𝜎𝑖, −𝑃2 𝑟𝑖 = 1 ⇔ 𝐹𝐸 ෑ 𝑖 (𝑀𝐿 𝐻1 𝑚𝑖 , 𝑟𝑖𝑆𝑖 𝑀𝐿 ෍ 𝑖 𝑟𝑖𝜎𝑖, −𝑃2 = 1 • 検証コスト 𝑛 + 1 𝑀𝐿 + 1𝐹𝐸 + 𝑛𝑀𝑈𝐿2+𝑛𝑀𝑈𝐿𝑆𝑈𝑀1 • 𝑟𝑖 ~264程度だとFE>(G1-mul + G2-mul)なので速くなる 複数の署名をまとめて検証する 30 /35
  • 31. • 𝑄 = σ𝑖 𝑥𝑖𝑃𝑖の形の演算が割と出てくる • ここではMULSUMと呼ぶことにする • マルチスカラー倍算の考察からコストはDBL+(n/const)ADD • もう少し改善したい • {𝑥𝑖}が小さいときを考える • 例 : 2𝑃1 + 𝑃2 + 3𝑃3 + 2𝑃4 + 2𝑃5 + 3𝑃6 + ⋯ = 𝑃2 + ⋯ + 2 𝑃1 + 𝑃4 + 𝑃5 + ⋯ + 3 𝑃3 + 𝑃6 + ⋯ + 4(… • 𝑥𝑖が同じものをグルーピングする • 𝑛が大きくなるほど効果が高くなる MULSUMの高速化 31 /35
  • 32. • 𝑧 ← σ𝑖=0 𝑛−1 𝑥𝑖𝑃𝑖の擬似コード • 𝐿 : max 𝑙𝑒𝑛 𝑥𝑖 • 𝑐 : まとめるテーブルのビット長 • 𝑁 = 2𝑐 : テーブルT[𝑁]のサイズ, 𝑀 = 𝐿 𝑐 : 区切った個数 • 𝑇 𝑖 ← 0 for all 𝑖 • for 𝑤 from 0 to 𝑀 − 1 • for 𝑖 from 0 to 𝑛 − 1 • 𝑣 ← 𝑥𝑖の𝑐𝑤から𝑐ビットの値 • T[𝑣] ← 𝑇 𝑣 + 𝑃𝑖 // 𝑣倍される𝑃𝑖を集める • 𝑠𝑢𝑚 ← 0, 𝑊[𝑤] ← 0 • for 𝑖 from 0 to 𝑁 • 𝑠𝑢𝑚 ← 𝑠𝑢𝑚 + 𝑇[𝑁 − 𝑖] • 𝑊 𝑤 ← 𝑊 𝑤 + 𝑠𝑢𝑚 MULSUMの概要(1/2) 𝑥𝑖 𝑐 𝑣 𝑊 𝑤 = ⋯ + 𝑇 𝑁 − 2 + 𝑇 𝑁 − 1 + 𝑇 𝑁 + 𝑇 𝑁 − 1 + 𝑇 𝑁 + 𝑇 𝑁 = 𝑇[1] + 2𝑇[2] + 3𝑇 3 + ⋯ ← 𝑤番目 32 /35
  • 33. • 続き • 𝑊 𝑤 = 𝑤番目の𝑥𝑖達の𝑃𝑖のスカラー倍の和 • 𝑍 ← 0 • for 𝑤 from 0 to 𝑀 − 1 • 𝑍 ← 2𝑐𝑍 + 𝑊[𝑀 − 1 − 𝑤] • 演算コスト • 𝐿 : 𝑥𝑖の最大ビット(e.g., 256), 𝑁 = 2𝑐 , 𝑀 = 𝐿/𝑐 • ADD : 𝑀 𝑛 + 2𝑁 + 𝑀 = Τ 𝐿(𝑛 + 2𝑐+1 + 1) 𝑐, DBL : 𝐿 • ADDのコストが最小になる𝑐 • (適当に見つけた)近似値𝑐min = 𝑖𝑛𝑡(log2 𝑛 − log2(log2 𝑛)) • 𝑛~229ぐらいまでで誤差±1ぐらい • 余談 : int(log2 𝑛)は𝑛の2進数表記の左から初めて1がある位置 • 𝑛 = 1024なら𝑐 = 8(𝑛 ≈ 64(GLV適用前)が速度の分岐点) MULSUMの概要(2/2) 𝑥𝑖 𝑐 𝑣 ← 𝑤番目 33 /35
  • 34. • 楕円曲線の加算𝑃 + 𝑄 • 片方の点がAffine座標と分かっていれば加算を効率よくできる • [𝑥: 𝑦: 𝑧]の𝑧を1にできる • しかしJacobi/Proj→Affineは除算が入るので遅い • mul : div = 1:100 • 複数の逆数をまとめて処理 • 𝑎, 𝑏の逆数 Τ 1 𝑎 , Τ 1 𝑏は Τ 𝑏 𝑎𝑏, Τ 𝑎 𝑎𝑏なので1/𝑎𝑏の逆数1回で計算 • {𝑥1, 𝑥2, 𝑥3, 𝑥4}に対して • 𝑇[] = {𝑥1, 𝑥1𝑥2, 𝑥1𝑥2𝑥3, 𝑥1𝑥2𝑥3𝑥4}, 𝑟 ← 𝑥1𝑥2𝑥3𝑥4 −1 • Τ 1 𝑥4 = 𝑥1𝑥2𝑥3 𝑟, 𝑟 ← 𝑟𝑥4 = 𝑥1𝑥2𝑥3 −1 Τ 1 𝑥3 = 𝑥1𝑥2 𝑟, 𝑟 ← 𝑟𝑥3 = 𝑥1𝑥2 −1 Τ 1 𝑥2 = 𝑥1 𝑟, 𝑟 ← 𝑟𝑥1 = 𝑥1 −1 • 𝑛回逆数が「 2(𝑛 − 1)回の乗算+1回除算」になる 複数の除算とAffine化の高速化 34 /35
  • 35. • 暗号の実装では • 代数的な構造を利用したアルゴリズムの改良 • 特定の環境の演算コストに応じた組合せ論的最適化 • 乱数を用いた確率的アルゴリズムの導入(やや飛び道具) • などを組み合わせる まとめ 35 /35