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
コミュニティへの投稿
PEAR(PHP Extension and Application Repository)用Camelliaパッケージ
PEARサイト投稿済みのProposal
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
GNU TLS (gnutls) 用patch
この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が入ったのを機に
本家が独自で作ってしまった ので以下のパッチのアップデート予定はない。
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
利用上の注意
GnuPGでCamelliaを使うにはこのパッチがあたったGnuPGが必要である。
他の人との暗号化したファイルの共有などにCamelliaを使いたい場合は
暗号化したファイルを渡す相手もこのパッチがあたったGnuPGを持っていなくては
ならない。
上記のパッチはNTTが作成したCamelliaのソースコードを用いている。
このソースコードは1.1.0以降にはエンディアンやビット数の制限がない。
実際、
NTTのソースコード配布ページ
によると、これと同じCamellia暗号エンジンを積んだOpenSSL用のpatchが
32bitのx86版Windows XPと64bitのSPARC版Solarisの両方で動作することが
確認されている。
このパッチは
http://info.isl.ntt.co.jp/camellia/source.html
の『重要告知』にある制限を受ける。
このパッチは無保証である。
ベンチマーク
参考までにlibgcrypt-1.2.4に付属するベンチマークで測定した結果を示す。
ベンチマークは1000バイトのバッファを1000回暗号化するのにかかった時間(前)、
復号するのにかかった時間(後)を計測し、表示している。
実験環境は次の通りであり、libgcryptのコンパイルは-O9で行った。
CPU: AMD Athlon(tm) 64 Processor 3500+ (2211.34-MHz K8-class CPU)
OS: FreeBSD 7-CURRENT(20070615)(i386), 6.2-Release(amd64)
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言語のプログラムなので、
すこし不思議な感じがする。
更新履歴
2005-10-06: GnuPG Camellia対応patch作成 (契約未締結につき非公開)
2006-04-14: このページを作成 (GnuPG 1.4.3対応patchを配布)
2006-07-01: GnuPG 1.4.4対応版patchを配布
2006-08-02: GnuPG 1.4.5対応版patchを配布
2006-09-09: 32bit OSについての記述を訂正,
libgcrypt 1.2.3用のpatchを配布開始
2006-09-10: libgcrypt 1.2.3用のpatchをselftestするよう修正
2007-02-10: libgcrypt 1.2.4用のpatchを配布開始
2007-06-16: ベンチマークの比較を掲載
2007-06-24: OpenSSH 4.6p1用patchを配布開始
2007-06-28: OpenSSH 4.6p1用patchをバージョンアップ。タイトルを訂正
2007-06-29: OpenSSH 4.6p1用patchをバージョンアップ
2007-07-10: GNU TLS 1.7.15用patchを配布開始
2007-07-15: OpenSSHのpatchについてのBugzillaへのリンクを作成
2007-09-08: GNU TLS 2.0.0用patchを配布開始 (configureの所を改良),
OpenSSH 4.7p1用patchを配布開始
2007-09-27: GNU TLS 2.0.1, 2.1.0用patchを配布開始
2008-01-31: OpenSSH 4.7p1用patchをBugzillaに送ったものに更新
2008-08-13: OCaml cryptokit 1.3用patchを公開
2008-08-14: Python Cryptography Toolkit 2.0.1用patchを公開
2008-08-23: libmcrypt 2.6.8用patchを公開
2008-09-07: PEAR用パッケージを公開
Copyright © 柳澤 佳里
ご意見、ご要望は上記メールアドレスへ。