前のページ <<< >>> 次のページ

1.13 鍵の生成について

1.13.1 概要

 暗号化の際に鍵を生成し、その鍵を使います。このときの鍵は、手順どおりであれば、常に同じ鍵を生成させることができます。

弊社のホームページをご覧いただいた方々から多くのご質問をいただいております。それは、「暗号化したコンピュータと別のコンピュータで復号が可能なのか?」というご質問です。

簡単な暗号化のページで説明しています暗号化は、共通鍵暗号方式で、暗号化と復号で同じ鍵(共通鍵もしくは、対象鍵といいます)を使う方式です。この場合におきましては、先のご質問は、「別のコンピュータでも同じ鍵を生成できるのか?」という質問に置き換えることができます。
以下で、このご質問に答えます。

なお、具体的な暗号化の方法は、1.簡単な暗号化を参照してください。

1.13.2 鍵の生成

 CryptoAPIで暗号化鍵を生成する場合は、基本となるデータ(ソース)から生成させる方法と、ランダムに鍵を生成する方法があります。

 簡単な暗号化で利用している鍵は、前者の基本となるデータから生成される鍵を使います。

 ちなみに、ランダムな鍵は、CryptGenKey( )を使って生成します。生成された鍵をエクスポートすることも可能ですので、その鍵を安全な方法で復号時に利用するといったソリューションも考えられます。また、CryptGenKey( )は、公開鍵(非対称鍵)の生成にも利用します。

1.13.3 基本データからの鍵生成

 基本データから鍵を生成させる場合は、CryptDeriveKey( )を利用します。この関数の利用方法は、1.5 鍵の生成で説明していますので確認してください。

CryptDeriveKeyは、同じ鍵を生成することを保証しています
このCryptDeriveKey関数は、同じ基本データと同じCSP更に同じアルゴリズムを指定しますと、同じ鍵が生成されることを保証しています。以下に説明します、引数に同じ(意味を持った)引数をしてしますと、常に同じ鍵が生成されることになります。これは、別のコンピュータで生成した場合でも同じですので、鍵を生成するための条件さえわかっていれば暗号化と復号をいつでもどこでも行えることになります。

CryptDeriveKey( ) の5つの引数には、以下の値を指定します。

第1引数には、使用するCSPのハンドルを指定します。CSPは、1.12 CSPについて を参照してください。

第2引数には、利用するCSPで利用できる暗号化のアルゴリズムを指定します。指定できるアルゴリズムは、CSPによって違います。詳細は、1.12.4 CSPのタイプ で確認してください。

第3引数には、基本となるデータを指定します。具体的には、ハッシュ値のハンドルを指定します。

第4引数には、鍵の長さ(上位16ビット)と生成法(下位16ビット)を指定するフラグ値を指定します。たとえば128ビット長の鍵を利用する場合は、0x80 * 0x10000を指定することで目的の鍵を生成できます。また、生成法は、以下のフラグを指定できます。
フラグ動作
CRYPT_CREATE_SALT鍵にソルト値がアサインされ基本データであるハッシュ値の長さまで延長されます
CRYPT_EXPORTABLE鍵をCSPから外部に取り出すことができるようになります
CRYPT_NO_SALTソルト値が生成されません
CRYPT_UPDATE_KEY一部のCSPで利用できる機能です
鍵を連続的に生成する場合に、以前の鍵を変更した鍵のハンドルが渡されるようになります
第5引数には、求められた鍵のハンドルが戻ります。

1.13.4 基本データ

 鍵を生成するための基本データには、ハッシュ値(または、メッセージダイジェスト値。以下ハッシュ値といいます)を使います。ハッシュ値は、同じアルゴリズムであれば同一のデータからは、同一のハッシュ値が算出されることが保証されています。
 従いまして、たとえば暗号化にパスワードを使う場合に、パスワードから計算されたハッシュ値を使うことによって、常に同じ鍵が生成されることが保証されます。

1.13.5 暗号化データが必ず復号されるために

 上記で説明しましたように、同じアルゴリズムを使って鍵を生成してれば、常に同じ鍵が生成されることが保証されています。
 共通鍵を使った暗号化を実施する際には、同じアルゴリズムを利用するように注意してください。関数によっては、規定(デフォルト)値を指定できるものもあります。場合によっては、この規定値が期待したものと違う場合があります。その場合は、同じ鍵が生成されない可能性もありますので注意してください。


ご意見・感想などをお聞かせください。こちらから、匿名で送信できます。

PDF-Tools
PDFおよびPDF/Aを作成・編集などができるライブラリ
128ビットの暗号化や電子署名に対応
http:
//www.trustss.co.jp/pdf/
株)トラスト・ソフトウェア・システム
暗号化・電子署名・タイムスタンプ ライブラリ作成します。
お問い合わせください。
1. 簡単な暗号化
1.1 概要
1.2 キーコンテナー を準備する
1.3 ハッシュ計算のインスタンスを生成する
1.4 ハッシュ値を計算する
1.5 鍵の生成
1.6 暗号化
1.7 復号
1.8 リソースの開放
1.9 サンプル・コード
1.10 ご質問・ご要望
 
1.11 簡単な暗号化アプリを作りたい方のために
 
1.12 CSP
1.12.1 概要
1.12.2 CSPを列挙する
1.12.3 CSPの種類
1.12.4 CSPのタイプ
1.12.5 CSPのタイプを列挙する
1.12.6 規定のCSP
 
1.13 鍵の生成について
1.13.1 概要
1.13.2 鍵の生成
1.13.3 基本データからの鍵生成
1.13.4 基本データ
1.13.5 暗号化データが必ず復号されるために
 
1.14 ブロック暗号化アルゴリズムによる暗号化
1.14.1 概要
1.14.2 キーコンテナー を準備
1.14.3 ハッシュ計算のインスタンス
1.14.4 ハッシュ値を計算
1.14.5 鍵の生成
1.14.6 パディングモードの指定
1.14.7 初期化ベクタ
1.14.8 暗号モードの指定
1.14.9 復号用に鍵オブジェクトを複製
1.14.10 暗号化
1.14.11 復号
1.14.12 リソースの開放
1.14.13 サンプル・コード
1.14.14 ご質問・ご要望
会員用ログイン
ID:
パスワード:
ログインすると、一般公開していないページを閲覧できます。