RUBY による トリプルDES
移転しました。
仕事で暗号化にトリプルDESを使うことになったので、引用だが記載しておく。
引用元
http://www.ruby-lang.org/ja/man/?cmd=view;name=OpenSSL%3A%3ACipher%3A%3ACipher
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
暗号化の説明
以下より引用。
http://blog.mag2.com/m/log/0000063498/108539780.html?page=2
11.11.2.1.4.3. EDE 以前(バックナンバーNo.308)でも書きましたが、アプリケーションでDES 暗号化を利用する場合、単にDESを使う、と指定するだけではありません。 ブロック暗号方式も同時に指定する必要があります。 OpenSSLでは以下のパラメータがあります。 des, des-cbc, des-cfb, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ede3, des-ede3-cbc, des-ede3-cfb, des-ede3-ofb, des-ofb des: des-cbcと同じ。 des-cbc: DESでブロック暗号にCBCを使う。 des-cfb: DESでブロック暗号にCFBを使う。 des-ecb: DESでブロック暗号にECBを使う。 des-ede: DESでEDE (Encryption-Decryption-Encryption; 暗号、復号、暗号 を繰り返す)を行う。これはある平文について、鍵2つ(鍵Aと鍵B) を使い、鍵Aで暗号化→鍵Bで復号化→鍵Aで暗号化を行う。56ビット キーを3つ使い、計168ビット鍵での暗号化となる3DESを鍵2つで行 える。 暗号強度的には鍵3つの場合ほどではないが、それほど変わらない。 des-ede-cbc: DES-EDEをCBCブロック暗号で行う。des-edeと同じ。 des-ede-cfb: DES-EDEをCFBブロック暗号で行う。 des-ede-ofb: DES-EDEをOFBブロック暗号で行う。 des-ede3: des-ede3-cbcと同じ。des-edeに対し、des-ede3は鍵を3つ使い、 EDEを行う (DES-EDE3)。つまり、 鍵Aで暗号化→鍵Bで復号化→鍵Cで暗号化 を行う。 des-ede3-cbc: DES-EDE3をCBCブロック暗号で行う。des-ede3と同じ。 des-ede3-cfb: DES-EDE3をCFBブロック暗号で行う。 des-ede3-ofb: DES-EDE3をOFBブロック暗号で行う。 des-ofb: DESをOFBブロック暗号で行う。 11.11.2.1.5. 3DES 上記で記したとおり、OpenSSLのDESにはEDEやEDE3という手法があります。 これはDESが56ビットという短い鍵長であるために、総当り攻撃を行うと1日 で鍵が発見されてしまう、という背景から、DES暗号化を3回繰り返して暗号 強度を高めよう、というものです。 一般には3DES (triple DES; トリプルデス) と呼ばれます。 サンデスとかスリーデスとか言う人もいますが、トリプルデスです。 2つの鍵で暗号化・復号化を行うEDEと、3つの鍵で暗号化・復号化を行う EDE3があります。 なぜ、3つの鍵でEEE、つまり暗号化→暗号化→暗号化にしないのでしょう? 同じ鍵で暗号化→復号化を行ってしまえば元の平文に戻ってしまいますが、 異なる鍵で暗号化→復号化を行えば、それは異なる鍵で暗号化→暗号化を行う のと同じ暗号強度が得られます。 鍵Aで暗号化→鍵Bで暗号化→鍵Cで暗号化 は、 鍵Aで暗号化→鍵Bで復号化→鍵Aで暗号化 にしても強度は同じ、つまりEDEはEEEと同じ暗号強度があるということです。 さらに、EDEで使う2つの鍵を同一にしてしまえば、 (暗号化→復号化)→暗号化 で、()内で平文に戻ってしまうため、単純に1つの鍵で暗号化したことと 同じになります。つまりDESと同じになるわけです。 ハードウェアやソフトウェアでアルゴリズムを実装するときに、EDE方式を 使えばDESも3DESも同じロジックで動かせるため、EDEが使われます。