暗号プログラム (C言語版)

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

コンパイル時の注意点は,以下です.

楕円署名 (ECDSA)

OpenSSLの暗号ライブラリを用いて,ディジタル署名の ECDSA (楕円曲線版のDSA署名)を実行するサンプルプログラムです.ソースプログラムは,ecdsa.c です.

プログラムはコマンドとして起動します.

  ecdsa [nID [curveName]]

  パラメータ:
    nID : 楕円曲線ID
    curveName: 楕円曲線名称

プログラムでは,2種類の方法で署名,検証を行っています.ECDSA_sign関数を用いたものと,EVP_Sign系の関数を用いたものです.パラメータのnIDは,第1の方法に,curveNameは第2の方法に適用されます.省略された場合は,いずれも prime192v の楕円曲線が用いられます.

コンパイル時の注意点は,以下です.

楕円ElGamal 暗号

OpenSSL暗号ライブラリの楕円曲線演算関数群を用いて,楕円ElGamal暗号処理を実現しそのテストを行うプログラムです.ソースプログラムは,ec_elgamal.c です.

プログラムでは,以下の関数を定義しています.

プログラムはコマンドとして起動します.

  ec_elgamal [curveName]

  パラメータ:
    curveName: 楕円曲線名称

パラメータを省略した場合は,prime192v の楕円曲線が用いられます.

コンパイル時の注意点は,以下です.

inserted by FC2 system