CryptLightは、データの暗号化、復号化、および改ざん検知を行う、強力なActiveXコントロール(OCX)です。これからのアプリケーション開発にデータの暗号化は欠かせません。CryptLightを使えば、あなたのアプリケーションのソースコードにほんの数行を追加するだけで、本格的な暗号化機能を組み込む事ができます。顧客へ納入するシステムの提案において、本格的な暗号によるデータの保護機能を掲げることは、絶大な信頼度アップにつながる事でしょう。
CryptLightは、自己流の暗号ソフトではありません。1993年に考案されたBlowfish法という448ビット鍵暗号化アルゴリズムを採用しています。この暗号化アルゴリズムはパテントフリーであり、特許料の支払いは必要ありません。Blowfish法は、海外では有名なDES以上に堅牢(DESは56ビット鍵)かつ高速な暗号化アルゴリズムとして知られており、徹底的な解析の結果、安全性は非常に高いものであると考えられています。また、CryptLightは、公開されている文書を基に全て日本国内で開発されていますので、米国の武器輸出規制には抵触しません。
CryptLightは、暗号化、復号化に加えて、改ざん検知を行う事ができます。MD5法を用いてデータの要約値(そのデータの指紋のようなもの)を計算し、暗号化データに付加する事ができます。そして、復号化時に照合してデータが1ビットでも改ざんされていると検知します。要約値自体も暗号化されているため、データを偽造する事は極めて難しく、改ざんを確実に検知する事ができます。
CryptLightは、Visual Basic、Delphi、VB Script、Java Scriptなど、ActiveXコントロールを使用できる主要なプログラミング言語から使用する事ができます。また、ASP(Active Server Pages)、IE(Internet Explorer)、WSH(Windows Scripting Host)、HTA(HTML Applications)にも対応しています。サンプルプログラムが付属していますので、どなたでも簡単に使用することができます。
CryptLightは、Microsoft RSA Base Providerなど他の暗号ソフト、ライブラリは一切使用しておりません。また、商用、非商用を問わずランタイムライセンスフリーです。正規に代金を支払った方は、CryptLightをご自分の開発したアプリケーションに組み込んで、自由に販売、配布する事ができます。
暗号鍵の設定
暗号化、復号化に使用する暗号鍵を設定します。CryptLightで使用できる暗号鍵の長さは、32〜448ビットの可変長です。
文字列の暗号化
1バイト単位で任意の長さの文字列を暗号化します。日本語の文字列にも対応しています。暗号化後のデータは、全て半角ASCII文字だけのデータとなります。そのため、暗号化後のデータをメール等で直接送受信しても文字化けしません。
文字列の復号化
2.で暗号化された文字列を復号化します。復号化時にデータの改ざん検知を行う事ができます。
バイナリーデータの暗号化
1バイト単位で任意の長さのバイナリーデータを暗号化します。
バイナリーデータの復号化
4.で暗号化されたバイナリーデータを復号化します。復号化時にデータの改ざん検知を行う事ができます。
ファイルの暗号化
1バイト単位で任意の長さのファイルを暗号化します。極めて高速に動作します。
ファイルの復号化
6.で暗号化されたファイルを復号化します。復号化時にデータの改ざん検知を行う事ができます。
★ CryptLightは、Internet Explorer上で、スクリプトを実行しても安全なActiveXコントロールだとマークされています。
Windows98、Me、NT4.0(Service Pack 3以上)、2000、XPが正常に動作するパソコン
★ 開発者の方が、ライセンスキーの登録、サンプルプログラムの実行を行う場合のみ、Internet Explorer 5.0以上がインストールされている必要があります。(CryptLight自体の動作には必要ありません。)
★ 全てのパソコンでの動作を保証するわけではありません。他のソフトとの相性などによって、うまく動作しない場合もあります。
このソフトは自動解凍・インストール方式です。配布ファイルを実行することで自動的にファイルがコピーされ、システムに登録されます。バージョンアップする場合も同じです。新しい配布ファイルを実行することで自動的にファイルが上書きされ、最新のものに更新されます。
インストールが完了したら、必ず一度サンプルプログラムを起動して、CryptLightが正常に動作しているかどうか確認してください。サンプルプログラムは、Windowsのスタートメニューに登録されています。
★ バージョンアップを行う前には、CryptLightを使用している全てのプログラムを終了させてください。特に、IISからCryptLightをお使いの場合はご注意ください。あらかじめ、インターネット・サービス・マネージャを起動し、「IISを再起動します...」という機能を実行して、ASPの動作を一度停止する必要があります。
★ CryptLightを、ご自分の開発したアプリケーションに組み込んで配布される場合には、このインストーラを使う必要はありません。(使ってもかまいません。)全て手動でファイルをコピーして、インストールする事もできます。詳しい手順は、ファイルの配布をご覧ください。
コントロールパネルの「アプリケーションの追加と削除」から、CryptLightを選択して、変更/削除ボタンをクリックしてください。
★ アンインストールを行う前には、CryptLightを使用している全てのプログラムを終了させてください。特に、IISからCryptLightをお使いの場合はご注意ください。あらかじめ、インターネット・サービス・マネージャを起動し、「IISを再起動します...」という機能を実行して、ASPの動作を一度停止する必要があります。
CryptLightの使い方はとても簡単です。
ほとんどの場合は、この4つのステップをマスターするだけで十分です。ここでは、Visual Basic 6.0のプログラミングを例にして解説します。なお、暗号化の仕組みなどについては、備考をごらんください。
CryptLightを使用するためには、まず、Object型の変数にCryptLightのオブジェクトを作成する必要があります。一般的には下記のようにコーディングしてください。ここでは、Clという変数にオブジェクトを作成しています。以後の操作は、全てこの変数を通して行います。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
"CryptLight.Blowfish"というのは、システムの中で、CryptLightを一意に表す名前です。この通り間違えないようにコーディングする必要があります。
もしもオブジェクトを作成できなかった場合には、Visual Basicがエラーを表示します。インストールが正常に行われているかどうか、サンプルプログラムなどを実行して確認してください。
続いて、暗号鍵を設定します。暗号鍵は、パスワードのようなもので、送信者がある鍵を使って暗号化したデータは、受信者が同じ鍵を用いて復号化すれば元のデータを得る事ができます。CryptLightでは、32〜448ビット(4〜56バイト)の可変長共通鍵を使用します。
暗号鍵の設定はとても簡単です。下記のようにコーディングしてください。ここでは、暗号鍵を"ABCDEFGHIJ"という10バイトの文字列に設定していますが、4〜56バイトの範囲内であればどんな文字列でもかまいません。
Cl.SetKey "ABCDEFGHIJ"
暗号鍵の長さが規定外だった場合などは、Visual Basicがエラーを表示します。
暗号鍵を設定したら、データの暗号化を行うことができます。一番簡単な方法は、文字列を暗号化する事です。下記のようにコーディングしてください。ここでは、"こんにちは"という文字列を暗号化しています。
Dim CipherText As String
CipherText = Cl.EncryptText("こんにちは")
この例では、暗号化後のデータはCipherTextという変数に代入されます。この例の鍵を使って暗号化すると、"Z3nM9LbKpBQAYl0Oez1X5w=="という暗号文が得られるはずです。このように、CryptLightでは文字列を暗号化した場合、暗号化後のデータは全て半角ASCII文字だけのデータになります。
今度は、暗号化したデータを復号化してみましょう。下記のようにコーディングしてください。ここでは、CipherTextに代入されている暗号化データを復号化して、PlainTextに元のデータを得ています。
Dim PlainText As String PlainText = Cl.DecryptText(CipherText)
各メソッドの詳しい使い方は、リファレンスマニュアルをごらんください。
CryptLightはシェアウェアです。どなたでも無料でお試しになれますが、継続して使用される場合や、CryptLightをご自分の開発したアプリケーションに組み込んで他の人に配布する場合には、代金をお支払いください。
試用期間はインストール後30日間です。試用期間中も全ての機能が使用できますが、試用期間が過ぎると動作しなくなります。お支払い手続きが完了し、ライセンスキーを登録すると、制限無く動作します。まず十分に試用して、きちんと動く事、ご自分の必要とする機能が使える事を確認してからお支払いください
代金は1ライセンス4,800円です。アプリケーションをお一人で開発される場合は1本分の代金で結構ですが、複数の人で開発される場合には、人数分のお支払いをお願いします。また、ライセンスキーは、他の人に譲渡できません。
正規に代金をお支払いいただいた場合のみ、このソフトはランタイムライセンスフリーです。商用、非商用を問わず、CryptLightをご自分の開発したアプリケーションに組み込んで、自由に販売、配布する事ができます。
代金のお支払いには、株式会社ベクターのシェアレジを利用してください。お支払い時には、取り扱い手数料100円と別途消費税が加算されます。お支払いには、各種クレジットカードがご利用いただけます。
★ お支払いの前には、下記の注意事項を良くお読みください。
お支払い手続きが途中のステップまで進みますと、そこで一旦確認のメールが届きます。(通常は1〜2分以内に届きます。)内容をご確認いただき、間違いがなければ、メールの内容にしたがってさらに手続きを進めてください。
最終的に手続きが完了すると、ライセンスキーのメールが届きます。(通常は1〜2分以内に届きます。)メールに記載されたライセンスキーは、下記のようにして登録してください。
ディスククラッシュなどでライセンスキーを無くしてしまった方は、株式会社ベクターのキー再送付サービスをご利用ください。お支払い時から5年間、自動でライセンスキーを再送付できます。
CryptLightは、ご自分の開発したアプリケーションに組み込んで、エンドユーザに配布する事ができます。CryptLightの配布ファイルをそのままエンドユーザに渡して、エンドユーザにCryptLightのインストーラを実行してもらってもかまいませんが、あなたのアプリケーションのインストーラで一緒に自動的にインストールした方がスマートでしょう。
その時は、下記のファイルをあなたのアプリケーションと一緒に配布してください。これらのファイルは、CryptLightをインストールしたディレクトリ(通常は、C:\Program Files\CryptLight)に入っています。このディレクトリには、その他にもサンプルプログラム等が入っていますが、動作に必要なものは下記の3つだけです。
この3つのファイルを、エンドユーザのC:\Program Files\CryptLightというディレクトリにコピーしてください。このディレクトリが存在しない時は、作成する必要があります。他のディレクトリでも動作しますが、なるべくC:\Program Files\CryptLightをおすすめします。
★ CryptLightの配布ファイルをそのままエンドユーザに渡して、エンドユーザにCryptLightのインストーラを実行してもらった場合には、まだライセンスキーの登録がなされていないため、試用版の状態となります。CryptLight.licというファイルだけは、あなたのファイルを別途コピーして上書きする必要があります。
CryptLightはActiveXコントロールであるため、ファイルをコピーしただけでは動作しません。システムに登録する必要があります。一般的なインストーラをお使いの場合には、必ずActiveXコントロールの登録機能がついているはずですので、その機能を使ってCryptLight.dllというファイルを登録してください。(その他2つのファイルは登録の必要はありません。コピーするだけでOKです。)
そのような機能が無いインストーラをお使いの場合には、何らかの方法で、インストール時、またはあなたのアプリケーションの初回の実行時などに、下記のようなコマンドを実行してください。なお、regsvr32.exeは、Windowsのシステムフォルダに入っている標準のコマンドです。
regsvr32 "C:\Program Files\CryptLight\CryptLight.dll"
正常に登録された場合、「DllRegisterServer in C:\Sample\CryptLight.dll succeeded.」というメッセージが表示されます。エンドユーザに何も見せたくない場合には、下記のように /s オプションを付けてコマンドを実行してください。、メッセージの表示無しで登録する事ができます(サイレントモード)。
regsvr32 /s "C:\Program Files\CryptLight\CryptLight.dll"
以上で完了です。なお、逆にCryptLightの登録を削除する場合には、下記のように /u オプションを付けてコマンドを実行してください。ActiveXコントロールの登録が削除されます。
regsvr32 /u "C:\Program Files\CryptLight\CryptLight.dll"
その後、コピーした3つのファイルを削除すれば、CryptLightはシステムから完全に削除されます。
Visual Studio Installer 1.1は、マイクロソフト社から配布されているセットアッププログラムを簡単に作成するためのツールです。Visual Basic 6.0などVisual Studio製品をお使いの方は、無料でダウンロードして使用する事ができます。
このツールを使用して、あなたのアプリケーションと一緒にCryptLightを自動的にインストールする事もできます。その場合には、Visual Studio Installer上で下記のような設定を行ってください。
[プロジェクト] メニューの [ファイルの追加] をクリックし、下記 の3つのファイルをあなたのプロジェクトに追加してください。
C:\Program Files\CryptLight\CryptLight.dll
C:\Program Files\CryptLight\CryptLight.lic
C:\Program Files\CryptLight\BfLib.dll
これらのファイルは、必ずしもエンドユーザの、C:\Program Files\CryptLightにインストールする必要はありません。あなたのアプリケーションと同じディレクトリ、例えば、C:\Program Files\SampleAppなどにインストールしてもかまいません。
[プロジェクト エクスプローラ] ウィンドウで、CryptLight.dllをクリックします。そして、[プロパティ] ウィンドウで、このファイルのRegisterプロパティを、1 - vsifrSelfRegに設定します。このプロパティを設定する事により、Visual Studio Installerは、インストール時に自動的にCryptLight.dllをシステムに登録します。regsvr32.exeを実行する必要はありません。
注意:このプロパティを設定するのは、CryptLight.dll だけです。その他2つのファイルは、0 - vsifrNoneのままに設定してください。
このソフトの著作権は作者にあり、著作権法によって保護を受けています。このソフトおよび付属ファイルを無断で、改変、引用、転載、譲渡、配布する事を禁じます。
このソフトを使って起こった如何なる損害にも、何人も一切責任を負いません。各自の責任において使用してください。
正規に代金をお支払いいただいた場合のみ、このソフトはランタイムライセンスフリーです。商用、非商用を問わず、CryptLightをご自分の開発したアプリケーションに組み込んで、自由に販売、配布する事ができます。
CryptLightに関するご意見、ご感想、ご質問は、電子メールでお気軽にお寄せください。また、バグなどを見つけた方はどうぞお知らせください。できるだけすみやかに改訂版に反映させていただきます。
また、CryptLightの保守、およびCryptLightを応用したアプリケーションの構築なども別途承っております。お気軽にお問い合わせください。
山崎ソフトウェア設計事務所 山崎 和夫
| CryptLight サポートページ: | http://www.yamasaki.com/cryptlight |
| 作者ホームページ: | http://www.yamasaki.com |
| E-Mail: | kazuo@yamasaki.gr.jp |
CryptLightには、下記のメソッドが用意されています。
| 番号 | メソッド名 | 概要 |
|---|---|---|
| 1 | SetKey | 暗号鍵を設定する |
| 2 | EncryptText | 文字列を暗号化する |
| 3 | DecryptText | 文字列を復号化する |
| 4 | EncryptBin | バリナリーデータを暗号化する |
| 5 | DecryptBin | バリナリーデータを復号化する |
| 6 | EncryptFile | ファイルを暗号化する |
| 7 | DecryptFile | ファイルを復号化する |
| 8 | Encrypt | データを暗号化する(基本メソッド) |
| 9 | Decrypt | データを復号化する(基本メソッド) |
| 10 | LastError | 直前に発生したエラーコードを取得する |
| 11 | LastErrorMsg | 直前に発生したエラーメッセージを取得する |
| 12 | Version | CryptLightのバージョン情報を取得する |
このメソッドは、暗号化、復号化のための暗号鍵の設定を行います。CryptLightでは、32〜448ビット(4〜56バイト)の可変長共通鍵を使用します。送信者がある鍵を使って暗号化したデータは、受信者が同じ鍵を用いて復号化すれば元のデータを得る事ができます。暗号鍵は、4〜56バイトの範囲内であればどんな文字列でもかまいません。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム1などをご覧ください。
★ どのような暗号化アルゴリズムでも、第三者に暗号鍵が漏洩してしまえば役に立ちません。重要なデータを取り扱う時は、暗号鍵の管理に十分気をつけてください。
このメソッドは、文字列を暗号化して、戻り値として暗号化後の文字列を返します。任意の長さの文字列を1バイト単位で暗号化できます。
日本語や改行文字を含む文字列にも対応しています。また、暗号化後の文字列は、BASE64法を用いて符号化されていますので、全て半角ASCII文字だけのデータとなります。そのため、暗号化データを文字列型の変数で扱ったり、メール等で直接送受信しても文字化けしません。
下記の例は、最も簡単な使い方です。"こんにちは"という文字列を暗号化します。
CipherText = Cl.EncryptText("こんにちは")
CryptLightは、通常はECBモードと呼ばれる一般的な方法で暗号化を行いますが、引数Modeに1を指定する事により、CBCモードと呼ばれるより安全な方法で暗号化を行う事ができます。ECBモードの方が10倍程度高速に動作しますが、CBCモードの方が安全性は高くなります。目的に応じて使い分けてください。例えば、下記のように使用します。
CipherText = Cl.EncryptText("こんにちは", 1)
引数MDCheckに1を指定する事により、データの改ざん検知を行う事ができます。このオプションを指定すると、MD5法を用いてデータの要約値(そのデータの指紋のようなもの)を計算し、暗号化データの末尾に付加します。この要約値は復号化時に照合され、もしもデータが1ビットでも改ざんされていると検知します。例えば、下記のように使用します。
'ECBモードで改ざん検知を行う場合
CipherText = Cl.EncryptText("こんにちは", 0, 1)
'CBCモードで改ざん検知を行う場合
CipherText = Cl.EncryptText("こんにちは", 1, 1)
この例のように、ECBモード、CBCモードどちらでも、データの改ざん検知を行う事ができます。なお、BASE64、ECBモード、CBCモード、MD5の詳細については、備考をごらんください。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム1をご覧ください。
★ 暗号化後の文字列の長さは、暗号化前の文字列に1〜8バイトを加えた長さの約4/3倍となります。例えば、暗号化前の文字列が1,000バイトの長さの場合は、暗号化後には1,344バイトとなります。また、CBCモードを指定した場合には、文字列の長さに関係なくさらに12バイト程度、改ざん検知を行う場合は、文字列の長さに関係なくさらに22バイト程度長くなります。
★ 暗号化前の文字列に、改行文字が含まれていても、暗号化後の文字列は必ず1行になります。暗号化後の文字列の途中や最後に改行コードは含まれません。
このメソッドは、EncryptTextメソッドで暗号化した文字列を復号化して返します。使い方は、EncryptTextメソッドと同じです。
データの改ざん検知を行っている場合、もしもデータが改ざんされていた場合にはエラーが発生します。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム2をご覧ください。
★ 引数ModeとMDCheckの指定は、暗号化時と同じにしてください。例えば、ECBモードで暗号化したデータを、CBCモードで復号化するような事はできません。
このメソッドは、バイナリーデータを暗号化して、戻り値として返します。任意の長さのデータを1バイト単位で暗号化できます。
このメソッドの引数には、Variant型の配列を与えてください。Byte型の配列ではありませんのでご注意ください。配列の各要素には、暗号化前のバイナリーデータを先頭から1バイト分ずつ入れておいてください。下記の例は、16進数で12 34 56という3バイトのデータを暗号化する例です。
Dim PlainData(2) As Variant PlainData(0) = 18 '注:16進数12は、10進数で18 PlainData(1) = 52 ' 16進数34は、10進数で52 PlainData(2) = 86 ' 16進数56は、10進数で86 Dim CipherData As Variant CipherData = Cl.EncryptBin(PlainData)
暗号化後のデータは、Variant型の新しい配列に入れられて返されます。Byte型の配列ではありませんのでご注意ください。配列の各要素には、暗号化後のデータが先頭から1バイト分ずつ入っています。CipherData(0), CipherData(1), CipherData(2)...として参照してください。
引数Modeに1を指定する事によりCBCモードで暗号化する事ができます。また、引数MDCheckに1を指定する事により、データの改ざん検知を行う事ができます。これらのオプションの使い方は、EncryptTextメソッドをごらんください。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム3をご覧ください。
★ このメソッドをJava Scriptからお使いになる時は、呼び出しの部分だけをVB Scriptで記述される事をおすすめします。戻り値の配列は、VBArrayオブジェクトを使えば、Java Scriptの配列に変換する事ができます。
★ 暗号化後のデータの長さは、暗号化前のデータよりも1〜8バイト長くなりますので、戻り値の配列の上限は暗号化前と同じではありません。Visual BasicのUBound関数などを使って調べる必要があります。また、CBCモードを指定した場合には、さらに8バイト、改ざん検知を行う場合は、さらに16バイト長くなります。
★ 大量のバイナリーデータを暗号化する時には、EncryptFileメソッドを使った方が高速に処理できます。
このメソッドは、EncryptBinメソッドで暗号化したバイナリーデータを復号化して返します。使い方は、EncryptBinメソッドと同じです。
データの改ざん検知を行っている場合、もしもデータが改ざんされていた場合にはエラーが発生します。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム4をご覧ください。
★ 引数ModeとMDCheckの指定は、暗号化時と同じにしてください。例えば、ECBモードで暗号化したデータを、CBCモードで復号化するような事はできません。
このメソッドは、入力ファイルからデータを読み込み、暗号化して出力ファイルに出力します。任意の長さのファイルを1バイト単位で暗号化できます。このメソッドは極めて高速に動作しますので、大量のデータを素早く暗号化できます。
引数Modeに1を指定する事によりCBCモードで暗号化する事ができます。また、引数MDCheckに1を指定する事により、データの改ざん検知を行う事ができます。これらのオプションの使い方は、EncryptTextメソッドをごらんください。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム5をご覧ください。
★ 暗号化後のファイルの長さは、暗号化前のファイルよりも1〜8バイト長くなります。また、CBCモードを指定した場合には、さらに8バイト、改ざん検知を行う場合は、さらに16バイト長くなります。
このメソッドは、EncryptFileで暗号化したファイルを復号化します。使い方は、EncryptFileメソッドと同じです。このメソッドは、極めて高速に動作しますので、大量のデータを素早く復号化できます。
データの改ざん検知を行っている場合、もしもデータが改ざんされていた場合にはエラーが発生します。
このメソッドでエラーが発生した時には、LastErrorメソッド、またはLastErrorMsgメソッドを用いて、より詳しいエラー番号とエラーメッセージを取得する事ができます。
具体的な使い方に関しては、サンプルプログラム6をご覧ください。
★ 引数ModeとMDCheckの指定は、暗号化時と同じにしてください。例えば、ECBモードで暗号化したデータを、CBCモードで復号化するような事はできません。
このメソッドは、他のメソッドの基本となっているメソッドです。純粋にBlowfish暗号化アルゴリズムだけを実行し、データをECBモードで暗号化します。使い方は、EncryptBinメソッドと同じです。
★ このメソッドの使用は、通常おすすめしません。より便利なEncryptText、EncryptBin、EncryptFileメソッドをお使いください。
★ 暗号化前のデータの長さは、必ず8バイトの整数倍の長さである必要があります。
★ 暗号化後のデータの長さは、必ず暗号化前のデータと同じ長さになります。
このメソッドは、他のメソッドの基本となっているメソッドです。純粋にBlowfish復号化アルゴリズムだけを実行し、データをECBモードで復号化します。使い方は、DecryptBinメソッドと同じです。
★ このメソッドの使用は、通常おすすめしません。より便利なDecryptText、DecryptBin、DecryptFileメソッドをお使いください。
★ 復号化前のデータの長さは、必ず8バイトの整数倍の長さである必要があります。
★ 復号化後のデータの長さは、必ず復号化前のデータと同じ長さになります。
このメソッドは、直前に呼び出した他のメソッドで発生したエラー番号を返します。エラーが発生していない時は0を返します。
プログラム中で、
などを使用して、実行時エラーが発生してもプログラムが中断しないようにした場合には、必要に応じてこのメソッドを呼び出して、エラーチェック、エラー番号の取得を行ってください。
このメソッドは、直前に呼び出したメソッドで発生したエラーメッセージを返します。詳しいエラーの情報を知りたい時に呼び出してください。
このメソッドは、CryptLightのバージョン情報を"CryptLight Version 2.30"というような文字列で返します。
CryptLightで採用しているBlowfish法の詳細な理論は、本家サイトThe Blowfish Encryption Algorithmをごらんください。
このBlowfish法は、1993年にBruce Schneier氏が考案した方式で、32〜448ビットの可変長の鍵を持ち(DESは56ビットの固定長鍵)、DESと同じように64ビットのブロック暗号化方式を取ります。暗号化は、下記のように動作します。
暗号鍵(32〜448ビット) ↓ 平文 ┌─────┐ 暗号文 (64ビット) → │暗号化関数│ → (64ビット) └─────┘
また、復号化は、同じ暗号鍵を使って下記のように動作します。
暗号鍵(32〜448ビット) ↓ 暗号文 ┌─────┐ 平文 (64ビット) → │復号化関数│ → (64ビット) └─────┘
Blowfish法は、現在用いられている共通鍵暗号化アルゴリズムの中でも、非常に強度が高く、かつ高速な方式の一つと言われており、パテントフリー、ロイヤリティフリーで使用する事ができます。海外では非常に多数の製品に組み込まれている方式です。簡潔なアルゴリズムで、下記のように非常に高速に動作します。
| 方式 | 1バイトの暗号化に必要なクロック |
|---|---|
| Blowfish | 9 |
| RC5 | 12 |
| DES | 18 |
| Triple-DES | 18 |
| IDEA | 50 |
CryptLightで採用しているBlowfish法は、DESやIDEAなど他の多くの暗号化アルゴリズムと同じく、64ビットのブロック化暗号方式です。そのため、データの長さが64ビットの整数倍以外の場合には、データの末尾にパディングを行う必要があります。
CryptLightでは、暗号化の際にはRFC2898で規定された標準的な方法でパディングを行っています。そのため、暗号化後のデータは、暗号化前のデータよりも1〜8バイト長くなります。また、復号化の際には、そのパディングを削除しています。
CryptLightでは、ECBモードとCBCモードという2つの方法で暗号化を行う事ができます。
ECBモード(電子符号表方式)では、暗号化前のデータを64ビットのブロック毎に分割し、純粋にBlowfish法だけを適用して暗号化します。極めて高速に処理できます。
CBCモード(暗号ブロック連鎖方式)では、1つ前の暗号化したブロックと暗号化対象の現在のブロックのデータの排他的ORを取ってからBlowfish法を適用し、そのブロックの暗号化を行います。最初のブロックは、その前のブロックがないので初期ベクトルとして64ビットの乱数値を与えて排他的ORを取ります。この初期ベクトルの値自体は、ECBモードで暗号化を施されて、データの先頭に連結されて送信されます。
CBCモードでは、もしも暗号化前のデータに同じパターンがあっても、暗号化後のデータにはそのパターンが顕わになりません。そのため、暗号解読が極めて困難になり、安全性が増します。しかし、その分処理速度は遅くなります。
CryptLightでは、MD5法を用いてデータの改ざん検知を実現しています。MD5法とは、ハッシュ関数とも呼ばれるアルゴリズムで、任意の長さのデータから、固定長(128ビット)の要約値を計算します。この要約値は、下記のような性質を持ちます。
そのため、要約値は元の文書と指紋のような関係を持っているとされ、電子署名やメッセージの認証に用いられます。
CryptLightでは、暗号化前のデータに対する要約値を計算して、データの末尾に連結します。そしてブロック全体を暗号化してから送信します。復号化の際には、受信したブロック全体を復号化し、その中からデータを取り出し、要約値を計算して照合します。もし、悪者がデータの改ざんを試みても、要約値自体も暗号化されているため、要約値を偽造する事は極めて難しくなります。そのため、改ざんを確実に検知する事ができます。
一般にあるデータを暗号化した場合、暗号化後のデータは表示不可能な文字コードを含むバイナリーデータとなります。このようなデータは、プログラム中で文字列型としては扱いにくくなるため、CryptLightでは、EncryptTextメソッドを用いて文字列を暗号化した場合、暗号化後のデータをBASE64法を用いて符号化しています。符号化したデータは、DecryptTextメソッドで復号化した時に元に戻されます。
BASE64法は、任意の長さのバイナリーデータを、「A〜Z, a〜z, 0〜9, +, /, =」の65文字だけを使って符号化します。全て表示可能な半角ASCII文字であるため、暗号化後のデータを、プログラム中で文字列型の変数に代入したり、メール等で直接送受信しても文字化けをおこさず、安全に取り扱う事ができます。
BASE64法は、元のデータ3バイトを4文字で表現するため、データの長さは約33%増加します。
このサンプルプログラムは、"山田太郎 03-1234-5678"という文字列を暗号化し、暗号化後の文字列をメッセージボックスに表示します。
Private Sub Sample1()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'暗号化前のデータを表示する。
Dim PlainText As String
PlainText = "山田太郎 03-1234-5678"
MsgBox "これから " & PlainText & " というデータを暗号化します。"
'暗号化。
Dim CipherText As String
CipherText = Cl.EncryptText(PlainText)
'暗号化したデータを表示する。
MsgBox "暗号化しました。暗号化後のデータは " & CipherText & " です。"
End Sub
このサンプルプログラムは、前の例で暗号化された"a2sLfFpTzdtKY8ad/qS5QLwiSwEph6Wu"という文字列を復号化し、復号化後の文字列をメッセージボックスに表示します。
Private Sub Sample2()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'復号化前のデータを表示する。
Dim CipherText As String
CipherText = "a2sLfFpTzdtKY8ad/qS5QLwiSwEph6Wu"
MsgBox "これから " & CipherText & " というデータを復号化します。"
'復号化。
Dim PlainText As String
PlainText = Cl.DecryptText(CipherText)
'復号化したデータを表示する。
MsgBox "復号化しました。復号化後のデータは " & PlainText & " です。"
End Sub
このサンプルプログラムは、Plain.datというファイルの先頭100バイトのみを読み込み、そのデータを暗号化してCipher.datに書き込みます。この例では、Cipher.datに書き込むデータは104バイトになります。
なお、実際のファイルの暗号化には、EncryptFileメソッドを使った方が高速で便利です。この例は、単なるバイナリーデータの暗号化の一例としてごらんください。
Private Sub Sample3()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'入出力ファイルをオープンする。
Open "Plain.dat" For Binary As #1
Open "Cipher.dat" For Binary As #2
'100バイトのバッファを用意して、入力データを読み込む。
ReDim Buf(99) As Byte
Get #1, , Buf
'BufはBYTE型の配列なので、CryptLightに直接渡すことができない。
'そこで、同じ大きさのVARIANT型の配列に変換する。
ReDim PlainData(UBound(Buf)) As Variant
Dim i As Integer
For i = 0 To UBound(Buf)
PlainData(i) = Buf(i)
Next
'暗号化する。引数はVARIANT型の配列。戻り値もVARIANT型の配列で
'ある事に注意。
Dim CipherData As Variant
CipherData = Cl.EncryptBin(PlainData)
'暗号化後のデータは、暗号化前のデータと同じ長さとは限らない。
'(この例では104バイトとなる。)そのため、まずCipherDataの長さ
'を調べて、動的に配列を確保する。
Dim CipherLen As Integer
CipherLen = UBound(CipherData)
ReDim Buf(CipherLen) As Byte
'CipherDataはVARIANT型の配列なので、ファイルにそのまま書き込む
'には適さない。ここでBYTE型の配列に変換する。
For i = 0 To CipherLen
Buf(i) = CipherData(i)
Next
'出力データを書き込む。
Put #2, , Buf
'ファイルのクローズ。
Close #1
Close #2
End Sub
このサンプルプログラムは、前の例で暗号化されたCipher.datという104バイトのファイルを読み込み、そのデータを復号化してPlain2.datに書き込みます。Plain2.datの大きさは、もとのデータと同じ100バイトになります
Private Sub Sample4()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'入出力ファイルをオープンする。
Open "Cipher.dat" For Binary As #1
Open "Plain2.dat" For Binary As #2
'104バイトのバッファを用意して、入力データを読み込む。
ReDim Buf(103) As Byte
Get #1, , Buf
'BufはBYTE型の配列なので、CryptLightに直接渡すことができない。
'そこで、同じ大きさのVARIANT型の配列に一旦格納する。
ReDim CipherData(UBound(Buf)) As Variant
Dim i As Integer
For i = 0 To UBound(Buf)
CipherData(i) = Buf(i)
Next
'復号化する。引数はVARIANT型の配列。戻り値もVARIANT型の配列で
'ある事に注意。
Dim PlainData As Variant
PlainData = Cl.DecryptBin(CipherData)
'復号化後のデータは、復号化前のデータと同じ長さとは限らない。
'(この例では100バイトとなる。)そのため、まずPlainDataの長さを
'調べて、動的に配列を確保する。
Dim PlainLen As Integer
PlainLen = UBound(PlainData)
ReDim Buf(PlainLen) As Byte
'PlainDataはVARIANT型の配列なので、ファイルにそのまま書き込む
'には適さない。ここでBYTE型の配列に変換する。
For i = 0 To PlainLen
Buf(i) = PlainData(i)
Next
'出力データを書き込む。
Put #2, , Buf
'ファイルのクローズ。
Close #1
Close #2
End Sub
このサンプルプログラムは、Plain.datというファイルを読み込み、そのデータを暗号化してCipher.datに書き込みます。
Private Sub Sample5()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'Plain.datというファイルを暗号化して、Cipher.datに書き込む。
Cl.EncryptFile "Plain.dat", "Cipher.dat"
End Sub
このサンプルプログラムは、前の例で暗号化したCipher.datというファイルを読み込み、そのデータを復号化してPlain2.datに書き込みます。
Private Sub Sample6()
'CryptLightオブジェクトの作成。
Dim Cl As Object
Set Cl = CreateObject("CryptLight.Blowfish")
'暗号鍵の設定。この例ではABCDEFGHIJに設定する。
Cl.SetKey "ABCDEFGHIJ"
'Cipher.datというファイルを復号化して、Plain2.datに書き込む。
Cl.DecryptFile "Cipher.dat", "Plain2.dat"
End Sub
このサンプルプログラムは、Microsoft IIS用のASP(Active Server Pages)プログラムで、VB Scriptで記述されています。文字列を入力するフォームを表示し、入力された文字列を暗号化し、また復号化して表示します
このプログラムは、配布ファイルの中に Sample.asp という名前で含まれていますので参照してください。また、お使いのサーバにコピーすれば試してみる事もできます。
このサンプルプログラムは、WSH(Windows Scriptting Host)プログラムで、VB Scriptで記述されています。文字列を入力するダイアログボックスを表示し、入力された文字列を暗号化し、また復号化してメッセージボックスに表示します
このプログラムは、配布ファイルの中に Sample.vbs という名前で含まれていますので参照してください。また、このファイルはスタートメニューに登録されていますので、すぐに試してみる事もできます。
このサンプルプログラムは、Internet Explorer 5.0以上で動作するHTA(HTML Applications)プログラムで、Java ScriptとDynamic HTMLで記述されています。文字列を入力するフォームを表示し、入力された文字列を暗号化し、また復号化して表示します
このプログラムは、配布ファイルの中に Sample.hta という名前で含まれていますので参照してください。また、このファイルはスタートメニューに登録されていますので、すぐに試してみる事もできます。