問題タブ [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.
c# - Flex クライアントからの RSA 暗号化と Web サービスからの対応する復号化
Flex クライアントと C# で記述された Web サービス間の RSA 暗号化/復号化メカニズムの設定に問題があります。アイデアは次のとおりです。flex から一部のテキストを暗号化し、Web サービスから復号化します。Google の as3crypto ライブラリを使用しています。テキストを適切に暗号化/復号化しています。また、適切に暗号化/復号化するための Web サービス側のコードもあります。私の問題はそれらを同期することです-基本的に公開鍵をフレックスに共有し、秘密鍵をWebサービスに保持します。
私のフレックス「暗号化」関数は、テキスト暗号化を行うために RSA のモジュラスと指数を使用します。これらのモジュラスと指数の属性を Web サービスの RSACryptoServiceProvider から取得して、同じ標準を使用するにはどうすればよいですか。Web サービスから RSAKeyInfo.Modulus RSAKeyInfo.Exponent を試し、それらをフレックス クライアントに送りました。フレックスで暗号化を行った後、暗号テキストを取得し、それを Web サービスの復号化メソッドにフィードしましたが、「不良データ」エラー メッセージが表示されます。
両方が同じバイト 64 または 128 バイトの暗号化を使用していることを確認するにはどうすればよいですか。つまり、flex からの入力は、Web サービス RSACryptoServiceProvider の復号化メソッドによって期待されるものに適合する必要があります。(サイズが問題かもしれないと思いますが、そうではないかもしれません - 私は迷っています)
これがコードです。最初のフレックスクライアントに続いてWebサービスのC#コードです
また、Web サービス部分は次のとおりです。
この RSA セットアップが正しいかどうかはよくわかりません...どんなコメント/アドバイス/または推奨される解決策も歓迎します、ありがとう
implementation - 公開鍵暗号の理解とアルゴリズム実装のサイズに関する質問を確認する
公開鍵の暗号化について、次の例が基本的に正しい場合に質問があります。次に、私が KG1、EA1、および DA1 と呼ぶ 3 つのアルゴリズムの実装をどこで見つけることができるか、またそれぞれのコード行数について知りたいと思います。
Alice は、メッセージを安全に取得したいと考えています。彼女は、鍵生成アルゴリズム KG1 を使用して秘密鍵「C2A836B33FF1E」と公開鍵「35B1AC692」を作成し、公開鍵を世界に公開します。
ボブは、彼のメッセージ「HELLO FROM BOB」と公開鍵「35B1AC692」の入力を、文字列「DF1537532CB23B」を生成する暗号化アルゴリズム EA1 に入れ、この文字列をアリスに送信します。チャックもコピーを傍受します。
アリスには、文字列「DF1537532CB23B」と彼女の秘密鍵「C2A836B33FF1E」を入力として取り、出力「HELLO FROM BOB」を生成できる復号化アルゴリズム DA1 がありますが、チャックは秘密鍵「C2A836B33FF1E」を持っていないため、アリスにはできません。 「DF1537532CB23B」を「HELLO FROM BOB」に変換します。また、Chuck は KG1 アルゴリズムと公開鍵 "35B1AC692" を知っていますが、この情報を使用して秘密鍵に戻ることはできません。
java - 有効なデータが埋め込まれたデータの RSA 復号化が失敗する (BadPaddingException)
Java で RSA 暗号化/復号化を使用しているときに、非常に特殊な問題に直面しています。
コード例:
誰もがはっきりとわかるように、公開鍵を使用して平文を暗号化し、その後、秘密鍵を使用して暗号文を復号化します。
このコードは、次のメッセージでクラッシュします。
また、「RSA/ECB/NoPadding」を明示的に使用しようとしましたが、これはデコード期間に失敗します。(たとえば、デコードされた暗号文は元の平文と一致しません)。
最後になりましたが、PKCS1.5仕様で独自のPKCS1.5パディング関数を使用するときにこれを実行しようとしました:
EMB = 00 || 02 || RD || 00 || MD
EMB は長さ k のエンコードされたメッセージ ブロックです。RD
は 8 つのランダムな非ゼロ バイト
です。MD は最大長 k = 11 であり、EMB の長さ k を作成するためにオプションでゼロ バイトが埋め込まれます。
2 日間のテストを行った結果、Java の RSA アルゴに欠陥があるか、単に期待どおりに機能していないという結論しか得られません。
上記のコードが期待どおりに機能しない理由に完全に困惑しているため、上記のコードに対する提案や修正は大歓迎です。
php - PHPで長い文字列を暗号化する方法は?
PHPのopenssl_public_encrypt()を使用して、RSAを使用してデータを暗号化しています。ただし、特定のサイズを超えるデータは暗号化されません。
任意の長さのデータを暗号化するにはどうすればよいですか?
python - Python で RSA を使用してファイルを暗号化する
PyCryptoを使用して、RSAでファイル暗号化を実装しています。
PyCrypto RSA は 128 文字しか暗号化できないため、まず RSA が非常に遅く、次にファイルを 128 文字のチャンクに分解する必要があるため、多少間違っていることはわかっています。
これまでのコードは次のとおりです。
私の質問は次のとおりです。ファイルで秘密鍵/公開鍵の暗号化を使用するためのより良い方法はありますか?
Mcrypt と OpenSSL について聞いたことがありますが、ファイルを暗号化できるかどうかはわかりません。
cryptography - RSA プライベート指数決定
私の質問は RSA 署名についてです。
RSA 署名の場合:
暗号化 -> y = x^d mod n、復号化 -> x = y^e mod n
- x -> 元のメッセージ
- y -> 暗号化されたメッセージ
- n -> 係数 (1024 ビット)
- e -> 公開指数
- d -> プライベート指数
x、y、n、e を知っています。これらを知っていれば、d を決定できますか?
encryption - パスワードを保存せずに Python で RSA を使用してファイルを暗号化する
Encrypting a file with RSA in Python の投稿で同様の質問をしましたが、この質問には別の意味があります。
AESパスワードを暗号化するためにRSAを使用して、AESでファイルを暗号化しています。
唯一の違いは、AES パスワードを保存したくないということです。ユーザーは、RSA キーへのパスとパスワードの両方を指定する必要があります。
では、このスキームについてどう思いますか?
代わりに、ランダム パスワードを生成し、ランダム パスを使用して AES でファイルを暗号化し、RSA でランダム pwd を暗号化し、暗号化された結果のみを保存する場合の従来のスキームを使用します。
なぜこれが必要なのか本当に知りたいのなら、それは私のプロジェクトですhttp://code.google.com/p/scrambled-egg
スキームについてどう思いますか?前もって感謝します !
networking - 安全なネットワークプロトコルの設計を支援する
アプリには、ネットワークサーバーとクライアントがあります。ハンドシェイクの後、クライアントがを送信するとします"userId sessionId SOME_COMMAND param param param"
。
私はすでにクライアントを識別しており、それに応じてセッションIDがサーバー上でチェックされるため、IDはもはや問題ではありません。
しかし、ハッカーがメッセージを変更したり、たとえば送信するなどの誤ったメッセージを作成したりしないようにしたいと思います"userId sessionId SOME_COMMAND paramModified paramModified paramModified"
。
秘密/公開暗号化キーのペアを使用して、メッセージ自体でメッセージのハッシュを送信することを考えました。ただし、クライアントプログラムで自動化されているため、ハンドシェイク中に公開鍵を送信する必要がある場合があります。したがって、ハッカーはそれを取得して適切なハッシュを生成することができます。
複雑な暗号化シードやアルゴリズムを使用することもできますが、ハッカーの経験から、ハッカーは何でも逆コンパイルすることがわかりました。
つまり、サーバー上で実行されているすべてのものを非表示にすることはできますが、クライアントプログラム上で何も非表示にすることはできません。そして、クライアントプログラムが送信するはずのメッセージを変更することを禁止したいと思います。
それが可能かどうかさえわかりません。そして、私はどんな提案にもオープンです。ちなみに、私はJavaを使用していますが、あまり関連性がないはずです。ありがとう。
encryption - 対称鍵の交換
暗号化されたデータを Web サービスに送信する WinForms クライアントがあります。WinForms クライアントは Symmetric RijndaelManaged sessionKey を作成し、「ハードコードされた RSA 非対称公開鍵」も持っています。
EncryptedXml クラスを使用しているため、データを簡単にパッケージ化できます。
Web サービスには、秘密鍵と公開鍵の両方が「ハードコーディング」されており、SessionKey を正常に復号化し、それを使用して送信中の実際のデータを復号化できます。
これは、EncryptedData クラスによってほとんど自動的に処理されます。
私が抱えている問題は、返信したいときにWebサービス側で、送信されたSessionKeyを取得する方法がわからないことです。
Web サービス側で復号化を行う前に、暗号化されたセッション キーを確認できますが、XML を復号化すると、それはなくなります (したがって、応答用のセッション キーがありません)。
この暗号化されていないキーを取得する方法はありますか?