C 言語で記述された暗号関連のプログラムのサンプルを紹介します. Linux 上で動作確認していますが,Windows 上でもそのまま,あるいはわずかな変更のみで動作するものと思います.
暗号ライブラリとして,OpenSSL を用いています. OpenSSL の高レベルの公開鍵暗号のインタフェースである主な EVP_PKEY 関数の仕様を OpenSSL EVP_PKEY 関数 (公開鍵暗号) に示します.
OpenSSL の EVP_PKEY 関数を用いて,RSA の暗号化と署名を行うサンプルプログラムです.ソースプログラムは,rsa_evp.c です.
プログラムはコマンドとして起動するもので,仕様は以下です.
rsa_evp [plainText] パラメータ: plainText : 暗号化および署名対象のテキストデータ
plainText を省略した場合は,プログラム内部の固定データが使われます.
プログラムでは,RSA の鍵ペア (秘密鍵,公開鍵) を生成します (公開鍵長は 2048 ビット).また,生成した鍵を使って,テキストデータを暗号化・復号,署名生成・検証を行い処理が正常に行われることを確認します.
OpenSSL の EVP_PKEY 関数を用いて,DSA 署名を行うサンプルプログラムです.ソースプログラムは,dsa_evp.c です.
プログラムはコマンドとして起動するもので,仕様は以下です.
dsa_evp [[dataLen [paramLen]] パラメータ: dataLen : 署名対象データのバイト長 (省略時は,256) paramLen: DSA のパラメータのビット長 (省略時は,1024)
プログラムでは,DSA のパラメータを生成した後,鍵ペア (秘密鍵,公開鍵) を生成します.次に,生成した鍵を使って,指定バイト長の乱数データに対する署名生成・検証を行い処理が正常に行われることを確認します.
DH (Diffie-Hellman) 法を用いた鍵交換を行う機能を EVP_PKEY関数を用いてテストするプログラムです(楕円曲線暗号版). ソースプログラムは, ecdh_evp.c です.
プログラムはコマンドとして起動します.
ecdh_evp [nid] パラメータ: nid: 楕円曲線 ID(省略時:710 (secp160r2))
楕円曲線 ID の値と曲線名称の定義は,openssl/obj_mac.h に記述されています.
A パート,B パートで共有鍵の生成処理を以下の手順で行います.
コンパイル時の注意点は,以下です.