• 締切済み

opensslを使ったAES暗号化について

opensslを使ったAES暗号化について教えて下さい。 AESは「鍵とブロックの長さはそれぞれ128ビット、192ビット、256ビットの中から指定できる。」とありました。 opensslのAESを使って鍵長とブロック長をともに256ビットで暗号化したい場合どのようにすれば宜しいでしょうか。 openssl enc -e -aes256 -in original.txt -out crypted.txt 上記コマンドを打った場合 -aes256 というのがブロック長(256ビット)の指定と思っていますがあってますでしょうか? 残りの鍵長を256ビットにするというのは どのように指定すれば宜しいでしょうか。 何卒 宜しくお願い致します。

  • sonar
  • お礼率57% (27/47)

みんなの回答

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

今手元にopensslのソースもドキュメントもないのでいい加減ですが…… まず暗号化するなら暗号化鍵を何らかの方法(パラメータで鍵ファイルを指定するなり)で指定しなければ暗号化できないと思います。 予め256ビットの鍵を用意しておいて、それを指定する方式になると思います。 なお鍵生成は公開鍵だとopensslコマンドで生成できますが、AESの鍵はランダムなビット列で良いので生成コマンドがあるかどうかは知りません。

sonar
質問者

補足

ご回答ありがとうございます。 鍵の指定の仕方を調べてみました。 -kfile というパラメータでした。 openssl enc -e -aes256 -in original.txt -out crypted.txt -kfile private.key ※-kfile を指定しなかった場合は パスワードを求められ  入力すると暗号化されました。 この-kfileで指定する鍵が256ビットであればよいのでしょうか?鍵の作成方法を調べていますがなかなか解りません。引き続き調査したいと思いますが、どなたかご存知の方がいらっしゃいましたらご教示頂ければと思います。宜しくお願い致します。

関連するQ&A

  • C#でAES暗号

    FreeBSDのコマンドとC#で暗号化した結果が異なります。 何が原因なのでしょうか。 コマンド: echo -n '1' | openssl enc -e -aes-128-cbc -K 1111111111111111 -iv 1111111111111111 -base64 結果>jrSCkCNzo9d4sXlRt5lQ/A== C#: http://programmers.high-way.info/cs/aes.html ここのをキーとIVを変更してます 結果>2OnHWXi3UZDpjnZ6Pex4PQ== 以上です。 宜しくお願いします。

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

    OpenSSLでの3DESを勉強しているのですが、以下コマンドが理解できないのでご教授ください。 ※そもそも暗号化処理自体あまり理解しておりませんorz $ echo hoge | openssl enc -des3 -base64 -k 'yyyy' U2FsdGVkX19vTigKtKhZM9VVTAHQv0fP 3DESといえば鍵を3つ(もしくは2つ)使わなければいけないと考えているのですが、上記コマンドでは特に鍵を複数指定しているとは思えません。 (パスワードのyyyyのみ) なぜ鍵を複数指定せずともdes3で暗号化された文字が出力されるのでしょうか? また、鍵を複数(2つもしくは3つ)指定して暗号化するにはどのような方法があるのでしょうか? 上記どちらかでもよいので、ご存知の方のご回答を聞きたいです。 また参考になるURL等ご提示頂けるとありがたいです。

  • 暗号化について

    はじめまして。 暗号化について教えて下さい。 ファイルを秘密鍵方式で暗号化、複合化を行うのですが 暗号化する前のファイルのバイト数と暗号化されたあとの ファイルのバイト数は必ず同じになるのでしょうか? ソースの内部で処理を行う予定なのですが、 最初に暗号化前のファイルの大きさだけ 暗号化後のファイルの領域を確保しようと考えています。 今回、暗号化を行うのは OpenSSLのRC2(40bit)です。 コマンドは 「openssl -e -rc2-40-cbc -in 暗号化前ファイル -out暗号化後ファイル」 です。 もう一つ教えていただきたいのですが、鍵の設定は上記のコマンドの末尾に「-K 鍵」で合ってますか? 以上です。よろしくお願いいたします。

  • AES と Rijndael

     Rijndaelの参考文献(下記)では、AESとして採用されているものよりも鍵およびブロックの長さの種類が多く、鍵長、ブロック長は、それぞれ128,160,192,224,256ビットの5通りです。AESのものは、鍵長、ブロック長は、128,192,256ビットです。  128,160,192,224,256の最小公倍数は26880ですが、128,192,256の最小公倍数は768です。より広範囲のデータに対して暗号化の操作が行われるほうが解きにくくなると思います。より大きな最小公倍数を持つ複数の鍵で多重暗号化したほうがよいと思うのですが、最小公倍数が768のものを公式にAESとして採用して、最小公倍数が26880の参考文献にあるRijndaelを利用しなかったのは、どんな理由なのでしょうか? それとも、安全性はあまり変わらないのでしょうか? よろしくお願いします。  参考文献:The Design of Rijndael, AES - The Advanced Encryption Standard,Springer

  • AES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて

    VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。 AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、 AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。 (http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、 一連の流れは、こことほぼ同じです) デバッグしてみると、一見、暗復号が問題なく出来ていたので、 AES_set_encrypt_key関数の第一引数のkey配列の値と、 ivec配列の値を変えて、デバッグしてみたところ、 key配列を変更すると、暗号化後の文字列も変更されますが、 ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。 調べてみたところ、AES_set_encrypt_keyにて返される AES_KEYのroundsの値が常に同じであることが原因と思われますが、 roundsの値が常に一定だと、暗号解読が比較的容易に 出来てしまうと思うのですが、上記で挙げたサイトでの コーディングの他に、何か別にコーディングを足さなければならないのでしょうか? よろしくお願いします。

  • C#での暗号化(AES)

    初めてのプログラミングにて不明な部分があるので 知恵を貸して頂けませんでしょうか。 現在、C#にて16進で生成された値を 指定秘密鍵を使用してAES暗号化を行たいです。 C#での暗号化のサンプルは多数Webにて見ましたが 指定秘密鍵を使用しての方法がどうしてもわからなくて困っています。 どなたかサンプルURL等ご存知でしたら教えて頂けませんでしょうか、 よろしくお願い致します。

  • AES暗号方式について

    AES暗号化方式では,秘密鍵(共通鍵)を用いてランダムに生成したセッション鍵で暗号化し,さらにそのセッション鍵を暗号化する. 復号化する場合は,逆の手順で平文に戻す と認識しています. これを踏まえて以下の質問に回答いただけると幸いです. 1.上の認識は間違っていないでしょうか? 2.暗号文を復号するには,暗号化時に生成したセッション鍵の値と秘密鍵が必要であると言えますか? 3.秘密鍵が漏れなければセッション鍵が漏れても問題ありませんか? 以上,3点についてご教授いただけると幸いです. よろしくお願いします.

  • 暗号アルゴリズム(DES,AESなど)について

    研究室の課題で暗号アルゴリズム(DES,AESなど)の勉強中なのですが、 少し分からないことがあるのでお詳しい方いらっしゃいましたら教えてください。 まず、DES, 3DES, AESのECBモードで暗号するときを考えます。 入力データ長と出力データ長が同じで、カギを変えない場合に 入力データと出力データは1対1になるのでしょうか? カギを変えずに、異なる入力データから同じデータが出力されることがあるかどうか知りたいです。 また、ある固定バイトのデータを同じ長さのデータに暗号化するときに どのような暗号方式が考えられる(世間的に強力とされている)のでしょうか? たとえば、4バイトのデータを暗号化して4バイトのデータを生成するような場合です。 条件として異なる入力データからは同じ出力データが生成されることがないとします。 アドバイスでも良いです。お願いします。

  • AES(Rijndael)、繰り返し変換

    AES-128、AES-256、すなわち Rijndael(ブロック長128bit)おける鍵長効果について教えてください。 仮に256bitの鍵があるとします。 AES-256を単純に用いる以外に、鍵を 128bit に二分して、AES-128の変換操作を二重に適用する方法も考えられます。 総ラウンド数からすれば後者の方が多いですが、強度も期待のものとなるのでしょうか。 さらに512bitなどの鍵があり、128bitで四回操作すれば、それに見合う暗号強度が得られるのでしょうか。 例え四回操作しても、実は一回操作で到達できる(置き換えられる)等価な128bit鍵が存在するというのであれば、総当り攻撃に関して原理上の価値は無いことになります。 128bitブロックの全単射の関数は、2^128 の階乗 通りもあると思います。 この内、128bit 鍵で指定できるのは、高々 2^128 種類にすぎません。 一回の変換操作では、ごく限られた関数しか使用できていない事になります。 二回の変換操作をまとめて一つの関数と見なした場合、「いかなる値の128bit鍵をもってしても一回操作では置き換えられない関数」になっていると期待したいところです。 そうなら鍵長とともに単純に暗号強度が高まることになります。 しかしどんなに多くの変換回数を費やしても到達できない関数があるかもしれません。 Rijndaelの場合、多重変換で関数(写像)の種類は増すでしょうか、どのような飽和傾向があるのでしょうか。

  • PHPでの文字化け

    公開鍵による暗号化のプログラムで、ソースは以下のとおりです。 <?php // 初期設定 $data = file_get_contents('data.txt'); // 平文を読込み $cert = file_get_contents('cert.pem'); // 証明書を読込み $enc_file = 'enc'; // 暗号文ファイルパス // 公開鍵による暗号化処理 $cert_res = openssl_pkey_get_public($cert); // 証明書リソースを取得 openssl_public_encrypt($data, $enc, $cert_res); // データを暗号化 file_put_contents($enc_file, $enc); // 暗号文をファイル出力 ?> これで出力される暗号文が文字化けしたような文字コードになっているのですが、これは正常なのでしょうか? なにか、エンコード等する必要があるのでしょうか? よろしくお願いします。

    • 締切済み
    • PHP