|
●Trfcryptとは?
Trfcryptは、各種の暗号化・復号化ルーチンをTclコマンドとしてTcl処理系に追加する拡張ライブラリです。
先に出てきたTrfと同じ方が開発されたものですが、
軍事転用可能なソフトウェア技術ということで、
一部のルーチンが米国輸出規制に引っかかる(*1)ために、
Trfのほかのルーチンとは別配布になったという経緯があります。
Trfcryptがサポートする暗号化ルーチンは次の通りです。
- DES *
- IDEA (International Data Encryption Algorithm) (*2)
- Blowfish
- RC2 *
- RC4
- ROT (いわゆるシーザー暗号)
- SAFER (Secure And Fast Encryption Routine)
DESとRC2については、
Eric Youngさんが開発されているSSLeayというSSL暗号化ルーチンライブラリが別途必要になります。
詳しくは配布ドキュメントを当ってください。
他の5つのルーチンは特に外部ライブラリは不要です。
ここでは、Trf 2.0p5とTrfcrypt 2.0p2(2000/06/26公開)を、
Linux 2.2.14 (RedHat Linux 6.2J)上のTcl/Tk 8.4a1でインストールして使ったときの経緯を中心にまとめています。
(*1) Trfcryptを米国や一部の欧州の国以外、
特に日本で使うことには制限はないようですが、
詳しくはSSLやPGPなど暗号化技術に関するソフトウェアのページをご覧ください。
私も勉強しないと、ですね。
(*2) 私個人的にこの「IDEA」という名前大好きです。
アイデアではなくやっぱりイデアと呼んでほしかったり。(閑話休題)
ちなみにPGP(Pretty Good Privacy)で使われるアルゴリズムがこれだそうです。
●インストールしよう!
Trfはこちら、
Trfcryptはこちらが総本山になっていて、
それぞれソース配布やバイナリ配布が入手できます。
Trfcryptをビルドするには、
Trfを先にスタブ対応でコンパイルしてインストールしていないといけませんが、
どうもconfigureがうまくスタブ対応のフラグをつけてくれないので、
configureをテキストエディタで書き換えて強引に通す必要がありました。
TrfもTrfcryptも基本は「sh configure; make; make install」
でよいのですが、configureが一部混乱しているようで、
マイLinuxではリンカーがエラーを起こすなどちょっともめました。
Makefileが直書きできる方でないとインストールはちょっと難しいかもしれません。
Windows用にはバイナリアーカイブも配布されていますが、
どうもうまく動きません。
バイナリ配布はTcl/Tk 8.2で作られているようですが、
スタブ対応版を使ってもTcl/Tk 8.3以降では使うと異常終了します。
Windows版のソースからのビルドをいずれ試す予定です。
Trfをデフォルトのパスでインストールすると、
/usr/local/lib/Trf2.0 というディレクトリが作られ、
次のファイルが置かれているはずです。
- pkgIndex.tcl
- libtrf.so
- libmd5crypt.so
- libtrfstub.a
「libtrfstub.a」が作られていない場合は、スタブ対応でコンパイルされていません。
configureかMakefileを強引に書き換えて何とかスタブつきにする必要があります。
Trfcryptをデフォルトのパスでインストールすると、
/usr/local/lib/Trfcrypt2.0 というディレクトリが作られ、
次のファイルが置かれているはずです。
- pkgIndex.tcl
- libtrfcrypt.so
●ロードしてみよう
Tclスクリプトからロードするときには、
まずTrfをロードし、次にTrfcryptをロードする必要があります。
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
info commands
「info commands」が返すコマンドの中に「des」や「idea」
が含まれていればまずはOKです。
●使い方
ここでは私がいまだかつて避け得ない諸般の事情により
(まだSSLeayを持ってないとはっきり言えや)、DESとRC2はおいときまして、
IDEA、Blowfish、SAFER、RC4、ROTの各アルゴリズムの圧縮・復号コマンドの使い方を紹介します。
コマンドの名前は、
- safer
- idea
- rot
- blowfish
- rc4
です。あ、これではどのコマンドがどのアルゴリズムなのか分かりませんね。
線でつないでみようー。
| アルゴリズム | | コマンドの名前 |
| RC4・ | | ・blowfish |
| SAFER・ | | ・idea |
| IDEA・ | | ・rc4 |
| ROT・ | | ・safer |
| BLOWFISH・ | | ・rot |
|
あ、あたま悪すぎる(浦)
黙らっしゃい!!(池)
あー関係ないネタはこのくらいにして、さっそく使ってみます。
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "Hello, Trf World."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking IDEA -mode ecb *******"
set a1 [idea -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode cbc *******"
set a1 [idea -dir encrypt -mode cbc -key $key -iv $iv $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode cbc -key $key -iv $iv $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode cfb *******"
set a1 [idea -dir encrypt -mode cfb -key $key -iv $iv -shift 1 $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode cfb -key $key -iv $iv -shift 1 $a1]
puts "------ decode ------"
puts $a2
puts "****** checking IDEA -mode ofb *******"
set a1 [idea -dir encrypt -mode ofb -key $key -iv $iv -shift 1 $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [idea -dir decrypt -mode ofb -key $key -iv $iv -shift 1 $a1]
puts "------ decode ------"
puts $a2
|
IDEAのコマンド名は「idea」で、暗号化するときは「-direction encrypt」
復号化するときは「-direction decrypt」と指定します
(-directionは-dirと省略できます)。
入力文字列は最後の引数として指定しますが、
その長さ(バイト数)は必ず8の倍数でなければならない点に注意してください。
-key オプションの引数は暗号化・復号化キーで、
IDEAの場合は16バイト必要です
(16バイトに満たないとエラーになりますが、
それ以上あっても余るぶんにはエラーになりません)。
残る-mode、-iv、-shiftですが、まずお題目として読み上げますね。
それぞれブロック暗号化の際のブロック方法を表すモード、
初期化ファクターを表す8バイトの文字列、
フィードバックレジスタのシフトバイト数を指定します。
ですが、ありていにいって、私には何が何だかさっぱりわかりません。
暗号化に詳しい方はいいとして、そうでなければ、
- -modeにはecb、cbc、cfb、ofbの4種類がある
- -modeがecb以外のとき、-ivオプションで8バイトの文字列を指定する必要がある
- -modeがcfbまたはofbの場合、-shiftオプションでシフトバイト数を適当に
(1とか)を指定する必要がある
とだけ覚えておきましょう(しょうがないんだもん)
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "Hello, This is Blowfish."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking BLOWFISH -mode ecb *******"
set a1 [blowfish -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [blowfish -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
# 他のモードは略ということで
|
Blowfishのコマンド名は「blowfish」です。
使い方はIDEAとほとんど同じです。
キーの長さを1〜56バイトの間で自由に指定できる点だけでしょうか。
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "safer key."
set s "aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff"
set iv "\x00\x00\x00\x00\x00\x00\x00\x01"
puts "****** checking SAFER -mode ecb *******"
set a1 [safer -dir encrypt -mode ecb -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [safer -dir decrypt -mode ecb -key $key $a1]
puts "------ decode ------"
puts $a2
|
SAFER (Secure And Fast Encryption Routine) のコマンド名は「safer」
です。SAFERも、使い方は IDEA、Blowfishとほとんど同じです。
キーの長さは8〜16バイトで自由に指定できます。
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set key "rc4rc4"
set s "example input text of encryption algorithm 'RC4'."
puts "****** checking RC4 *******"
set a1 [rc4 -dir encrypt -key $key $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [rc4 -dir decrypt -key $key $a1]
puts "------ decode ------"
puts $a2
|
RC4のコマンド名は「rc4」です。RC4の場合は、-mode、-iv、-shift
はありません。指定するのは暗号化・復号化の別、暗号化キー、入力文字列だけです。
入力文字列の長さにも、8の倍数といった制限はありません。
キーの長さも1〜256バイトの間で好きな文字列が指定できます。
load /usr/local/lib/Trf2.0/libtrf.so
load /usr/local/lib/Trfcrypt2.0/libtrfcrypt.so
set s "example input text for encryption algorithm 'ROT'."
puts "****** checking ROT *******"
puts [hex -mode e $s]
set a1 [rot -dir encrypt -key "U" $s]
puts "------ encode ------"
puts [hex -mode e $a1]
set a2 [rot -dir decrypt -key "U" $a1]
puts "------ decode ------"
puts [hex -mode e $a2]
puts "$a2 "
|
シーザー暗号の名前で知られる古典的な暗号化アルゴリズムであるROTのコマンド名は
「rot」です。
これもRC4と同様、指定が必要なのは
暗号化復号化の別、キー、入力文字列だけです。
キーは1文字で、入力文字列には文字列長などの制約はありません。
最後になって今更ですが、どの暗号化アルゴリズムが優れている、
あるいは速い、等の比較については、
私は全く門の外の漢(をとこ)でありまして、正直なんともいえません。
Trfcryptも、半分はルーチンのコレクション、という趣も感じられるわけで、
暗号化技術そのものの専門家でない限り、
「こんな場合にはこのアルゴリズムを使おう!」
という判断はできない、というか不要なのでは、とも思います。
私?IDEAという名前が好きなので、IDEAを使います (こらー!)
(first uploaded 2000/09/17 last updated (not ever), MISUMI URANO - KENICHI USHIRODANI)
|