Japanese  English
最終更新日: 2008年01月31日

Camellia for Open Source Softwares

はじめに

これはNTTおよび 三菱電機により共同で開発された国産の128bit暗号である Camelliaのさらなる普及の一助となればと思い、作成した。 そのために現在はCamelliaを暗号を使う様々なソフトウェアで 使えるようにするパッチを公開している。

OpenSSH用patch

このpatchはCamelliaに対応したOpenSSL(ヘッダファイルなどを含む)が必要となる。 最新版のOpenSSLではデフォルトでCamelliaを利用可能であるが、 自分が使っているOpenSSLが対応しているか知りたかったら openssl ciphersコマンドにてcamelliaが一覧にあるかを確認すると良い。
なお、4.7p1 version 0.1からはCamelliaに対応していなかった場合はCamellia暗号を 組み込まずにコンパイルするようになっており、利用者が.ssh/configなどで 設定しない限りCamelliaが使われないようになっている。 また、指摘を受けて 4.7p1 version 0.1からはCamelliaのシグニチャをcamellia*@openssh.orgに 変更してあるので注意されたし。
例)
対応していた場合:
% openssl ciphers -v "CAMELLIA"
ADH-CAMELLIA256-SHA     SSLv3 Kx=DH       Au=None Enc=Camellia(256) Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(256) Mac=SHA1
CAMELLIA256-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(256) Mac=SHA1
ADH-CAMELLIA128-SHA     SSLv3 Kx=DH       Au=None Enc=Camellia(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH       Au=DSS  Enc=Camellia(128) Mac=SHA1
CAMELLIA128-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA1

対応していない場合:
% /usr/bin/openssl ciphers -v "CAMELLIA"
(何も表示されない)

動作画面

~/.ssh/configのCiphersの行をコメントにして、Camellia対応のOpenSSH同士で 「ssh -v ホスト名」として接続すると下記のような行が見え、たしかにCamelliaを 使うようになっていることがわかる。ちなみに、使用する暗号のデフォルト優先順位は myproposal.hのKEX_DEFAULT_ENCRYPTマクロで決まっているのでお好みで 変更されたし。
  :
debug1: kex: server->client camellia256-cbc@openssh.org hmac-ripemd160 zlib@openssh.com
debug1: kex: client->server camellia256-cbc@openssh.org hmac-ripemd160 zlib@openssh.com
  :

私家版FreeBSD portsに混ぜて使うためのpatch

個人的に使っているFreeBSDのportで使うためのpatchを公開する。 使い方は、ports/security/opensslを予めインストールした上で、 patch-yng*をports/security/openssh-porable/filesの中に入れてmakeするだけである。 このpatchを使うとデフォルトでより強力なCamellia暗号を優先して使うよう設定される。
例) 
% fetch http://www.is.titech.ac.jp/~yanagis0/text/camellia/patch-yng47p1
% mv patch-yng47p1 /usr/ports/security/openssh-portable/files
% cd /usr/ports/security/openssh-portable
% make install clean

コミュニティへの投稿

このpatchは既にPortable OpenSSHのバグレポートに投稿済である。
https://bugzilla.mindrot.org/show_bug.cgi?id=1340

PEAR(PHP Extension and Application Repository)用Camelliaパッケージ

PHP Extension and Application Repository(PEAR)とは、 PHP用のパッケージである。 PHPでCamellia暗号を使うためにPEARパッケージを作成した。 本実装は全てPHPで書かれているため、本パッケージ以外のソフトウェアを 必要としない。

PEARサイト投稿済みのProposal

下記にて公開している:
Proposal for "Crypt_Camellia"

libmcrypt用patch

libmcryptは 様々な暗号アルゴリズムを実装したライブラリーである。 libmcryptはarcfor, blowfish, AESなどのアルゴリズムが実装されている。 このlibmcryptでCamellia暗号を使うためのpatch。 なお、このpatchはNTTサイトにて配っているLGPL版のソースコードを 含んでいる。

PHP5と組み合わせて使うためのpatch

libmcryptがCamelliaに対応してもPHPが対応しないとCamelliaを使えない。 そこで、PHPをCamelliaに対応させるためのpatch。

OCaml cryptokit用patch

Objective caml (aka. OCaml) 用暗号モジュールである cryptokitでCamelliaを使うためのpatch。 なお、このpatchはNTTが開発したLGPL版のソースコードを含む。

Python Cryptography Toolkit(pycrypto)用patch

Python用暗号モジュールである Python Cryptography Toolkit でCamelliaを使うためのpatch。 このpatchはNTTが開発した改訂BSDライセンス版のソースコードをふくむ。

GNU TLS (gnutls) 用patch

