2011-09-09 6 views
1

免責条項:暗号が新しく追加されました。OpenSSLで暗号化されたデータから初期ベクトル(iv)を取得するには

OpenSSLを使用してデータを暗号化する外部プロセスがありますが、現在は塩を使用しています。

iPhoneアプリケーションは、サーバーからそのデータを取得し、それをアプリケーションのドキュメントディレクトリにダウンロードし、それを復号化する必要があります。 iPhone OSにはOpenSSLライブラリが含まれていません。あなたはそれを自分で作ることができますが、それは難しくて面倒です。私が見つけた "最も簡単な"ソリューションは、Stackoverflowの助けを借りて、セキュリティフレームワークの一部であるCommonCrypto/CommonCryptor.hを使用することです。

しかし、データを復号するC関数では、正しく復号化するためにivが必要です。

暗号化されたデータからivを派生させる方法はありますか(それは余分なセキュリティを無効にするようです)。または、私は何とか何とかivを指定して、iPhoneアプリにそれが何であるかを知らせる必要がありますか?または、塩を使用しないでください。

Edit1:明確にするために、私はOpenSSLを使ってデータファイルのテキストを暗号化しています。 OpenSSLを使用するスクリプトは、テキストを暗号化してDropboxにアップロードし、アプリケーションはDropboxからファイルをダウンロードし、解析してテキストの復号化を試みます。

Edit2:はい、私は-passオプションでOpenSSLコマンドラインユーティリティを使用しています。

+0

あなたは何をしようとしていますか?サーバーをセットアップするか、単にsslをサーバーに使用しますか? – zaph

+0

実際のキーを除くOPenSSLコマンドとは何ですか? – zaph

答えて

4

暗号化するメッセージごとにIVをランダムに選択する必要があります。 OpenSSLコマンドラインユーティリティopenssl encを使用していると仮定していますが、パスワードベースの暗号化(-pass-saltオプション)を使用しているか、キーを明示的に指定しているかはわかりません(-K-IVオプション)。

最高のセキュリティを確保するため、-Kオプションを使用し、メッセージごとに新しいIVをランダムに生成することをお勧めします。暗号文とともにIVを送る。たとえば、1つのファイルでIVに暗号文を追加し、解読の準備ができたらファイルの先頭からIVを削除することができます。

IVはパブリックにすることができます。あなたはそれを隠す必要はありません。重要なことは、各メッセージに予期しないIVを使用することです。

1

ivは暗号化されたデータから派生することはできません。両者の間の通信の外で合意するか公開する必要があります。また、暗号化モードによっては必須ではないかもしれませんが、CBCが最も一般的であり、ivが必要です。基本的には、最初のブロックのの情報を収集するのが難しくなります。

あなたの場合は静的であり、単にハードコードしているか、プリムンプルで送信されている可能性があります。データからそれを抽出する方法を見つけてください。

IV SSLと同様にシンプルなワン

0などの問題がパケットをキャプチャしようとしていることができます。それはアプリ Charles (link here)で簡単に行うことができます。無料トライアルがあります。私は定期的に使用します。

関連する問題