web-dev-qa-db-ja.com

OpenSSLにAES-256-GCMが含まれていないのはなぜですか?

RubyでAES-256-GCMを実装しようとしています。

RubyのOpenSSLラッパーライブラリとaeadライブラリはどちらも、OpenSSL自体がこれをサポートしていると信じているようです。

しかし、0.9.8r(私がインストールしたもの)も1.0.1c(macportsにアップデートしたものも)にはないようです。 1.0.1cにはAES256-GCM-SHA384がありますが、Ruby OpenSSLとaeadは、それをどのように作成するかを認識していません。

助言がありますか?

xpost: https://stackoverflow.com/questions/14698473/why-does-openssl-not-include-aes-256-gcm

ETA:この問題は、OpenSSL 0.9.8に対してRVMがビルドされていることが原因であることが判明しています。 (FWIW、これはUbuntu 10.04に当てはまるようですが、12.04で修正されました。)

テストは簡単です:

require 'openssl'
cipher = OpenSSL::Cipher.new('aes-256-gcm')

# Bad response:   RuntimeError: unsupported cipher algorithm (aes-256-gcm)
# Good response:    #<OpenSSL::Cipher:0x007fc0754764a8>

これはrvmを使用した半簡単な修正ですが、完全に再コンパイルするには時間がかかります。

Sudo apt-get install aclocal autoconf automake auroreconf Apple-gcc42 libtool pkg-config openssl readline libyaml sqlite libxml2 libxslt libksba  
# some but not all are available on macports; seems to work okay without the missing ones
rvm get head
rvm pkg install openssl
rvm reinstall 1.9.3-p194

修正を示唆してくれたStephen Tousetに感謝します。

3
Sai

Ruby AEADライブラリの作成者として、OpenSSL doesが1.0.1cでGCMをサポートしていることを確認できます。

~ $ /usr/local/bin/openssl version
OpenSSL 1.0.1c 10 May 2012
~ $ /usr/local/bin/openssl enc -help 2>&1 | grep gcm 
-aes-128-gcm
-aes-192-gcm
-aes-256-gcm

お使いのプラットフォームで利用できない場合(OpenSSLは1.0.1でGCMサポートを追加したと思います)、CBC-HMACとCTR-HMACも実装しました。

OpenSSLの新しいバージョンをインストールしている場合は、使用しているRubyバイナリがそのバージョンに対してリンクされていることを確認する必要があります。リンクされていない可能性があります。これの詳細はrbenv-およびRVM固有。

これらの理由もあって、OpenSSLの代わりにDJBの NaCl にバンドルしてリンクする代替ライブラリを書いています。

18
Stephen Touset

OpenSSLはGCMをサポートしています。たとえば この答え を参照してください。 GCMはSHA-384とは何の関係もないので、SSL/TLSセッションのコンテキストでのAES-256/GCMのサポートについて実際に質問していると思います。これはTLS 1.2でのみサポートされているため、そのバージョンをサポートするにはクライアントとサーバーが必要です。

3
Tom Leek