[ruby-list:50425] Re: [質問] Blowfishの鍵について
From:
Shotaro Chiba <schiba@...>
Date:
2016-10-12 06:38:23 UTC
List:
ruby-list #50425
松永さん はじめまして。ちばと申します。 class OpenSSL::Cipher (Ruby 2.3.0) https://docs.ruby-lang.org/ja/latest/class/OpenSSL=3a=3aCipher.html | 以下の手順で利用します。 | | • OpenSSL::Cipher.new や OpenSSL::Cipher::AES256.new などで暗号オブジェクトを生成する | • OpenSSL::Cipher#encrypt, OpenSSL::Cipher#decrypt で 暗号、復号のいずれをするかを設定する | • OpenSSL::Cipher#key=, OpenSSL::Cipher#iv=, OpenSSL::Cipher#random_key, OpenSSL::Cipher#random_iv などで 鍵と IV(initialization vector) を設定する | • OpenSSL::Cipher#update, OpenSSL::Cipher#final で 暗号化/復号化をする 上記説明に則って考えるならば以下のようなコードで暗号化・復号化することができそうです。 ``` require 'openssl' cipher = OpenSSL::Cipher::BF.new text = 'BF で暗号化・復号化をしてみたいんだゾ' # 暗号化 cipher.encrypt key = cipher.random_key iv = cipher.random_iv encrypted_text = cipher.update(text) + cipher.final # 復号化 cipher.decrypt cipher.key = key cipher.iv = iv puts cipher.update(encrypted_text) + cipher.final ``` 私がさくっと作成した上記の例では `key` と `iv` はランダムに生成したものを設定していますが、松永さんの手元にあるであろう C 言語で記述されたソースコードではしかるべき `key` と `iv` の値がどこかでそれぞれ設定されているのでは、と個人的には推測しています。 何かの参考になれば幸いです。 — Shotaro Chiba <schiba@scminfo.net> > On 2016/10/12, at 14:30, 松永 肇一 <ma2@lifemedia.co.jp> wrote: > > 松永と申します。 > > cで記述されたBlowfishを使った暗号化関数をrubyで書き直しています。 > このときの鍵の扱いについて質問です。 > > OpenSSL::Cipherのリファレンスを見るとkey=メソッドに『なお、ここでいう「暗号鍵」は各暗号アルゴリズムに渡される鍵であって、 「パスワード」ではありません。』という記述があります。 > > cのソースコードを見るとBF_set_keyを使ってパスフレーズを変換して、BF_KEYという構造体に格納しているようです。 > > key=メソッドが期待するのはパスフレーズではなく、それを変換した後の暗号鍵だと思うのですが、それをrubyで実装する方法が分かりません。参考になるサイト等ご存じの方はいらっしゃいませんでしょうか。 > > > -- > 松永肇一 >