暗号化モジュール

そもそも暗号化に詳しくないので調べるところから。
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::***が暗号関係のモジュール群。
ストリーム暗号はよくわからんので、ブロック暗号に限定(涙)。

  1. どのモードを使うか?
  2. どの暗号化アルゴリズムを使うか

を決めれば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

こんな出力になった。とりあえずはこんなところで。
必要に迫られたらもう少し詳しく調べよう。