- - PR -
OpenSSL の 3DES についての理解を深めたいです
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-11-20 10:40
OpenSSLでの3DESを勉強しているのですが、以下コマンドが理解できないのでご教授ください。
※そもそも暗号化処理自体あまり理解しておりませんorz $ echo hoge | openssl enc -des3 -base64 -k 'yyyy' U2FsdGVkX19vTigKtKhZM9VVTAHQv0fP 3DESといえば鍵を3つ(もしくは2つ)使わなければいけないと考えているのですが、上記コマンドでは特に鍵を複数指定しているとは思えません。 (パスワードのyyyyのみ) なぜ鍵を複数指定せずともdes3で暗号化された文字が出力されるのでしょうか? また、鍵を複数(2つもしくは3つ)指定して暗号化するにはどのような方法があるのでしょうか? 上記どちらかでもよいので、ご存知の方のご回答を聞きたいです。 また参考になるURL等ご提示頂けるとありがたいです。 |
|
投稿日時: 2007-11-20 11:13
opensslのソースコード読んでみたらどうでしょうか?
私は呼んでいませんが、パスワードから何らかの法則で 別の鍵を作っているのかなと予想していますが。 |
|
投稿日時: 2007-11-20 11:35
がちょんさん
コメント真にありがとうございます。 > 私は呼んでいませんが、パスワードから何らかの法則で > 別の鍵を作っているのかなと予想していますが。 自分もそう思います。 今お客さんの構築しているサイトで、3DESを使う事になって 「暗号方式は3DESにしよう。鍵2つか3つ必要なんだろ?じゃぁ鍵2つで暗号化してみろ」 という話になっています。なので パスワードだけでもちゃんと(鍵複数使わなくてもパスワードだけで)3DESの暗号化ができている という事が証明できればまったく問題ないのですが、これを証明できるURLなどが見つからんのですよ。 ソースコードは・・・時間的になるべく追いたくないのが本音ですorz まぁそんな事いってる場合じゃないだろ! といわれればそれまでですが。。。 もう1つ加えると、今まで記載しなかったですが暗号化、複合化をRubyでやろうと思ってます。 http://www.ruby-lang.org/ja/man/?cmd=view;name=OpenSSL%3A%3ACipher%3A%3ACipher とかでも3DESのソースがのっているのですが、ここでもOpenSSLのコマンドと同様 require 'openssl' include OpenSSL::Cipher # Triple DES c1 = Cipher.new("DES-EDE3-CBC") c2 = DES.new(:EDE3, "CBC") pass = "open sesame!" data = "Hello world!" c1.pkcs5_keyivgen(pass) s1 = c1.encrypt.update(data) + c1.final c2.pkcs5_keyivgen(pass) s2 = c2.decrypt.update(s1) + c2.final p(data == s2) #=> true のように、パスワードを指定して暗号化、複合化をしているのみです(鍵を使っていない)。 やはりOpenSSLのコードを眺めるしかないかなぁ。 [ メッセージ編集済み 編集者: MATSU 編集日時 2007-11-20 11:38 ] |
|
投稿日時: 2007-11-20 11:38
opensslでは、-kオプション(小文字のk)を指定すると、パスワードから鍵と
イニシャルベクターを生成してくれます。 -pオプションを指定すると、実際に何が生成されたかを見ることができます。 トリプルDESならば、8バイトの鍵が3個(つまり24バイト)の鍵および8バイトの イニシャルベクターが生成されているのが見られるはずです。 直接鍵を指定したいときは、-Kオプション(大文字のK)と-ivオプションを指定 します。16進で指定します。-ivはイニシャルベクターです。 パスワードから鍵を生成するやり方は man EVP_BytesToKey で見ることができます。 |
|
投稿日時: 2007-11-20 11:41
blunderさん
ありがとうございます! 早速鍵がOpenSSLやRuby指定できるか試してみたいと思います! |
1