2011年9月3日土曜日

Linux の /proc/crypto

/proc/crypto を見ると、Linuxカーネルがどのような暗号化アルゴリズム(cryptographic cipher)を使用しているかがわかる、という話


/proc/crypto の例

CentOS-6.0 で /proc/crypto を見てみた。

# cat /proc/crypto
name         : xts(aes)
driver       : xts(aes-asm)
module       : kernel
priority     : 200
refcnt       : 1
selftest     : passed
type         : givcipher
async        : no
blocksize    : 16
min keysize  : 32
max keysize  : 64
ivsize       : 16
geniv        : eseqiv
(略)

name だけ grep してみた。

# grep '^name' /proc/crypto
name         : xts(aes)
name         : xts(aes)
name         : sha256
name         : sha224
name         : cbc(aes)
name         : cbc(aes)
name         : aes
name         : aes
name         : stdrng
name         : crc32c
name         : sha1
name         : md5

暗号化モジュールをロードしてみる

カーネルが使用できる暗号を追加したい場合は、該当するモジュールをロードしてやればいい(modprobe 等のコマンドを使う)。

例:blowfish暗号を追加

# modprobe blowfish

lsmod, modinfoで、ロードされたモジュールを確認。

# lsmod |grep blowfish
blowfish                7850  0 

# modinfo blowfish
filename:       /lib/modules/2.6.32-71.29.1.el6.x86_64/kernel/crypto/blowfish.ko
description:    Blowfish Cipher Algorithm
license:        GPL
srcversion:     3D0BFB5C93D66CBA1C92FA2
depends:        
vermagic:       2.6.32-71.29.1.el6.x86_64 SMP mod_unload modversions 

/proc/crypto も確認。

cat /proc/crypto
name         : blowfish
driver       : blowfish-generic
module       : blowfish
priority     : 0
refcnt       : 1
selftest     : passed
type         : cipher
blocksize    : 8
min keysize  : 4
max keysize  : 56
(略)

dm-crypt での例

dm-crypt は、ディスク暗号化のための仕組み(a device-mapper crypto target)。dm-crypt を使用すると、/proc/crypto の内容が変化する。つまり、 dm-crypt が Linuxカーネルの暗号化モジュールを利用している、ということが分かる。

テキトーにdm-cryptを使って暗号化してみる

/dev/sdc1 を blowfish の CTRモード で暗号化して mapping01 にマップ。

# cryptsetup create -y -c blowfish-ctr-plain mapping01 /dev/sdc1

/proc/crypto を見てみる。

# cat /proc/crypto
name         : ctr(blowfish)
driver       : ctr(blowfish-generic)
module       : kernel
priority     : 0
refcnt       : 2
selftest     : passed
type         : givcipher
async        : yes
blocksize    : 1
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : chainiv

name         : ctr(blowfish)
driver       : ctr(blowfish-generic)
module       : ctr
priority     : 0
refcnt       : 2
selftest     : passed
type         : blkcipher
blocksize    : 1
min keysize  : 4
max keysize  : 56
ivsize       : 8
geniv        : chainiv

name         : blowfish
driver       : blowfish-generic
module       : blowfish
priority     : 0
refcnt       : 2
selftest     : passed
type         : cipher
blocksize    : 8
min keysize  : 4
max keysize  : 56
(略)

…というように、CTR とか blowfish のモジュールがロードされたのが分かる。

なお、 dm-crypt に関しては、なるべくデフォルトの暗号化アルゴリズムとモードを使ったほうがよいようだ。というのは、2011-06-28頃のメーリングリストでそのように主張されていたから(AES + CBCモード + ESSIV を使いましょう、とのこと)。


0 件のコメント:

コメントを投稿