問題タブ [digital-signature]
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 - java.security.SignatureとMessageDigestおよびCipherでのSHA1とRSAの使用
Javajava.security.Signatureクラスが何をするのかを理解しようとしています。SHA1メッセージダイジェストを計算し、RSAを使用してそのダイジェストを暗号化すると、Signatureクラスに同じものに署名するように要求した場合とは異なる結果が得られます。
結果(例):
入力データ:これは署名されているメッセージです
ダイジェスト:62b0a9ef15461c82766fb5bdaae9edbe4ac2e067
暗号文:057dc0d2f7f54acc95d3cf5cba9f944619394711003bdd12 ...
署名:7177c74bbbb871cc0af92e30d2808ebae146f25d3
私はSignatureが何をしているのかについて根本的な誤解を持っている必要があります-私はそれをトレースしました、そしてそれは私が期待するようにアルゴリズムがSHA1に設定されたMessageDigestオブジェクトでupdateを呼び出しているようです、そしてダイジェストを取得し、そして暗号化。結果が異なる理由は何ですか?
編集:
Leonidasは、署名スキームが私が思うことを実行することになっているのかどうかを確認させてくれました。RFCで定義されている署名には2つのタイプがあります。
これらの最初のもの(PKCS1)は、私が上で説明したものです。ハッシュ関数を使用してダイジェストを作成し、結果を秘密鍵で暗号化します。
2番目のアルゴリズムはランダムなソルト値を使用し、より安全ですが決定論的ではありません。上記のコードから生成された署名は、同じキーを繰り返し使用しても変更されないため、PSSではないと思います。
編集:
これが私が使っていたbytes2string
方法です:
html - Adobe LiveCycle HTMLフォームにデジタル署名することは可能ですか?
Adobe LiveCycle HTMLフォームにデジタル署名することは可能ですか?
IBM Lotus Formsを使用すると、ActiveXコントロールを使用してHTMLとしてレンダリングされたフォームに署名できることを知っています。
c# - CAPICOM - SignedCode が UI なしで信頼できる発行元からのものであることを確認する
.NET 3.0 C# アプリで CAPICOM を使用して、exe ファイルの Authenticode 署名を確認しています。証明書が信頼できる発行元としてリストされていることを確認する必要があります。を使用signedCode.Verify(true)
すると、証明書がまだ信頼されていない場合にダイアログが表示されるため、ユーザーは信頼するかどうかを選択できます。ただし、signedCode.Verify(false)
信頼できる発行元からのものでなくても署名を検証しています。おそらく、これは証明書が有効であることを確認しているだけです。
UI を使用せずに、ファイルの署名が有効で信頼できる証明書からのものであることを確認するにはどうすればよいですか?
asp.net-mvc - メッセージの整合性の維持
中間者攻撃の対象となる自分自身に渡すメッセージがあります。そのため、メッセージを送信してから受信するまでの間、メッセージの完全性が維持されていることに懸念を抱いています。
メッセージを自分自身に送信すると、送信されたメッセージに関する情報は今後利用できないと想定する必要があります。メッセージは完全に自己完結型です。
そのためには、メッセージの内容をハッシュし、メッセージを送信する前にハッシュを比較する必要があることを知っています。メッセージを送信した後、それらが異なる場合、メッセージは改ざんされています。
もちろん、中間者が、ハッシュが実際にはそのままのメッセージ コンテンツの単なるハッシュであることを知っている場合、メッセージは自己完結型であるため、新しいコンテンツを作成して同じハッシュを適用するだけで済みます。内容にアルゴリズム。
問題は、ハッシュを生成するときにメッセージの内容をランダム化するには、どのくらいの長さまで行くべきかということです。収益が減少するポイントに到達するのはいつですか。
このシナリオでは、一連のキーと値のペアがあります。そのために、私が取らなければならないことがわかっている手順は次のとおりです。
- メッセージにソルトを追加します。塩は世界の秘密です。ハッシュする前に、メッセージの内容に添付されます。
- ハッシュを生成する前に、一貫した方法でキーと値のペアを並べ替えます。
- 直接関係はありませんが、リプレイ攻撃を防ぐために、ハッシュする前に各メッセージの内容にタイムスタンプが追加されます。
これらは、私が検討しているオプションの手順です。
- 注文する前にキーを変換します。それらを逆にしてから、カウント/キーで注文することを検討しました。
- キー/値のペアを区切るセパレーターをいじる(キー/値のセパレーターとペアのセパレーターの両方)。
ノート
ここではメッセージのプライバシーは必須ではないため、暗号化は必要ありません。値は平文で送信する必要があります。
最後に、避けるべきハッシュ アルゴリズムは何ですか?
仕様
入力の検証と永続化を処理するコントローラーがある ASP.NET MVC サイトがあります。
(ヒューリスティックに基づいて、どれが重要ではない) 入力が自動化されたスパムの試みであると判断された場合IDictionary<string, string>
、入力値を使用して のモデルが作成され、ViewResult が一般的な CAPTCHA ページに送信されます。
そのビューでは、CAPTCHA コントロールを含むフォームで、の内容がIDictionary<string, string>
非表示の入力フィールドに書き出され、フォームのアクションはコンテンツが最初に投稿されたときと同じアクションになります。このようにして、MVC はフォームが再送信されたときに値を取得できます。
このため、キーと値のペアを暗号化できません (または、理由と方法を教えてください!)。
もちろん、ハッシュ化されたメッセージの内容を含むもう 1 つの値を追加する必要があります。その値が存在する場合、コントローラーはメッセージの整合性が維持されていることを確認し、維持されている場合は入力を永続化できるようにします。
解決
System.Security.Cyrptography.Pkcs 名前空間の SignedCms クラスを使用することにしました。これは、CMS/PKCS #7 メッセージの署名と検証を表します。
詳しく説明すると、MAKECERT.EXE を使用して自己発行の証明書を作成し、コードで次の例を使用してデータにデジタル署名します。
http://blogs.msdn.com/shawnfa/archive/2006/02/27/539990.aspx
ここで、エクスポートされた秘密鍵のパスワードとサーバーのセキュリティを安全に保つことが問題になるはずです。これにより、プログラミングは少なくなります。
リプレイ攻撃用のタイムスタンプ用のキーを追加する必要がありますが、それほど難しくはありません。
答えはKaliumにあり、彼の最初の投稿ではなく、デジタル署名への道を示した彼のフォローアップ コメントと、最終的に .NET でそれらを利用する方法の発見です。
貢献してくれたすべての人に感謝します。
java - ファイルの署名と暗号化のためのクライアント/サーバー ソリューション
ファイルの暗号化と署名を実行するソリューションを探しています。これはクライアント側で行われ、署名チェックと復号化はサーバー側で行われます。
いくつかの詳細:
- これは、あらゆる種類のファイルで機能するはずです (署名は、PDF のようにファイル内ではなく、ファイルに「添付」する必要があります)。
- 少なくともサーバー側は Java ベースである必要があります (クライアントは Java アプレットである可能性があります)。
編集:ここでは、クライアントの部分が実際に大きな問題です。サーバー側は既存のライブラリで実装できますが、クライアントは既存のアプリケーションである必要があります (商用であっても)。
php - デジタル署名付きの PDF を生成
デジタル署名付きの PHP で PDF ファイルを生成することは可能ですか? オープンソース ソリューションが推奨されます。
printing - X.509デジタル署名が印刷されました
取引結果に署名するためにデジタル証明書を使用しています。また、情報とデジタル署名が記載された伝票を印刷する必要があります。
印刷メディア用に特別に設計されたX.509デジタル署名の短い表現があるかどうか疑問に思いましたか?多分ある種のハッシュかそれに似たもの...
どうもありがとうございます!
.net - 相互運用アセンブリに署名する必要がありますか?
VC++ で開発された一連の COM コンポーネントがあります。このようなコンポーネントへの参照が .NET プロジェクトに追加されると、Visual Studio は相互運用アセンブリを生成します。現在、そのようなアセンブリのセットがあります。
毎日のビルドを実行している間、生成されたすべてのバイナリにデジタル署名を付けます。私たちは作成者であるとは考えていないため、相互運用アセンブリは署名されていません。誰でも Visual Studio を使用して同じアセンブリを作成できます。
相互運用アセンブリにも署名する必要がありますか? また、厳密な名前 (sn.exe ユーティリティ) で署名する必要がありますか? そうする理由は何ですか?
authentication - デジタル署名に基づくログインシステムは良い考えでしょうか?
OpenIDの目標の1つは、1つの企業の障害に耐えることです。これは良さそうに聞こえますが、別の問題があります。IDがホストされているサイトがダウンすると、IDもダウンします。完全に故障に強いログインシステムが必要だと思いました。
私の考えはこのようなものです:私はウェブサイトに行き、ログインしなければなりません。私は彼らに私の公開鍵を渡します。ウェブサイトは私にいくつかのランダムなデータを送り返します。私はこのデータに秘密鍵で署名し、それらに送り返します。署名が有効な場合、ログインします。これには、IDが単なる公開鍵であるという利点があるため、外部サイトに依存しません。
ユーザーがキーを覚える必要がないようにするために、システムはオプションでOpenIDのようなシステムを許可することもできます。このシステムでは、キーがサーバーでホストされ、元のサイトがログインにリダイレクトし、そのサイトがデータに署名します。この方法はOpenIDと同様に機能しますが、キーをバックアップできるため、そのサイトがダウンした場合でも別のサイトを使用できます。
これは実用的なシステムですか?時間を無駄にしているだけですか?車輪の再発明をして、OpenIDだけを使用するべきではありませんか?
c# - 秘密鍵を使用して PHP にデジタル署名し、C# で検証する
PHP で短い文字列にデジタル署名し、C# で文字列の署名を検証する必要がある機能に取り組んでいます。
その単純さから、PHP でopenssl_signを使用したいと思っていますが、Google で見つけることができるすべての情報は、これが機能しないことを示しています。
これをうまく行うと主張する外部ライブラリがいくつかありますが、これは趣味のプロジェクトであるため、そのようなライブラリは購入したくありません。
では、ここでの代替手段は何ですか?C# と PHP の間の完全な相互運用性が必要です。OpenSSL 以外のライブラリも使用できます。