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

C言語で記述された暗号関連のプログラムのサンプルを紹介します. Linux上で動作確認していますが,Windows上でもそのまま,あるいはわずかな変更のみで動作するものと思います.

暗号ライブラリとして,OpenSSL を用いています. OpenSSL の高レベルの暗号化インタフェースである主な EVP 関数の仕様を OpenSSL EVP 関数,および OpenSSL EVP_PKEY 関数に示します.

乱数生成

OpenSSLの暗号ライブラリを用いて,乱数データを生成するプログラムです.ソースプログラムは, randgen_aes.c です.

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

void randgen(unsigned char *rnd, int rndLen, char *seed, int seedLen);

  引数:
    rnd: 乱数データ
    rndLen: 乱数データ長(バイト)
    seed : 乱数種
    seedLen: 乱数種の長さ(バイト)

seedseedLen で指定された乱数種を用いて rndLen 長の乱数データ rndを生成します.

プログラムでは,ASNIの X9.17 による共通鍵暗号用のランダムな鍵系列を生成するアルゴリズムを用いています.X9.17では,DES暗号で定義されていますが,ここではAES暗号を用いています.

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

乱数性検定

FIPS PUB 140-2 に規定された乱数性のチェックを行うプログラムです (参照:乱数性の評価).ソースプログラムは,fipstest.c です.

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

チェックの対象となる乱数生成関数は,次の仕様の関数を用意しリンクします.上記の乱数生成プログラム(randgen_aes.c) が利用できます.

void randgen(unsigned char *rnd, int rndLen, char *seed, int seedLen);

プログラムでは,乱数性の検査項目に対して,結果と OK/NG が出力されます.

inserted by FC2 system