問題タブ [dsa]
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.
java - jar ファイルのコードを使用する際の問題
次のコードを実行します。
}
メイン関数は次のようになります。
Eclipse内から実行するとすべてうまくいきますが(出力は「true」です)、jarにパックして(メイン関数なしで)実行すると、出力はfalseになります。
これは私がキーをロードする方法です:
確認したところ、キーのロードは正常に機能します。
何か案が ?
security - デジタル署名と DH 経由のキーを使用した HMAC の比較
暗号を多用するアプリケーションを作成しています。ほとんどのネットワーク化されたアプリケーションと同様に、私のものはデータをさまざまな種類のメッセージ (インスタント メッセージ、ファイル チャンク、ビデオ フレームなど) に分割し、改ざん防止と正しい発信元の両方について、それぞれの信頼性をチェックする必要があります。これまでのところ、ECDH を使用して、AES で既に使用している共有シークレットをネゴシエートできます。もちろん、同じ共有シークレットを後で使用できます。
私の質問は次のとおりです。この場合、ECDH によって HMAC で確立された共有秘密を単に使用するのではなく、各メッセージに署名するために ECDSA を使用することに追加の利点はありますか?
以下で M と言う場合、暗号化されたメッセージまたは平文のいずれかを意味します。それは問題ではありません。以下のエラーを修正してください。
ECDSA (または DSA) では、通常M
、安全なハッシュ アルゴリズム (私は現在 SHA-2 の 1 つを使用しています) を使用してメッセージ ( ) をハッシュし、署名者の秘密鍵を使用してH(M)
暗号化することを理解しています。H(M)
これによりR
、S
整数 (署名) が生成されます。次に、M、R、および S が、送信者の公開鍵を既に所有している受信者に送信されます。 が計算され、 と を使用しH'(M)
て署名が検証されます。BouncyCastle は、これを実装するものを提供します。R
S
ECDSASigner
HMAC では、私が持っている共有シークレットが必要です。次に:
HMAC(K, M) := H( f2(K) || H(f1(K) || M) )
(訂正していただきありがとうございます、Paŭlo Ebermann。詳細については、彼の回答を参照してください。)
では、DH/ECDH が共有シークレットを安全にネゴシエートすることを考えると、HMAC を使用してはいけない理由はありますか?
関連: なぜNSAは、MAC ではなく DSA の標準アルゴリズムを指定するのですか? SHA-2 + AES にできるという理由だけで?
ここでは速度が重要です。現在作成しているこの 1 つのプロトコルで、現在のテキスト メッセージだけでなく、近い将来、大きなファイルやビデオ フレームもサポートするようにしたいからです。したがって、私は HMAC を使用することを好みますが、上記の目標を確実に達成できるようにしたいと考えています。
ご協力いただきありがとうございます!
c - OpenSSL を使用した DSA 署名
OpenSSL から DSA を使用して署名しようとしています。公開鍵と秘密鍵を含むファイルがあります。
まず、ユニキャスト接続を行い、すべて問題ありません。その後、マルチキャスト UDP 接続が必要になり、パケットに署名したいと考えています。証明書から公開鍵をロードするために関数を使用しようとしていますが、機能PEM_read_DSA_PUBKEY()
しません。NULL
DSA 構造体の代わりに常に戻ります。
ここにコードの単純化されたバージョンがあります。私は次のようにコンパイルします:
何か案が?ありがとうございました!
java - 暗号化ライブラリを使用せずにJavaでDSAを実装する際の問題
こんにちは私は非常に奇妙な問題を抱えています、そして多分あなたの何人かは私を助けることができます。JavaでDSA署名アルゴリズムを実装していますが、java.securityからSHA-1ハッシュ関数を生成する以外は、既存のライブラリを使用してこれを行うことはできません。私のコードは必要な番号をそれぞれ生成していますが、署名の検証に問題があります。これが私のコードです:
私はgenerateR()およびgenerateS(BigInteger r、byte [] data)関数を使用してRとSを生成しています。データは、バイトに変換されたメッセージのテキストです。そして、まったく同じバイト配列を送信し、関数を検証するためにSとRを生成すると、falseが返されます。RとVは同一ではありませんが、同一である必要があります。私が間違っていること:)?? 私はこのc#コードを例として使用していました: http ://www.koders.com/csharp/fidE9EF01A91C00DF066F023DD2EECA23856B922537.aspx?s = mdef%3Afile and description at Wikipedia http://en.wikipedia.org/wiki/Digital_Signature_AlgorithmKを生成する関数:
p>algorithm - デジタル署名はどのようにフォーマットすればよいですか?
DSA デジタル署名アルゴリズムの実装に取り組んでいます。アルゴリズム自体は理解していますが、よく理解していないことの 1 つは、メッセージが署名された後にどのように見えるべきかということです。
たとえば、署名して他の人に送信したいテキスト ファイルがあります。署名を検証するために生成されたキーをどこに配置すればよいですか? また、このメッセージを解析して署名を検証するにはどうすればよいですか?
java - SHAハッシュ関数は負の出力を提供します
DSA署名アルゴリズムを実装しようとしていますが、問題が発生し続けています。私はjava.security
MessageDigest
クラスを使用しています。コードは次のとおりです。
テキストはランダムな文字列オブジェクトです。問題は、このコードがハッシュの負の値を与えることです。これはアルゴリズムによって受け入れられません。私は何か間違ったことをしていますか?前もって感謝します。
PSちなみに、BigIntegersを使用せずにDSAを実装しようとしましたが、これは可能ですか?LとNの値が1024と160未満であることがわからないため、どの値を使用する必要があり、どのハッシュ関数を使用する必要があるのかわかりません。これらの質問に対する答えを聞いて非常に感謝します。
cryptography - EC 公開鍵の標準化された固定長エンコーディングはありますか?
素体 (192, 224, 256 、384および521)。
c++ - C ++で決定論的スタックオートマトン(DAS)をシミュレートする
決定論的なスタックオートマトンをシミュレートする必要があるUVAの演習を読んで、特定の文字列が次の形式の特定のエントリでDSAによって受け入れられるかどうかを確認しました。
入力の最初の行は、テストケースの数を示す整数Cになります。各テストケースの最初の行には、5つの整数E、T、F、S、およびCが含まれています。ここで、Eはオートマトンの状態の数、Tは遷移の数、Fは最終状態の数、Sは初期状態、 Cそれぞれテスト文字列の数。次の行には、オートマトンの最終状態を表すF個の整数が含まれます。次に、それぞれ2つの整数IとJ、および3つの文字列L、T、Aを持つT行が表示されます。ここで、IとJ(0≤I、J <E)は、それぞれ遷移状態の起点と終点を表します。Lは、テープからトランジションに読み取られた文字を表します。Tはスタックの一番上にあるシンボルを表し、Aはこの遷移の終わりにスタックの一番上で実行するアクションを表します(パイルの一番下を表すために使用される文字は常にZです。文字列、または遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。または、遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。または、遷移文字のスタックの最上位を考慮しないアクションをアンスタックします£)。スタックのアルファベットは大文字になります。チェーンAの場合、シンボルは右から左にスタックされます(プログラムJFlapと同じ方法で、つまり、スタックの新しい一番上が左側の文字になります)。次に、それぞれに入力文字列が含まれるC行が表示されます。入力文字列には小文字と数字を含めることができます(必ずしもトランジションに存在する必要はありません)。
各テストケースの最初の行の出力には、次の文字列「Case G:」が表示されている必要があります。ここで、Gはテストケースの数(1から始まります)を表します。次に、オートマトンが文字列を受け入れる場合は「OK」、それ以外の場合は「拒否」という単語を印刷するC行。
例えば:
これは出力です:
助けが必要です。または、このDSAをシミュレートする方法についてのアイデアが必要です。自分でコードを作成したいので、問題を解決するコードを求めていません(アイデアは正しく学習することですか??)が、助けが必要です。 (いくつかのアイデアまたは擬似コード)実装を開始します。