オープンソース・ソフトウェアの開発とダウンロード

CVS リポジトリの参照

Annotation of /perldocjp/docs/modules/Crypt-CBC-2.08/CBC.pod

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Fri Dec 27 10:08:12 2002 UTC (21 years, 4 months ago) by hippo2000
Branch: MAIN
Initial Import

1 hippo2000 1.1 =head1 名前
2    
3     Crypt::CBC - 暗号ブロック連鎖(Cipher Block Chaining)モードでデータを暗号化します
4    
5     =head1 SYNOPSIS
6    
7     use Crypt::CBC;
8     $cipher = Crypt::CBC->new( {'key' => 'my secret key',
9     'cipher' => 'Blowfish',
10     'iv' => '$KJh#(}q',
11     'regenerate_key' => 0, # default true
12     'padding' => 'space',
13     'prepend_iv' => 0
14     });
15    
16     $ciphertext = $cipher->encrypt("This data is hush hush");
17     $plaintext = $cipher->decrypt($ciphertext);
18    
19     $cipher->start('encrypting');
20     open(F,"./BIG_FILE");
21     while (read(F,$buffer,1024)) {
22     print $cipher->crypt($buffer);
23     }
24     print $cipher->finish;
25    
26    
27     =head1 説明
28    
29     このモジュールは暗号化方法 暗号ブロック連鎖(cipher block chaining mode (CBC))の
30     Perlだけによる実装です。DESやIDEAのようなブロック暗号と組み合わせ、
31     任意の長さのメッセージを暗号化し復号化することができます。
32     暗号化されたメッセージはB<SSLeay>により使われる暗号化フォーマットと
33     互換性があります。
34    
35     このモジュールを利用するためには、まずnew()でCrypt::CBC暗号オブジェクトを
36     生成します。暗号作成の時点で、利用する暗号化キーとオプションでブロック暗号化
37     アルゴリズムを指定します。暗号化あるいは復号化処理を初期化するためにstart()
38     メソッドを呼び出し、1つあるいは複数のデータブロックを暗号化あるいは
39     復号化するために呼び出し、最後に最後のブロックを埋め込み、暗号化するため
40     finish()を呼びます。便利になるように、一度にデータの値全体を
41     処理するためencrypt() と decrypt()を呼び出すことが出来ます。
42    
43     =head2 new()
44    
45     $cipher = Crypt::CBC->new( {'key' => 'my secret key',
46     'cipher' => 'Blowfish',
47     'iv' => '$KJh#(}q',
48     'regenerate_key' => 0, # デフォルトはtrue
49     'padding' => 'space',
50     'prepend_iv' => 0
51     });
52    
53     # あるいは (以前のバージョンとの互換性のため)
54     $cipher = new Crypt::CBC($key,$algorithm);
55    
56     new()メソッドは新しいCrypt::CBCオブジェクトを作成します。
57    
58     任意の長さの任意の一連の文字にすることができる、暗号化/復号化キーを
59     与えなければなりません。regenerate_keyがfalseの値として指定されなければ、
60     実際に使われるキーは、あなたが与えたキーのMD5ハッシュから派生されます。
61     cipherはオプションで、他に指定されなければDESがデフォルトになります。
62     あらかじめインストールしておいた互換性のあるブロック暗号であれば
63     なんでも使うことができます。現在、これにはCrypt::DES、Crypt::DES_EDE3、
64     Crypt::IDEA、Crypt::Blowfish、そして Crypt::Rijndaelが含まれます。
65     それらのフルネーム("Crypt::IDEA")か省略形("IDEA")を使って、それらを
66     参照することができます。
67    
68     newへのオプションの'iv'というキーを渡すことによって、あるいは
69     $cipher->start()を呼び出す前に$cipher->set_initialization_key($iv)
70     を呼び出すことによって、初期化ベクトルが指定することができます。
71     暗号化されたテキストが正規表現/^RandomIV.{8}/にマッチするテキストで
72     表されているのであれば、IVは復号化のさいには無視されます。その場合には
73     "RandomIV"の後ろに付く8文字がIVとして使われます。暗号化するとき、
74     デフォルトでは暗号化されたテキストは"RandomIVE<lt>IVE<gt>"(16 バイト)で
75     表されます。これを無効にするためには、'prepend_iv'を
76     falseの値に設定してください。パディング方法は'padding'オプションによって
77     指定することができます。何もパディング方法が指定されなければ、
78     PKCS#5("標準")によるパディングが想定されます。
79    
80     =head2 start()
81    
82     $cipher->start('encrypting');
83     $cipher->start('decrypting');
84    
85     start()メソッドは一連の暗号化、復号化の段階のためにcipherを準備し、
86     必要であればcipherの内部の状態を再設定します。
87     暗号化(encryption)あるいは復号化(dencryption)のどちらを望んでいるのかを
88     示す文字列を与える必要があります。"E"、あるいは"e"で始まる任意の単語は
89     暗号化を示します。"D"、あるいは"d"で始まる任意の単語は復号化を示します。
90    
91     =head2 crypt()
92    
93     $ciphertext = $cipher->crypt($plaintext);
94    
95     start()を呼び出した後、望んでいるデータを暗号化するため必要なだけ
96     crypt()を呼び出さなければなりません。
97    
98     =head2 finish()
99    
100     $ciphertext = $cipher->finish();
101    
102     暗号化アルゴリズムのブロックサイズ(典型的には8バイト)の余りがない倍数に
103     なるまで、CBCアルゴリズムはデータブロックを内部的にバッファしなければ
104     なりません。最後のcrypt()呼び出しの後、finish()を呼ばなければなりません。
105     これは内部バッファを完了させ、残っている暗号化テキストを返します。
106    
107     典型的なアプリケーションでは、以下のようなループの中でファイルあるいは
108     入力ストリームから平文を読み込み、結果を標準出力に出力することになる
109     でしょう:
110    
111     $cipher = new Crypt::CBC('hey jude!');
112     $cipher->start('encrypting');
113     print $cipher->crypt($_) while <>;
114     print $cipher->finish();
115    
116     =head2 encrypt()
117    
118     $ciphertext = $cipher->encrypt($plaintext)
119    
120     この便利な関数は、与えられた平文を処理し、対応する暗号テキストを返す、
121     start()、crypt()そして finish()の全体の流れを、あなたに代わって
122     実行します。
123    
124     =head2 decrypt()
125    
126     $plaintext = $cipher->decrypt($ciphertext)
127    
128     この便利な関数は、与えられた暗号テキストを処理し、対応する平文を返す、
129     start()、crypt()そして finish()の全体の流れを、あなたに代わって
130     実行します。
131    
132     =head2 encrypt_hex(), decrypt_hex()
133    
134     $ciphertext = $cipher->encrypt_hex($plaintext)
135     $plaintext = $cipher->decrypt_hex($ciphertext)
136    
137     これらは16進表現の暗号テキストを処理する便利な関数です。
138     B<encrypt_hex($plaintext)>は、B<unpack('H*',encrypt($plaintext))>と
139     まったく同じです。例えば暗号化されたものを入れたい場合には便利でしょう。
140    
141     =head2 get_initialization_vector()
142    
143     $iv = $cipher->get_initialization_vector()
144    
145     この関数は暗号化、復号化で使われるIVを返します。
146     この関数はnew()で何も指定されなければ暗号化のときに使われる、
147     乱数(random)IVを判定するときにも便利です。
148     暗号化のときにはstart()が呼び出されるまで、復号化のときには
149     crypt()が最初に呼ばれるまで、IVは設定されるかは保障されません。
150    
151     =head2 set_initialization_vector()
152    
153     $cipher->set_initialization_vector('76543210')
154    
155     この関数は暗号化そして/あるいは復号化で使用されるIVを設定します。この
156     関数はIVが復号化される暗号テキスト文字列にIVが入っていなければ、
157     あるいは暗号化のために特定のIVにしたいのであれば便利でしょう。
158     もし設定されなければ、乱数のIVが生成されます。
159     暗号化のときにはstart()が呼び出されるまで、復号化のときには
160     crypt()が最初に呼ばれるまで、IVは設定されるかは保障されません。
161    
162     =head2 パディング方法
163    
164     パディング方法を変更するためには'padding'オプションを使ってください。
165    
166     平文の最後のブロックがブロックサイズよりも短いとき、それはパディング
167     されなければなりません。パディング方法には以下のものがあります:
168     "standard"(つまりPKCS#5)、"oneandzeroes"、 "space"、 そして "null"。
169    
170     standard: (デフォルト) バイナリに対しても安全
171     切り落されるべきバイト数で埋められます。そのためブロックサイズが
172     8であれば、"0A0B0C"は"05"で埋められ、結果は"0A0B0C0505050505"に
173     なります。もし最後のブロックがブロック全体で、ブロックサイズが8で
174     あれば、"0808080808080808"というブロックが追加されます。
175    
176     oneandzeroes: バイナリに対しても安全
177     ブロックを一杯にするだけ必要なだけの"00"がついた"80"で
178     埋められます。もし最後のブロックがブロック全体で、
179     ブロックサイズが8であれば、"8000000000000000"というブロックが
180     追加されます。
181    
182     null: テキストのみ
183     ブロックを一杯にするために必要なだけ"00"で埋めます。最後の
184     ブロックがブロック全体で、ブロックサイズが8であれば、
185     "0000000000000000"というブロックが追加されます。
186    
187     space: テキストのみ
188     "null"と同じ。ただし"20"でおこないます。
189    
190     standard と oneandzeroes の2つのパディングはバイナリに対しても安全です。
191     space と null のパディングはテキスト・データにたいしてのみ推奨されます。
192     あなたがどのパディングを使うのかは、(Crypt::CBCライブラリではない)外部と
193     通信したいかどうかによります。もしそうのような場合であれば、互換性のある
194     どんなパディング方法でも使ってください。
195    
196     カスタムのパディング関数を渡すことも出来ます。こうした場合には、
197     以下のような引数をとる関数を作成してください:
198    
199     $padded_block = function($block,$blocksize,$direction);
200    
201     $blockがデータの現在のブロック、$blocksizeがそこまでパディングする
202     大きさ、$directionは"e"が暗号化、"d"が復号化を、そして
203     $padded_blockはパディングあるいはパディングをはずした後の結果です。
204    
205     暗号化のときには、関数は常に長さが<blocksize>である文字列を返し、
206     復号化のときには、やってくる文字列が常にその長さであることを
207     期待することができます。例についてはソースの中の
208     _standard_padding(), _space_padding(),_null_padding(), あるいは
209     _oneandzeroes_padding() をご覧ください。
210    
211     spaceとnullパディングは潜在的に、そうであるよりも多くの文字を切り
212     落してしまうかもしれないため、Standardとoneandzeroesパディングが
213     推奨されます。
214    
215     =head1 使用例
216    
217     2つの例、des.plとidea.plがCrypt-CBCディストリビューションのeg/
218     サブディレクトリにあります。これらはコマンドラインのDESとIDEA
219     暗号アルゴリズムを実装しています。
220    
221     =head1 制約
222    
223     暗号と復号の処理は同等の(Cでコンパイルされた)SSLeayプログラムよりも
224     10分の1ほどの速度です。これをCで実装することによって改善することが
225     できるでしょう。DESとIDEAブロック・アルゴリズムをさらに最適化する
226     ことも価値のあることでしょう。
227    
228     =head1 バグ
229    
230     どうか報告してください。
231    
232     =head1 作者(=AUTHOR)
233    
234     Lincoln Stein, lstein@cshl.org
235    
236     This module is distributed under the ARTISTIC LICENSE using the same
237     terms as Perl itself.
238    
239     =head1 参考資料
240    
241     perl(1), Crypt::DES(3), Crypt::IDEA(3), rfc2898 (PKCS#5)
242    
243     =head1 翻訳者
244    
245     川合孝典(GCD00051@nifty.ne.jp)

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26