- PR -

OpenSSL の 3DES についての理解を深めたいです

1
投稿者投稿内容
MATSU
会議室デビュー日: 2007/11/20
投稿数: 8
投稿日時: 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等ご提示頂けるとありがたいです。
がちょん
会議室デビュー日: 2006/07/17
投稿数: 13
投稿日時: 2007-11-20 11:13
opensslのソースコード読んでみたらどうでしょうか?

私は呼んでいませんが、パスワードから何らかの法則で
別の鍵を作っているのかなと予想していますが。

MATSU
会議室デビュー日: 2007/11/20
投稿数: 8
投稿日時: 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 ]
blunder
ベテラン
会議室デビュー日: 2003/09/11
投稿数: 65
投稿日時: 2007-11-20 11:38
opensslでは、-kオプション(小文字のk)を指定すると、パスワードから鍵と
イニシャルベクターを生成してくれます。

-pオプションを指定すると、実際に何が生成されたかを見ることができます。
トリプルDESならば、8バイトの鍵が3個(つまり24バイト)の鍵および8バイトの
イニシャルベクターが生成されているのが見られるはずです。

直接鍵を指定したいときは、-Kオプション(大文字のK)と-ivオプションを指定
します。16進で指定します。-ivはイニシャルベクターです。

パスワードから鍵を生成するやり方は
man EVP_BytesToKey
で見ることができます。
MATSU
会議室デビュー日: 2007/11/20
投稿数: 8
投稿日時: 2007-11-20 11:41
blunderさん

ありがとうございます!
早速鍵がOpenSSLやRuby指定できるか試してみたいと思います!
1

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