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