PARI/GP 暗号プログラム
PARI/GP で作成した暗号プログラムのサンプルを紹介します.
RSA 暗号鍵生成
- 機能概要
RSA 暗号で使用する暗号鍵(秘密鍵,公開鍵)を生成するプログラムです.公開鍵 n,e と秘密鍵 d を生成します. ソースプログラムは,
rsa_kgen.gp です.
- プログラム
プログラムは,以下の処理を行う関数 (rsa_kgen) を定義しています.また,この関数を使用してランダムなメッセージを暗号化・復号して動作を確認します.
- 素数 p,q をビット長 nb/2 でランダムに生成する(p > q).
- p - 1 と q - 1 の最小公倍数 λ(n) を計算し,λ(n) と互いに素で λ(n) より小さな任意の整数 e を選ぶ.
λ(n) = LCM (p-1, q-1)
e ∈ Zλ(n) (3 ≦ e ≦ n - 1, GCD (e, λ(n)) = 1)
- ed = 1 mod λ(n)を満たす d を求める.
d = 1/e mod λ(n)
- 鍵ベクトル [p, q,n, e,d] を返す.
rsa_kgen (nb, eb)
引数:
nb:公開鍵 n のビット長
eb:公開鍵 e のビット長
戻り値:
鍵:[p, q, n, e, d]
RSA 暗号解読
楕円 ElGamal 暗号
- 機能概要
楕円 ElGamal 暗号アルゴリズム (楕円ElGamal暗号) を用いた暗号化・復号機能を確認するプログラムです. ソースプログラムは,
elgamal.gp です.
- プログラム
プログラムでは,以下の処理を行っています.
- 指定した楕円曲線パラメータで楕円曲線を生成する.
- 乱数で秘密鍵 x を生成した後,対応する公開鍵 P を生成する.
- 暗号化対象メッセージ m をランダムに生成し,楕円点の X 座標とする.
- メッセージの暗号化処理を行い,暗号文 (C1, C2) を生成する.
- 暗号文を復号し,復号結果が正しいか(元のメッセージに戻るか)を確認する.
楕円 DSA 署名
- 機能概要
楕円 DSA アルゴリズム (ECDSA署名) を用いた署名の生成と検証機能を確認するプログラムです. ソースプログラムは,
ecdsa.gp です.
- プログラム
プログラムでは,以下の処理を行っています.
- 楕円曲線を生成する.楕円曲線パラメータは sect283k1 を用いる.
- 乱数で秘密鍵 x を生成した後,対応する公開鍵 p を生成する.
- 署名対象メッセージ z を乱数で生成する.
- 署名 (r, s) を計算する.
- 署名を検証する.