- - PR -
OpenSSL がサポートする暗号方式と特許について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-22 13:37
OpenSSL 0.9.8 がリリースされてしばらく経ちますが、デフォルトでは特許の関係からか、RC5 と MDC2 が組み込まれなくなったそうです。
また、日本では IDEA も特許に抵触するという話を聞いたことがあります。 そこで、Redhat ES 3 update 6 の SRPM の spec ファイルを見てみたところ、既に対応がなされているようで、Configure オプションで「no-idea no-mdc2 no-rc5 no-ec」となっていました (少なくとも、Redhat 9 の頃にはこのようなオプションはついていませんでした)。 ここで、2つ質問があるのですが、 1. no-ec の EC とはどういったものなのでしょうか? (そんな名前の暗号化方式もしくはハッシュ関数を聞いたことがありませんが、OpenSSL 0.9.6 には含まれていないところを見ると、OpenSSL 0.9.7 からの新機能のようですね) 2. OpenSSL のソースコード中に、IEDA, MDC2, RC5, EC 以外に日本で使うと問題になりそうな暗号化方式もしくはハッシュ関数は含まれておりますでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: あんとれ 編集日時 2006-01-22 13:37 ] | ||||||||
|
投稿日時: 2006-01-26 17:46
こんにちは。
1. 私の調べた限りではECとは(Elliptic Curve)の略で楕円曲線のことを指していると 思います。もう少し具体的に言いますと、楕円曲線上での演算を実装したものです。 これは楕円曲線暗号アルゴリズム(公開鍵暗号)であるECDSAやECDHなどに利用されています。 openssl-0.9.8aのアーカイブのcryptディレクトリの中にecdsaやecdhがそれらの実装になります。ちなみに楕円関連(ec, ecdsa, ecdh, bnの一部分)はSun MicrosystemsがOpenSSLに提供したものです。 2. 特許という観点でいえばRC4なんかもまずいと思いますよ。 ちなみにEC系(ECDSA, ECDH)は一般公開されているアルゴリズムなので問題ないと思いますよ。 | ||||||||
|
投稿日時: 2006-01-26 20:31
ご回答ありがとうございます。
私もいろいろ調べていたのですが、やはり ECC のことですか・・・。 とは言っても、no-ec をつけずにコンパイルしても、ECDSA とか ECDH は openssl enc や openssl ciphers には出てこないようですが・・・。(make ログにはちゃんとライブラリに取り込まれているようですが)
RC4 については私も疑っていますが、OpenSSL の FAQ には、IDEA, MDC2, RC5 (0.9.7 以前の FAQ には MDC2 が入っていない) が問題である可能性があることくらいしか記述されていませんよね。 | ||||||||
|
投稿日時: 2006-01-26 21:34
encで出てこないのはECDSAがデジタル署名専用であり、ECDHが鍵交換専用のアルゴリズムだからです。 ciphersの引数には何を指定したのでしょうか? なにも指定しない場合、内部的には"DEFAULT"が指定されたことになり、この場合ECDSAやECDHはCipherSuiteリストには含まれません。理由はECC関連のCipherSuiteを定義したRFCがドラフトの段階だからだと思います。標準になっていないものをデフォルトで含ませるのは抵抗があったのだと予想します。 (参考)http://www.ietf.org/internet-drafts/draft-ietf-tls-ecc-12.txt ちなみに # openssl ciphers "ALL" の実行結果にはECDSAやECDHなどを含んだCipherSuiteが見つけられると思います。 [ メッセージ編集済み 編集者: Can 編集日時 2006-01-26 21:37 ] [ メッセージ編集済み 編集者: Can 編集日時 2006-01-26 21:38 ] | ||||||||
|
投稿日時: 2006-01-26 22:13
openssl ciphers のデフォルト値は ALL だと思い込んでいました。^^;; それはともかく、no-ec オプション付きのものとそうでないものを比較してみましたがどちらも同じで、ECDSA や ECDH というものは出て来ませんでした。 $ openssl ciphers -v ALL:COMPLEMENTOFALL ADH-AES256-SHA SSLv3 Kx=DH Au=None Enc=AES(256) Mac=SHA1 DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1 AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 ADH-AES128-SHA SSLv3 Kx=DH Au=None Enc=AES(128) Mac=SHA1 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-RC4-SHA SSLv3 Kx=DH Au=DSS Enc=RC4(128) Mac=SHA1 EXP1024-DHE-DSS-RC4-SHA SSLv3 Kx=DH(1024) Au=DSS Enc=RC4(56) Mac=SHA1 export EXP1024-RC4-SHA SSLv3 Kx=RSA(1024) Au=RSA Enc=RC4(56) Mac=SHA1 export EXP1024-DHE-DSS-DES-CBC-SHA SSLv3 Kx=DH(1024) Au=DSS Enc=DES(56) Mac=SHA1 export EXP1024-DES-CBC-SHA SSLv3 Kx=RSA(1024) Au=RSA Enc=DES(56) Mac=SHA1 export EXP1024-RC2-CBC-MD5 SSLv3 Kx=RSA(1024) Au=RSA Enc=RC2(56) Mac=MD5 export EXP1024-RC4-MD5 SSLv3 Kx=RSA(1024) Au=RSA Enc=RC4(56) Mac=MD5 export EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1 EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1 EXP-EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH(512) Au=RSA Enc=DES(40) Mac=SHA1 export EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1 EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1 EXP-EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH(512) Au=DSS Enc=DES(40) Mac=SHA1 export DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1 DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1 EXP-DES-CBC-SHA SSLv3 Kx=RSA(512) Au=RSA Enc=DES(40) Mac=SHA1 export EXP-RC2-CBC-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1 RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export ADH-DES-CBC3-SHA SSLv3 Kx=DH Au=None Enc=3DES(168) Mac=SHA1 ADH-DES-CBC-SHA SSLv3 Kx=DH Au=None Enc=DES(56) Mac=SHA1 EXP-ADH-DES-CBC-SHA SSLv3 Kx=DH(512) Au=None Enc=DES(40) Mac=SHA1 export ADH-RC4-MD5 SSLv3 Kx=DH Au=None Enc=RC4(128) Mac=MD5 EXP-ADH-RC4-MD5 SSLv3 Kx=DH(512) Au=None Enc=RC4(40) Mac=MD5 export RC4-64-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(64) Mac=MD5 DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5 DES-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=DES(56) Mac=MD5 RC2-CBC-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC2(128) Mac=MD5 EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export RC4-MD5 SSLv2 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5 EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1 NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5 | ||||||||
|
投稿日時: 2006-01-27 12:28
あんとれさん
おはようございます。
大変もうしわけありません、間違っていました。 "ALL"も使用頻度の高いキーワードであるためECDSAおよびECDHは含まないようになっているようです。"TLSv1","SHA","AES"などは出力されるので試してみてください。 ("AES"実行結果) $ openssl ciphers -v "AES" ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1 ECDHE-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1 ECDH-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ECDH-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1 ECDH-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 ECDH-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1 ADH-AES256-SHA SSLv3 Kx=DH Au=None Enc=AES(256) Mac=SHA1 DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1 AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 ADH-AES128-SHA SSLv3 Kx=DH Au=None Enc=AES(128) Mac=SHA1 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 | ||||||||
|
投稿日時: 2006-01-27 17:15
OpenSSL 0.9.8a を使用するとちゃんと出てきました。一方、OpenSSL 0.9.7i では以下のようになりました。0.9.7 系ではソースツリーには含まれてはいて、no-ec オプションをつけなかった場合、コンパイルの対象とはなるものの使えるようにはなっていなかったといったところでしょうか・・・。 $ openssl ciphers -v AES ADH-AES256-SHA SSLv3 Kx=DH Au=None Enc=AES(256) Mac=SHA1 DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1 AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1 ADH-AES128-SHA SSLv3 Kx=DH Au=None Enc=AES(128) Mac=SHA1 DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1 DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1 AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1 | ||||||||
|
投稿日時: 2006-01-27 17:43
ありがとうございます、解決しました。OpenSSL 0.9.8a を no-ec 付きでコンパイルすると opensslconf.h ファイルに以下の内容が追加されることを確認しました。
#ifndef OPENSSL_NO_EC # define OPENSSL_NO_EC #endif #ifndef OPENSSL_NO_ECDH # define OPENSSL_NO_ECDH #endif #ifndef OPENSSL_NO_ECDSA # define OPENSSL_NO_ECDSA #endif OpenSSL 0.9.7i では、crypto/ecdh ディレクトリがなく、opensslconf.h ファイルには #ifndef OPENSSL_NO_EC # define OPENSSL_NO_EC #endif しか追加されないということから、ECDH と ECDSA の共通部分だけが実装されていて、肝心の中身が実装されていなかったということになりますね。そう考えると、OpenSSL 0.9.7i で ECC を有効にしてコンパイルするメリットはほとんどないことになり (中身を実装しない限り使えない)、それが、Redhat Enterprise Linux に付属する OpenSSL (0.9.7a) の RPM パッケージが no-ec 付きでコンパイルされている理由なんでしょうね。 |