• 締切済み

「Crypto API」について

初めて質問させて頂きます。 質問したいことはCrypto APIのCSP(CryptoGraphy Service Provider、環境XPSP3)と次世代暗号のCNG(Cryptography Next Genaration、環境はWin7)の互換性についてです。 (1)CryptoAPIのCryptCreateHash関数でメッセージをSHA_256にし、AES_256のセッション鍵を作成した暗号文をCNGで復号することはできますか? (2)上記の逆(CNGでSHA_256→AES_256で暗号化)した場合、CSPで復号できますか? 出来る場合は必要な関数を、できなければ他の解決方法を教えて頂きたいです。 よろしくお願いします。

みんなの回答

回答No.1

CSPとCNGの違いはAPIのデザイン(インターフェース)とサポートされるOS(ランタイム)です。暗号化アルゴリズムは関係ありません。 Cryptography http://msdn.microsoft.com/en-us/library/aa380255(v=VS.85).aspx Cryptography API: Next Generation http://msdn.microsoft.com/en-us/library/aa376210(v=VS.85).aspx APIの解説についてはこちらが参考になると思います。 http://www.trustss.co.jp/smnEncrypt010.html http://www.trustss.co.jp/cng/1000.html

関連するQ&A

  • AES暗号方式について

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

  • 組み込みC言語 AES 暗号・復号化の利用

    組み込みマイコン関係の開発に携わっているものです。 この度、AES128の暗号・復号化を使用する開発案件に 携わることになり、AESの暗号・復号化について勉強中です。 まだ、マイコンでの暗号化・復号化処理という 開発経験がないため、皆様にご教示頂きたく 質問させて頂きます。 マイコンでAES128等の暗号・復号化処理を実装する場合。 マイコンそのものがハードウェアとして暗号・復号化の機能を 持っているものがありますが、通常はこちらで対応するのが 正当な方法、という認識で合っているのでしょうか? また、仮にファーム側の対応を要求された場合は、 マイコンメーカーが出している有料のライブラリ。 または、何かその手では有名な参考となるフリーの ソースコードというものが有るのでしょうか? 恐れ入りますが、ご教示の程宜しくお願い致します。

  • 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の値が常に一定だと、暗号解読が比較的容易に 出来てしまうと思うのですが、上記で挙げたサイトでの コーディングの他に、何か別にコーディングを足さなければならないのでしょうか? よろしくお願いします。

  • openSSLのAES暗号化アルゴリズム関数仕様 (C言語開発)

    openSSLのAES暗号化アルゴリズムを使用して、暗号化と復号化の処理 をC言語で作成したいのですが、関数の仕様書を見つけることができません。 尚、openSSLの公式Pageにも載ってませんでした><; 関数仕様書を入手できるHP、或いは書籍(有料でも良いです)などございましたら、 ご教授の程、お願い致します。

  • APIについて

    アプリケーションソフトがが環境変数の値を取得する場合、環境変数を取得するAPI関数が「あそこのレジストリに要求された変数があるから取りに行いこう」という感じでとりに行って、アプリケーションに返してるんでしょうか?

  • 暗号キーの保存

    現在下記のようにし、暗号化を行っています。 -------------------------以下ソース KeyGenerator kg = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); // 128ビットで暗号化 kg.init(128, random); Key key = kg.generateKey(); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); // バイト配列に変換 byte[] byteArray = cipher.doFinal(argStr.getBytes()); 暗号化について調べていると、暗号化(復号化)キーは乱数などで作ったほうが良いと書いてありました。 そこで質問なのですが、ログイン画面でパスワードを暗号化するために上記コーディングを行っているのですが、乱数でキーを作成した場合、各ユーザごとにキーが作成されるって認識であってますでしょうか? その場合、暗号キーはどこに保存しておくのが望ましいでしょうか? できる限りセキュアなアプリを作りたいと思っています。 (もちろん100%はないとは思っていますので) ※データベースは使えない環境を想定しています。 以上宜しくお願いします。 tomcat5.0 jdk.1.4.2 を使用

    • ベストアンサー
    • Java
  • サーバ証明書等の正当性の確認について。

    サーバ証明書、証明書には、 認証局の署名をSHA-1等のハッシュ関数で、 ハッシュ化されたハッシュ値を、 認証局の秘密鍵で暗号化された認証局の電子署名が付加されていると思いますが、 その部分の信頼性についてですが、 認証局から、 公開鍵を取り寄せて、 ハッシュ値を取り出すと思うのですが、 もともとの平文(署名)を認証局から取り寄せることは可能でしょうか。 認証局の公開鍵で復号できたから、 認証局の秘密鍵で暗号化されているといえるのですが、 もともとの署名が何かがわかりません。 (ちょっと信頼性にかけるような気がします。) 署名を取り寄せることができれば、 署名をSHA-1等を使って、 ハッシュ値を取り出して、 公開鍵で復号したハッシュ値と比較することができます。 公開鍵と平文(署名)を取り寄せることはできないのでしょうか。

  • パスワードの決め方について(SHA3orHMAC)

    パスワードの決め方や保管の方法について、分からなくなってきたので基本から質問させてください。 1.パスワードをホームページ等でネットに公開したら危険ですか? 2.1.はただそのまま公開したら危険なのでやってはいけないと思いますが、暗号化して、パスワードのパスワードがないと解けない状態にして公開しておけば安全ですか? 3.2.の暗号化の手法として、暗号学的ハッシュ関数を用いて、ハッシュ値 h をパスワードにすれば、暗号化したパスワードを公開しても安全ですか? 4.3.について、パスワードにしたハッシュ値 h を公開したのではパスワードをそのまま公開していることになり、危険なため、ハッシュ値 h を算出する暗号学的ハッシュ関数の実行コマンドをホームページ等で公開し、パスワードを確認したいときにはこのコマンドを実行してハッシュ値を得ることにすれば、安全ですか? 5.4.について、暗号学的ハッシュ関数はSHAシリーズなどがありますが、この実行コマンドは広く一般に利用できる状態で提供されているため(ハッシュ計算するソフトウェアやWebサイトなど)、SHAなど既存の暗号学的ハッシュ関数を用いるのではなく、自分で専用に暗号学的ハッシュ関数を考案し、また実行コマンドやソフトウェアを作成する必要がありますか? 6.5.が大変な場合、SHAなど既存の暗号学的ハッシュ関数を用いて4.を実現するにはどうしたらいいですか? 7.4.について、コマンドがパスワードの数だけ存在すると管理が大変です。コマンドは共通にして、オプションスイッチで区別することはできませんか? 8.7.について、コマンドは既存のソフトウェアをあらかじめインストールしておき、オプションスイッチを含む実行コマンド文のみをHP等で公開しておくことはできませんか? 9.6.7.8を実現するには、オプションスイッチのうちのひとつをパスワードのパスワードとして、このスイッチのみを非公開とすれば良いですか? 10.9.について、コマンド文はどのように記述すれば良いですか?たとえばハッシュ関数H()、出力h、パスワードの対となる文字列(IDとかファイル名等)m、パスワードのパスワードをk、||は結合とした場合、 H(k||m)=h と書けると思いますがこれをH(m)として公開し、kはあらかじめPC等コマンドを実行する環境で設定しておけば良いですか? 11.10について、暗号学的ハッシュ関数SHA2シリーズ(256bit等)を用いた場合、Merkle-Damgård 構造であるため、length-extension 攻撃され、危険ですか? 12.10.11.について、暗号学的ハッシュ関数SHA3シリーズを用いた場合、SHA2シリーズのハッシュ関数と異なりスポンジ構造であるため、length-extension 攻撃は成り立たず、安全ですか? 13.12について、length-extension 攻撃以外の危険性はありますか?

  • この暗号化方式の条件は都合が良すぎですか?

    暗号化の方法として次のようなものを考えました。 1.暗号化したいテキストファイルを用意する。 2.base64を通したのち、1行1文字にする(1文字ごとに改行する)。 3.1行目の先頭にパスワードを付けたのち、行まるごと(改行は除いて)   SHA256に通してその出力で行まるごと(改行は除く)置き換える。 4.2行目の先頭に3.と同じパスワードを付け、さらにその後ろに   1行目をつけてから行まるごと(改行は除いて)   SHA256に通してその出力で行まるごと(改行は除く)置き換える。 5.4.を最終行まで繰り返す。   (パスワードの後ろに続けるのは常に直前行(と元々あった1文字)とする) この場合、復号のためにはパスワードが分かっていれば 全行(というか全文字)最大64回ずつ総当りすることになりますが、 ここで、パスワードもSHA256の出力だとすると、 パスワードの総当りと、全行の各1行ずつにつき最大64回ずつの 総当りで、 後者は、実用レベルに達するが、前者は、実用レベルに達しない という、計算機環境というか、世界というか世の中というかは、 想定として、都合が良すぎですか? もちろん暗号化したいテキストファイルのサイズによると思いますが、 現状あるいは近い将来(遠くても10年後くらい?)では、 この暗号化は実用的ではない(ならない)でしょうか? それとも永遠に実用的でないでしょうか?

  • PHPファイルの暗号化(難読化)方法

    PHPファイルの暗号化(難読化)方法 PHPファイルを暗号化(難読化)する方法を探しています。 現在は、有料の暗号化ツールを使用せずに、 自作で暗号化(難読化)を実施可能かどうかを検討しております。 ファイル全体を暗号化したいのですが、 ファイル内容は、PHPの開始タグ(<?php)、終了タグ(?>)とHTMLタグが混在していて それをbase64_encodeなどを使用し、暗号化をかけた場合、 base64_decodeで復号をかけたデータをブラウザにて実行させたい場合は、 どのようにすればよいか困っています。 eval関数は、phpソースコードを実行するため、 PHPの開始タグ、終了タグをのぞいた、phpコードしか実行できません。 echo関数では、phpソースコードもそのまま出力されます。 PHPの開始タグ、終了タグとHTMLタグ混在していても、 ブラウザ上でphpコードの実行とHTMLタグの出力が実行できる方法はないでしょうか。 ネット上で調べてみましたが、 phpコードのみを暗号化して、eval関数で実行するものしか 発見することができませんでした。 そもそも、ファイル全体を上記のような方法で復号化⇒実行することは無理で、 ファイルの中身を解析し、タグの置き換えや、 eval関数が使用可能な処理とそうでない処理とに分けるようなことになるのでしょうか。 暗号の目的は、ファイルが一見、何を行っているのかわからなく、 そのまま処理を使いまわしできないようにしたいためです。 PHPや暗号化に詳しい人が復号化できてしまうことは、理解しております。 何か方法やアドバイス等、ございましたら、 ご回答頂ければと思います。 phpバージョンは、5.2.14です。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう