7. RSA 暗号
巨大な素因数分解が難しいことを利用する
p, q を巨大な素数とする。
ab = 1 mod (p-1)(q-1) となる a, b の組み合わせがあれば、
任意の x に対して n = pq として
xa
= c (mod n) , cb
= x (mod n)
となることを利用している
8. 離散対数問題
Discrete Logarithm Problem (DLP)
xa
= c (mod n) となる c, x を与えられたときでも、a を求めるのは難しい
直感的には、 logx
c を求めるのが難しいという問題
電子署名などでは、x (平文) と c (署名) が既知で、a は署名者の秘密鍵となる
秘密鍵が求められては困る...
12. 楕円曲線の数理
y2
= x3
+ ax + b の形をした曲線のこと
楕円曲線上の点の世界で加乗算ができる
Wikipedia (Elliptic curve) より
格子点 (x, y) を p の剰余で考える
Mastering Bitcoin, Andreas M. Antonopoulos
図 4-3 より
13. 楕円曲線の群構造
加法で閉じている
P + Q は曲線上の点
結合法則
P + Q + R = O
単位元
O (無限遠点)
逆元の存在 交換法則
- P P + Q = Q + P
Wikipedia (楕円曲線) より
14. 楕円曲線暗号と DLP
楕円上の点 P と整数 a について
P, aP から a を逆算するのはとても難しい
(楕円曲線上の離散対数問題)
これを利用して、あるベース ポイント G を定め、
秘密鍵 a (スカラー値。曲線上の点ではない) を組み合わせる
ただし、いくつかの楕円曲線のパラメータでは、
多項式時間で ECDLP を解く方法が見つかっており、
暗号としては使えない
16. 楕円曲線暗号の暗号 (EC ElGamal)
1. 鍵生成
a. 秘密鍵 : ランダムな整数 a を選ぶ (0 < a < n, ただし n = min {k | kG = O, k > 0 })
b. 公開鍵 : P = aG (G は楕円曲線上のベース ポイント) となる点
2. 暗号化
a. 暗号化の対象を楕円曲線上の点 M にエンコード (X 座標に入れるなど)
b. ランダムな整数 k を選ぶ (0 < k < n)
c. ペア (rG, M + kP) を暗号文とする
3. 復号
a. 暗号文 (C1
, C2
) を受け取ったら、 C2
- aC1
を計算し、デコードする
17. 楕円曲線暗号の電子署名 (ECDSA)
1. 鍵生成
a. 秘密鍵 : ランダムな整数 a を選ぶ (0 < a < n, ただし n = min {k | kG = O, k > 0 })
b. 公開鍵 : P = aG (G は楕円曲線上のベース ポイント) となる点
2. 署名
a. 署名対象の m をハッシュ化する : h(m)
b. ランダムな整数 k を選び (0 < k < n)、r を kP の X 座標とする
c. s = k-1
(h(m) + ar) mod n として、ペア (r, s) を電子署名とする
3. 検証
a. m, (r, s) から Q = (h(m)/s) G + (r/s) P となる点を計算する
b. Q の X 座標が r と一致すればよい