- PR -

OpenSSL がサポートする暗号方式と特許について

投稿者投稿内容
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 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 ]
Can
会議室デビュー日: 2006/01/26
投稿数: 3
投稿日時: 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)は一般公開されているアルゴリズムなので問題ないと思いますよ。

あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-01-26 20:31
ご回答ありがとうございます。

引用:

これは楕円曲線暗号アルゴリズム(公開鍵暗号)であるECDSAやECDHなどに利用されています。



私もいろいろ調べていたのですが、やはり ECC のことですか・・・。
とは言っても、no-ec をつけずにコンパイルしても、ECDSA とか ECDH は openssl enc や openssl ciphers には出てこないようですが・・・。(make ログにはちゃんとライブラリに取り込まれているようですが)

引用:

特許という観点でいえばRC4なんかもまずいと思いますよ。



RC4 については私も疑っていますが、OpenSSL の FAQ には、IDEA, MDC2, RC5 (0.9.7 以前の FAQ には MDC2 が入っていない) が問題である可能性があることくらいしか記述されていませんよね。
Can
会議室デビュー日: 2006/01/26
投稿数: 3
投稿日時: 2006-01-26 21:34
引用:

私もいろいろ調べていたのですが、やはり ECC のことですか・・・。
とは言っても、no-ec をつけずにコンパイルしても、ECDSA とか ECDH は openssl enc や openssl ciphers には出てこないようですが・・・。(make ログにはちゃんとライブラリに取り込まれているようですが)


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 ]
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-01-26 22:13
引用:

なにも指定しない場合、内部的には"DEFAULT"が指定されたことになり、この場合ECDSAやECDHはCipherSuiteリストには含まれません。



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
Can
会議室デビュー日: 2006/01/26
投稿数: 3
投稿日時: 2006-01-27 12:28
あんとれさん
おはようございます。

引用:

それはともかく、no-ec オプション付きのものとそうでないものを比較してみましたがどちらも同じで、ECDSA や ECDH というものは出て来ませんでした。
$ openssl ciphers -v ALL:COMPLEMENTOFALL


大変もうしわけありません、間違っていました。
"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


あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2006-01-27 17:15
引用:

大変もうしわけありません、間違っていました。
"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



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
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 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 付きでコンパイルされている理由なんでしょうね。

スキルアップ/キャリアアップ(JOB@IT)