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

CVS リポジトリの参照

Contents 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.2 - (show annotations) (download)
Thu Jan 27 13:14:48 2011 UTC (13 years, 3 months ago) by iwai
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +3 -0 lines
add encoding tag

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

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