ここで配布してるpatchは 2.1.1で本家に取り込まれた。 現在、テスト用のサーバーでも試しに使えるようになっている。
http://www.gnu.org/software/gnutls/server.html
このpatchはCamelliaに対応したlibgcryptが必要となる。 現在最新の開発版libgcrypt 1.3.0でも、ライセンスの制限上デフォルトでは インストールされないので、--enable-ciphersオプションで有効にする必要がある。 対応している場合にはlibgcrypt-config --algorithmsを実行した際に camelliaが一覧にでる。
例)
% libgcrypt-config --algorithms
Symmetric cipher algorithms: arcfour blowfish cast5 des aes twofish serpent rfc2268 seed camellia
Public-key cipher algorithms: dsa elgamal rsa ecc
Message digest algorithms: crc md4 md5 rmd160 sha1 sha256 sha512 tiger whirlpool

Copyright

gnutls用patchのCopyrightは2007年8月17日付で Free Software Foundationに委譲している。

GnuPG用patch 及び libgcrypt用patch のdownload (obsolete)

OpenPGPのoptionalな規格としてCamelliaが入ったのを機に 本家が独自で作ってしまったので以下のパッチのアップデート予定はない。
このパッチはCamelliaのページより入手できる『NTT作成のオープンソース』 を含んでいる。利用にあたってはこちらの注意事項を参照されたし。
http://info.isl.ntt.co.jp/camellia/source.html

patchの使い方

patchはpatch(1)コマンドを利用して行い、次のようにして 当てることができる。
% wget http://www.ring.gr.jp/pub/net/gnupg/gnupg/gnupg-1.4.5.tar.bz2
% bunzip2 -c gnupg-1.4.5.tar.bz2 | tar xf -
% wget http://www.is.titech.ac.jp/~yanagis0/text/camellia/gnupg-1.4.5.patch
% patch -p0 < gnupg-1.4.5.patch
そして、configure、makeでコンパイルするとCamelliaをGnuPGで利用できる ようになる。
% cd gnupg-1.4.5
% ./configure
% make && make install
なお、CamelliaはGnuPGより暗号のプロトコルを示す番号の割り当てを 受けていないので試験的に実装したアルゴリズムに使う100番以降の番号を 使っている。そのため、Camelliaで暗号化、復号化をするときに 『gpg: WARNING: using experimental cipher algorithm CAMELLIA』という 警告が出るが、気にしないで使いたし。GnuPGの開発者に顔がきく方が もしこのパッチに目を止めたなら是非紹介して欲しい。
% rehash
% gpg --cipher-algo CAMELLIA -c TEST
gpg: 警告: 剣呑なメモリーを使用しています!
gpg: 詳細はhttp://www.gnupg.org/faq.htmlをご覧ください
gpg: WARNING: using experimental cipher algorithm CAMELLIA

利用上の注意

ベンチマーク

参考までにlibgcrypt-1.2.4に付属するベンチマークで測定した結果を示す。 ベンチマークは1000バイトのバッファを1000回暗号化するのにかかった時間(前)、 復号するのにかかった時間(後)を計測し、表示している。 実験環境は次の通りであり、libgcryptのコンパイルは-O9で行った。

FreeBSD 7-CURRENT/i386の結果

            ECB               CBC               CFB               CTR             
            ---------------   ---------------   ---------------   --------------- 
AES         234375ms 312500ms 390625ms 390625ms 312500ms 390625ms 703125ms 703125ms
CAMELLIA128 234375ms 312500ms 390625ms 312500ms 390625ms 312500ms 703125ms 703125ms
AES192      312500ms 390625ms 468750ms 390625ms 390625ms 390625ms 781250ms 703125ms
CAMELLIA192 390625ms 390625ms 390625ms 468750ms 390625ms 390625ms 781250ms 781250ms
AES256      390625ms 468750ms 390625ms 546875ms 390625ms 468750ms 781250ms 781250ms
CAMELLIA256 390625ms 390625ms 390625ms 468750ms 390625ms 390625ms 781250ms 781250ms

FreeBSD 6.2R/amd64の結果

            ECB               CBC               CFB               CTR             
            ---------------   ---------------   ---------------   --------------- 
AES         234375ms 234375ms 234375ms 312500ms 234375ms 312500ms 859375ms 859375ms
CAMELLIA128 156250ms 156250ms 234375ms 156250ms 234375ms 156250ms 859375ms 859375ms
AES192      234375ms 312500ms 234375ms 390625ms 234375ms 312500ms 937500ms 859375ms
CAMELLIA192 156250ms 156250ms 234375ms 234375ms 234375ms 234375ms 859375ms 859375ms
AES256      234375ms 390625ms 234375ms 390625ms 312500ms 312500ms 937500ms 1015625ms
CAMELLIA256 156250ms 234375ms 156250ms 234375ms 234375ms 234375ms 859375ms 937500ms
測定すると若干ばらつくものの1回分の結果しか上記では出していない。 ここの結果だけを見ると、i386では速度に大した違いは無く、 amd64では若干camelliaが高速と言えるだろうか。 これについてはそのうち統計的な考察を行いたい。 なお、camelliaの実装は64bitでも32bitでも同じC言語のプログラムなので、 すこし不思議な感じがする。

更新履歴


Copyright © 柳澤 佳里  
ご意見、ご要望は上記メールアドレスへ。