問題タブ [public-key-encryption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
encryption - WinCrypt で公開鍵暗号を生成して使用する方法
現在、Windows 暗号化 API を試していて、公開鍵暗号化でいくつかの問題が発生しています。アイテムを暗号化する方法の例はたくさんありますが、最初から最後までの公開鍵モデルに直接対処するものはありません。
現在のコードで暗号化キー ペアを生成する方法の大まかな概要を次に示します。読みやすくするためにエラー チェック コードを削除しました。
エクスポートした 2 つのキーは異なりますが、どちらも他のキーを読み込まなくてもメッセージを復号化できます。さらに、エクスポートされた公開鍵をロードする新しいセッションで新しいメッセージを暗号化すると、どちらの鍵でも復号化できます。
私が間違っていることや行方不明になっている可能性があることについて、誰かが私にアドバイスできますか? 私は完全に間違った道を進んでいますか?
java - JavaとOpenSSLを使用した公開鍵暗号方式
アプリケーションでは、機密データ(任意のサイズにすることができます)を保存して、後で調査に使用できるようにします。重要なのは、データを保護されていない状態で配置したくないので、保存する前に暗号化することです。
別のコンピューター(より信頼できる環境)で、後でそのデータを復号化したい。復号化は、OpenSSLなどのすぐに利用できるツールで可能である必要があります。今私の質問は:どうすればそれをすべて行うことができますか?
私はすでに抽象的なステップを知っています:
- 一度限り、公開鍵と秘密鍵のペアを生成します。
- 公開鍵を使用してJavaで暗号化し
byte[]
、どこかに保存します。 - 暗号化されたデータを「より安全な」コンピューターにコピーします。
- 単純なOpenSSLコマンドラインを使用して、保存されたデータを復号化します。
私が今欠けているのは詳細です:
- どのようなキーペアが必要ですか?
- どの暗号化スキームを使用する必要がありますか?(おそらく「rsa-対称鍵を暗号化してから、その鍵でデータを暗号化する」のようなものです)
- 単純なOpenSSLコマンドラインはどのように見えますか?
[2011年2月13日更新]
少し調べてみたところ、自分がやりたいことを正確に説明しているページが見つかりました:http: //blog.altudov.com/2010/09/27/using-openssl-for-asymmetric-encryption-of-backups/。基本的に、私のステップ4の答えは次のコマンドラインです。
今私の質問は次のとおりです。このコマンドラインを使用して解凍できるように、OpenSSLと互換性のある形式のJavaからファイルを生成するにはどうすればよいですか?これを1秒間に数百回実行したいので、外部プロセスの呼び出しは遅すぎるようです。だから私はJavaで直接やりたいのです。
java - Java での RSA 暗号化: クロス プラットフォームの問題?
状況
Java で RSA 暗号化を使用しています。Cyanogenmod の Android 2.2 を搭載した HTC Saphire (32B) 開発者向け携帯電話でデータを暗号化し、Mandriva Linux 2010 を実行している 64 ビット サーバーでそのデータを復号化しようとしています。両方のマシンで同じ公開鍵と秘密鍵のペアを使用しています。 、Androidフォンでデータを正しく暗号化/復号化でき、Linuxサーバーでデータを正しく暗号化/復号化できますが、電話でデータを暗号化してからサーバーで復号化できません. パディングの例外が発生します。データが電話から正しく送信され、サーバーによって正しく解析されていることを確認しました。そのため、復号化が失敗する理由がわかりません。誰でもこれで私を助けることができますか?おそらく、Java の RSA アルゴリズムには、単語のサイズに関するいくつかの基本的な仮定がありますか?
さらに詳しい情報:
- 私の暗号化/復号化ライブラリは、こちらのガイドに基づいています。
- 私の暗号化キーの長さは 2048 ビットですが、異なるキー サイズでも同様の動作が見られます。
- RSA 暗号化/復号化コードを jar ファイルにパッケージ化しました。これは、サーバーのマシンで Eclipse を介してコンパイルされました。
- Android フォンの暗号化ライブラリを使用するプログラムは、上記のライブラリを使用します。これも Eclipse を使用してビルドされました。
- サーバー プログラムは、Netbeans を使用して作成されました (当時は Netbeans の方が簡単だったからです)。
その他の質問
- Java で利用できる他の無料の公開鍵暗号化アルゴリズム/ライブラリはありますか? それらはクロスプラットフォームで動作しますか? それらにどのようなパフォーマンスが期待できますか? などなど。私はこれを調べましたが、あまり見つかりませんでした。おそらく私は間違ったキーワードで探しています。
ふぅ!それだけだと思います。事前にご協力いただきありがとうございます。
encryption - 公開鍵暗号化はどのように機能しますか?
秘密鍵と公開/公開鍵を使用して復号化/暗号化する場合、公開鍵暗号化はどのように機能しますか?キーが256ビットであるとはどういう意味ですか?どのように復号化されますか?暗号化プログラムを作成するための言語はありますか、それともどの言語でも問題ありませんか?
java - Java で対称暗号化を使用してディスク上の秘密鍵を保護する
中央サーバーからのコマンドをポーリングする分散アプリケーションがあり、それらのコマンドの内容は、各リモート サイトでアプリケーションと共に展開された公開鍵を使用して、秘密鍵によって「署名」されます。各コマンドは秘密鍵で署名され、その署名はコマンドが実行される前に検証されます。
Java で公開鍵と秘密鍵のペアを生成する方法を次に示します。(私は、1024 よりも多くのことを行う必要があることを認識しています)
新しい要件は、単純な比較的安全なコマンドを送信することに加えて、ソフトウェアにインストーラーをダウンロードして実行し、それ自体を更新するように指示するコマンドを送信することです。これは、正しく行わないと大きな穴が開く可能性があります。「更新インストーラーの実行」コマンドは、通常どおり署名され、ダウンロードして実行される実行可能ファイルの md5 も含まれます。そのため、コマンドの署名は正しく (md5 を含む) 必要があり、ダウンロードしたファイルで計算された md5 は、実行前に正しい必要があります。これは、私が考えることができるほとんどの攻撃ベクトルを処理するはずです. 他に気をつけなければならないことはありますか?
そのため、これらのコマンドが発信されたサーバーで秘密鍵を保護することに注意を向けています。その秘密鍵を入手するとゲームオーバーです。そのキーをディスク上でどのように保護すればよいですか?
私の考えは、パスフレーズを使用した対称暗号化を使用して、その秘密鍵を保護することです。
私の現在の解決策は次のとおりです。
(明確にするために例外を削除しました)
これは基本的にソルトをランダムに生成し、パスフレーズを使用してキーを作成し、結果のソルト、IV、および暗号テキストを復号化の準備が整ったファイルに保存します。
しかし、私はここに何かが欠けていると感じています。有効な説明を取得できるように、キーに何らかのタイプの MAC を含める必要がありますか? たぶん、秘密鍵の前に既知のテキストを 5 バイトまたは 6 バイト置くだけの簡単な方法でしょうか? 現在、パスフレーズが正しくない場合、パディング例外が発生するだけですが、常にそうであるとは限らず、一部のパスフレーズがデコードされてジャンクになる可能性があることを読みました。これを防ぐ必要があると感じています。
私がここで正しい軌道に乗っているかどうかを誰かに知らせて、フィードバックを提供してもらえますか。これを可能な限り安全にすることが重要です..
encryption - ID ベースの暗号化の実装はありますか?
私はID ベースの暗号化について読んでいますが、実装が見つかりません (論文の数学は私にとっては少し難しいです)。実装を見つけるために私がどこに行くのか知っている人はいますか? それがどの言語で書かれているかはあまり気にしません。
.net - .NET での RSA 暗号化、Python での復号化
C# で RSA アルゴリズムを使用して短いメッセージを暗号化し、python スクリプトを使用してメッセージを復号化しようとしています。
C# 側で .NET クラスを使用し、Python 側でpycryptoを使用したいと考えています。両側で同じキーを使用するように管理しました (.NET は標準の PEM/DER 形式を直接サポートしていないため、これは簡単ではありませんでした)。暗号化/復号化は両側で独立して機能します。
私は C# 側で PKCS#1 パディングを使用しています (fOAEP
パラメーターをRSACryptoServiceProvider.Encrypt
to に設定していますfalse
)。そのため、Python でブロックを復号化した後、ある種のクリア テキスト (つまり、私の「メッセージ」とパディング バイト) が表示されるはずです。 )
しかし、私が見るのはゴミだけです:(。
どちらの側にも気づいていない警告/落とし穴はありますか? 私はちょっとアイデアがありません...
Thx マーティン
サンプルコード
C# / 暗号化
Python / 復号化
キー転送については、 のToXmlString()
方法を使用していRSACryptoServiceProvider
ます。結果の XML は python で解析され、pycrypto -RSA オブジェクトは次のように初期化されます。
ここmodulus
でexponent
、、、、およびはd
、 .NET構造体のそれぞれのフィールドです。(私が述べたように、Pythonでこのキーを使用してメッセージを暗号化/復号化できます。また、生成されるため、キーのインポートは正しく機能していると思います...)p
q
RSAParameters
p*q
modulus
https - 同じサーバーに対して HTTPS を使用して POST 変数を暗号化する - 毎回異なる方法で暗号化しますか?
公開鍵暗号化についての私の理解では、同じ公開鍵が使用されている場合、 alleycatという単語は毎回同じ暗号化文字列に暗号化されます (これは、特定の Web サーバーで HTTPS がどのように機能するかについての私の理解です)。
これは、私が「安全な」サイトにログインしようとするたびに誰かが私の HTTPS ヘッダーを傍受し、同じ「暗号化された」ヘッダーを使用して私としてログインできるということですか?
openssl - RSA 秘密鍵を使用して公開鍵を生成しますか?
これはよくわかりません:
https://www.madboa.com/geek/openssl/#key-rsaによると、秘密鍵から公開鍵を生成できます。
私の最初の考えは、それらはペアで一緒に生成されるというものでした。
RSA秘密鍵には合計が含まれていますか? それとも公開鍵?
blackberry - BlackBerryでRSA暗号化を使用中にエラーが発生しました
BlackberryでネイティブAPIを使用してRSA暗号化を使用しようとしています。Javaで公開鍵と秘密鍵のペアを作成し、鍵のモジュラスと指数を文字列として保存して、暗号化と復号化のためにこれから鍵を生成できるようにしました。次のコードはクライアント側からのものであり、を取得していInvalidKeyException
ますが、バックトレースがnullであるため、何が起こっているのかわかりません。
そして、これは私が私のキーを生成するためにサーバー側で行ったことです:
何か案は?
編集:私はそこで暗号化と復号化を行うことでサーバー上で簡単なテストを試みました、そして私が復号化しようとするとIllegalBlockSizeException
これらは私の暗号化と復号化の方法です(サーバー側):
そして、これは私が試している簡単なテストです: