問題タブ [rsa]
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.
c++ - OpenSSL での Crypto++ 生成 RSA キーの使用
OpenSSL で Crypto++ API を使用して生成した RSA キーを使用する方法はありますか? 私が探しているのは、Crypto++ と OpenSSL の両方で簡単に開くことができる形式でキーを保存する方法です。
私はライセンス スキームを作成しており、Crypto++ API を使用して署名を検証し、ファイルを復号化したいと考えていますが、ライセンス ファイルを生成するには、Web インターフェイス (おそらく OpenSSL のみをサポートする PHP を使用) を使用して、生成および暗号化/暗号化を行いたいと考えています。ライセンスに署名します。
Crypto++ を使用して両方のアプリケーションを作成し、PHP から呼び出しますが、秘密鍵は暗号化された形式で保存されるため、パスワードをアプリケーションに渡す必要があり、コマンド ラインで渡すのは適切ではないようです。私へのアイデア。
c# - このデータを自分の RSACryptoServiceProvider にインポートできないのはなぜですか? (C#.NET)
テスト目的で、RSACryptoServiceProvider にエクスポートするモジュラスとプライベート指数を設定しました。これが私のコードです:
残念ながら、「Bad Data」が表示されます。パラメータのインポート時のエラー (最後の行)。(注:私はこのエラーが本当に嫌いです。説明的ではないため、原因を見つけるために数日間のテストプロセスを行っています-まったく。暗号化例外が発生するたびにスローされます)。
この操作に違法性はありますか?
c# - 「鍵が悪い」RSACryptoServiceProvider (C#.NET) で復号化するときの例外
以前に RSA で暗号化されたデータを復号化しようとしています (心配しないでください。できるはずです。キーを持っています。違法なことは何もありません :)。
ただし、「Bad Key」が表示されます。復号化行でエラー。ベクトルから取得したので、このキーは正しいと確信しています。ベクターは、次のコードで提供されます。理論的には、解読する情報はすべて揃っていますが、うまくいきません。私がまだ理解していない.NETの解読方法かもしれないと思っています。
コードは次のとおりです。
どんな洞察も大歓迎です。私はこれを何週間もデバッグしようとしています。文字通り。
c# - C#.NETRSAでデータを暗号化する際の不特定のエラー
私は自分の問題をどのように説明するのか分かりません。これはバイト配列を暗号化する最も簡単な方法であり、.Encrypt(...)メソッドで文字通り「不特定のエラー」が発生します。
注:Logger.Hexは、バイト配列の16進文字列表現を表示します。干渉するものはありません。
c# - パディングなし (nopadding) で RSACryptoServiceProvider を動作させるにはどうすればよいですか?
Java アプリケーションと互換性のある C# アプリケーションを作成する必要があります。
Java アプリケーションは、Cipher.getInstance("RSA/ECB/nopadding");
イニシャライザを使用して暗号 ECB とパディングなしを作成します。
ただし、C# では、パディングに OAEP パディングまたは PKCS#1 v1.5 パディングの 2 つのオプションがあります。パディングなしのバージョンが必要です。そうしないと、プロジェクトに行き詰まってしまいます。
C#.NET RSACryptoServiceProvider でパディングなしのスキームを使用する方法はないと思います。ただし、この精度を可能にする RSA カスタム クラスまたはライブラリはありますか?
PS: C#.NET の RSACryptoServiceProvider ECB はデフォルトですか? これに関するドキュメントが見つかりません。
java - JavaでのRSA秘密鍵による暗号化
一部のコンテンツをRSA秘密鍵で暗号化しようとしています。
私はこの例に従っています:
http
://www.junkheap.net/content/public_key_encryption_javaです
が、公開ではなく秘密鍵を使用するように変換しています。その例に従って、私がする必要があるのは次のとおりだと思います。
- DER形式の秘密鍵を読み込む
- PCKS8EncodedKeySpecを生成します
- KeyFactoryからgeneratePrivate()を呼び出して、秘密鍵オブジェクトを取得します
- その秘密鍵オブジェクトをCipherオブジェクトとともに使用して、暗号化を行います
したがって、手順は次のとおりです。
キーはopensslから次のように生成されました。
openssl genrsa -aes256 -out private.pem 2048
次に、次の方法でDER形式に変換されました。
openssl rsa -in private.pem -outform DER -out private.der
次のコマンドでPKCS8EncodedKeySpecを生成します。
次に、次のコマンドで秘密鍵オブジェクトを生成します。
ただし、次の呼び出しで:
私は得る:
質問:
- 一般的なアプローチは正しいですか?
- PCKS8EncodedKeySpecは使用するのに適切なkeyspecですか?
- 無効なキースペックエラーについて何か考えはありますか?
security - このアーキテクチャはどの程度安全ですか?
セキュリティで保護された Web 接続を介してユーザーの機密データを収集し、後で自動化された復号化と再利用のためにサーバーに安全に保存する必要があるシステムを構築しています。また、システムは、ユーザーが保護されたデータの一部 (例: *****ze
) を表示したり、Web 経由で完全に変更したりできるようにする必要があります。システムは妥当なレベルのセキュリティを提供する必要があります。
私は次のインフラストラクチャを考えていました:
アプリ (ウェブ) サーバー 1
安全な Web 接続のための適切な TLS サポートを備えた Web サーバー。
公開鍵アルゴリズム (RSA など) を使用して、入力されたユーザーの機密データを暗号化し、 App Server 1またはDB Server 1のどこにも保存せずに、一方向のアウトバウンド セキュア チャネル (ssh-2 など) 経由でApp Server 2に送信します。
ユーザーパスワード依存の対称鍵アルゴリズムを使用して、入力されたデータの一部 (最後の数文字/数字など) を暗号化し、DB サーバー 1に保存して、後でユーザーの Web セッション中にアプリケーションサーバー 1で取得できるようにします。
ユーザーが Web 経由でデータを変更する場合は、ステップ 2 を再利用します。
DB サーバー 1
- セキュリティで保護されていない非機密ユーザー データを保存します。
- アプリケーション サーバー 1で暗号化された機密ユーザー データの一部を保存します (上記の手順 3 を参照) 。
アプリ サーバー 2
- App Server 1またはDB Server 1には何も送信 しない でください。
- アプリケーション サーバー 1から暗号化されたユーザーの機密データを受信し、 DB サーバー 2に保存します。
- 暗号化されたユーザーの機密データを ローカル スケジュールに従ってDB サーバー 2から取得し、適切なキー管理でアプリ サーバー 2にローカルに保存されている秘密キー (アプリ サーバー 1の手順 2 を参照)を使用して復号化します。
DB サーバー 2
- 暗号化されたユーザーの機密データを保存する ( App Server 2のステップ 2 を参照)
アプリ (Web) サーバー 1またはDB サーバー 1 、あるいはその両方が侵害された場合、攻撃者はユーザーの機密データ (暗号化されているかどうかにかかわらず) を取得できなくなります。とにかくよく知られている公開鍵と暗号化アルゴリズムへのアクセスだけが攻撃者に与えられます。ただし、攻撃者は Web サーバーを変更して、現在ログインしているユーザーのパスワードを平文で取得し、DB サーバー 1 に保存されているユーザーの機密データの一部を解読することができます ( App Server 1を参照)。、ステップ 3) は大したことではありません。攻撃者は、(コードの変更を介して) 潜在的な攻撃中にユーザーが Web 経由で入力した機密データを傍受することもできます。後で私はリスクが高いと考えますが、攻撃者が誰かに気付かれずにコードを変更するのは難しい (そうですか?) ことを考えると、あまり心配する必要はないと思います。
App Server 2と秘密鍵が侵害された場合、攻撃者はすべてにアクセスできますが、App Server 2またはDB Server 2は Web 向けではないため、問題にはなりません。
このアーキテクチャはどの程度安全ですか? 暗号化アルゴリズムと安全なプロトコルがどのように機能するかについての私の理解は正しいですか?
ありがとうございました!
c# - 文字列を暗号化/復号化する方法は?
この質問に続いて、RSA キーとは何か、C# で RSA キーを作成して使用する方法を知りたいです。
c# - C#RSAを使用した暗号化の問題
私はMSDNから引き出したこの関数を使用しています
ここからメソッドを呼び出しています:
しかし、私はこのエラーメッセージを受け取ります:
何が悪いのか考えてみませんか?
c# - RSA によるライセンス検証の実装
C# で作成したプログラムを販売しようとしていますが、そのライセンスを厳密に管理したいと考えています。つまり、クライアントが起動するたびにサーバーに接続できるようにしたいということです。これにより、キーを無効にすることもできます (paypal でのチャージバックまたはコードの配布の場合)。もちろん、これは他のユーザーにとっては面倒かもしれませんが、この場合は必要です。クラックされていない優れた .NET ライセンス システムを見つけることができなかったので、自分で小さなものを作成するというアプローチを取りたいと思いました。私の計画は、次のことを行うことでした。
- ソフトウェアに同梱される 1024 文字を含む key.dat を生成します (各ユーザーに個別に)
- アプリケーション エントリポイントで、暗号化された key.dat + 現在のタイムスタンプを送信する httprequest をサーバーに追加します。
- HTTP サーバー (PHP を実行) はリクエストを復号化し、キーが (データベース内で) 有効かどうかを確認し、「アクセス レベル」(ライセンス タイプ) で応答します。キーが無効または無効になっている場合、エラーコードが返されます。リクエストと同様に、応答はタイムスタンプでソルトされているため、誰かが有効なパケットを自分に送信してプログラムを検証することはできません。タイムスタンプはクライアントでチェックされています。返信は、RSA と以前に生成された公開鍵で暗号化されます。
- クライアントは応答を受け取り、秘密鍵で復号化して反応します。
RSA はこれに対する正しいアプローチなので、パケットが私によって送信され、(公開鍵を持っている他の人によって) 細工されていないことを保証できますか? この問題を解決するためのより良いアプローチはありますか?