C言語で記述された暗号関連のプログラムのサンプルを紹介します. Linux上で動作確認していますが,Windows上でもそのまま,あるいはわずかな変更のみで動作するものと思います.
暗号ライブラリとして,OpenSSL を用いています. OpenSSL の高レベルの暗号化インタフェースである主な EVP 関数の仕様を OpenSSL EVP 関数,および OpenSSL EVP_PKEY 関数に示します. また,OpenSSL の主な楕円曲線演算関数の仕様を 楕円曲線演算ライブラリに示します.
なお,OpenSSLライブラリには楕円曲線関連のモジュールがインストールされていないものもありますので,ご注意ください.
楕円曲線暗号で用いられる楕円曲線は,楕円曲線ID (整数値:NID)または,楕円曲線名称 (文字列)で指定されます.OpenSSLの暗号ライブラリでは,内部テーブルとして楕円曲線パラメータを保持しています.
このプログラムは,OpenSSLの暗号ライブラリが内部テーブルとして持つ楕円曲線パラメータを取得します.ソースプログラムは,eccurve.c です.
プログラムはコマンドとして起動します.
eccurve [-i nID | -n curveName] パラメータ: -i: 楕円曲線をNIDで指定する. -n: 楕円曲線を楕円曲線名称で指定する. nID : 楕円曲線ID curveName: 楕円曲線名称
パラメータを省略した場合,内部テーブルにある楕円曲線パラメータの一覧を表示します.
-i オプションは,nID で指定された楕円曲線の名称を表示します.また,-n オプションは,curveNameで指定された楕円曲線のNIDを表示します. いずれも,NIDと楕円曲線名称の対応関係を以下のように表示します.
NID = 710, Curve Name : secp160r2
コンパイル時の注意点は,以下です.
OpenSSLの暗号ライブラリを用いて,ディジタル署名の ECDSA (楕円曲線版のDSA署名)を実行するサンプルプログラムです.ソースプログラムは,ecdsa.c です.
プログラムはコマンドとして起動します.
ecdsa [nID [curveName]] パラメータ: nID : 楕円曲線ID curveName: 楕円曲線名称
プログラムでは,2種類の方法で署名,検証を行っています.ECDSA_sign関数を用いたものと,EVP_Sign系の関数を用いたものです.パラメータのnIDは,第1の方法に,curveNameは第2の方法に適用されます.省略された場合は,いずれも prime192v の楕円曲線が用いられます.
コンパイル時の注意点は,以下です.
OpenSSL暗号ライブラリの楕円曲線演算関数群を用いて,楕円ElGamal暗号処理を実現しそのテストを行うプログラムです.ソースプログラムは,ec_elgamal.c です.
プログラムでは,以下の関数を定義しています.
プログラムはコマンドとして起動します.
ec_elgamal [curveName] パラメータ: curveName: 楕円曲線名称
パラメータを省略した場合は,prime192v の楕円曲線が用いられます.
コンパイル時の注意点は,以下です.