暗号化モジュール
そもそも暗号化に詳しくないので調べるところから。
http://x68000.q-e-d.net/~68user/net/crypt-1.htmlが入門にはわかりやすかった。
超ばっくり基礎知識
- 共通鍵方式
- 暗号化/復号化に同じ鍵を使う
- 通信に使う際は、鍵を共有する方法が問題になる
- アルゴリズム例: DES/DES3/AESなど
- 公開鍵方式
- 暗号化に使う鍵は公開し(=公開鍵)、復号化に使う鍵は秘匿する(=秘密鍵)
- 送信側は公開鍵で暗号化した文字を送り、受信側は秘密鍵で復号化する
- アルゴリズム例: RSA
共通鍵のいろいろ
ストリーム暗号(Stream cipher)とブロック暗号(Block cipher)に分類でき、さらにいろいろあるらしい。かろうじて理解できたとこだけメモ(汗)。
- ストリーム暗号
- 平文をバイトずつ逐一処理
- RC4が代表的?
- ブロック暗号
- 平文をブロックに区切って、ブロック単位で暗号化
- ECBモード(Electronic codebook): シンプル、平文と暗号文が同じ長さ、セキュリティに難
- CBCモード(Cipher-block chaining): 仕組みは複雑、でも安全
- http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
perlでやるにはどうする?
Crypt::***が暗号関係のモジュール群。
ストリーム暗号はよくわからんので、ブロック暗号に限定(涙)。
- どのモードを使うか?
- どの暗号化アルゴリズムを使うか
を決めればOK。
- Crypt::ECB
- Crypt::DES, Crypt::DES_EDE3, Crypt::IDEA, Crypt::Blowfishなどいろんなアルゴリズム使える
- キーサイズはアルゴリズムに合わせて決める必要ある
- パディング(ブロック単位に満たない場合の穴埋め)は自分でやらなくてもPADDING_AUTOがある
- Crypt::CBC
- 同じくいろいろなアルゴリズム使える
- キーサイズもパディングもデフォルトでよしなにやってくれるぽい
テストコード(CBC)
#!/usr/bin/perl use strict; use Crypt::CBC; use Crypt::DES_EDE3; my $cipher = Crypt::CBC->new( -key => 'abcdef', -cipher => 'DES_EDE3', ); my $ciphertxt = $cipher->encrypt('This is Test'); my $plaintxt = $cipher->decrypt($ciphertxt); print $ciphertxt,"\n"; print $plaintxt,"\n";
Salted__?慇;Pp?FB郤杏鋺?+N
This is Test
こんな出力になった。とりあえずはこんなところで。
必要に迫られたらもう少し詳しく調べよう。