問題タブ [trusted-timestamp]
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.
python - Pythonを使用したタイムスタンプクエリ
次のコマンドで openssl のような .tsq ファイルを作成したい:
openssl ts <file>
-クエリ -データ -no_nonce -sha512 -out<out.tsq>
これをpythonで実装したいのですが、これを行う方法、モジュールなどを知っている人はいますか?
java - 有効なタイムスタンプを生成するには、CMSSignedData オブジェクトからどのデータを渡す必要がありますか?
有効な PKCS7 ファイルを CMSSignedData オブジェクトにロードしました。この PKCS7 ファイルには、プレーン テキスト メッセージと有効な添付デジタル署名が含まれています (すべて同じファイルに含まれています)。
今、このファイルにタイムスタンプを付けたいと思います。これは私が使用しているコードです(source):
有効な TimeStamp を取得でき、それを CMSSignedData オブジェクトに入れて、signedData.getEncoded() からのバイトをハードディスクに書き込むファイルに保存できます。しかし、サードパーティのソフトウェアを使用して新しいタイムスタンプ付きファイルを検証すると、このソフトウェアは元の署名は問題ないことを通知しますが、タイムスタンプは署名と一致しません。このソフトウェアは、元のプレーン テキスト メッセージを表示することもできます。
問題は次の行にあると思います。
ダミーのバイト配列の代わりにダイジェストを渡す必要があると思いますが、どのダイジェストか、タイムスタンプに必要な正しいバイトがわかりません。SignerInformation
からオブジェクトを正常に取得して検証できましたsignedData
。reqGen.generate()
次に、からのバイトを関数に渡そうとしましたmySignerInformation.getSignature()
。タイムスタンプの検証に失敗しました。その後、 の Sha1 ダイジェストに合格しましたmySignerInformation.getSignature()
が、タイムスタンプの検証に再び失敗しました。
RFC3161 仕様には次のように記載されています。
2.4.1. リクエスト形式
タイムスタンプ要求は次のとおりです。
TimeStampReq ::= SEQUENCE { version INTEGER { v1(1) }, messageImprint MessageImprint, -- ハッシュ アルゴリズム OID とデータのハッシュ値
(...)
messageImprint フィールドには、タイムスタンプを付けるデータのハッシュを含める必要があります。ハッシュは OCTET STRING として表されます。その
長さは、そのアルゴリズムのハッシュ値の長さと一致する必要があります
(たとえば、SHA-1 の場合は 20 バイト、MD5 の場合は 16 バイト)。MessageImprint ::= SEQUENCE { hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING }
しかし、CMSSignedData オブジェクト内のバイトをタイムスタンプしたい場合、MessageImprint データをどこでどのように取得するかはわかりません。
私はこのデジタル署名の初心者です。
visual-studio - 実行可能ファイルの署名がまだ有効なのはなぜですか?
vb.Net で記述され、.Net Framework 2.0 用の Windows 実行可能ファイルにコンパイルされたこの実行可能ファイルがあります。ソフトウェアのホワイトリストを使用して Windows クライアントで不明なソフトウェアを防止しているため、この実行可能ファイルは厳密な名前が付けられ、Visual Studio 2008 Professionalワークフローを使用して署名されています。
このために、企業ルート CA、各企業ブランチの中間 CA、およびこれらのそれぞれの下に発行 CA を実行します。「私の」Issuing CA は、数か月前に有効期限が切れた Codesigning Certificate を提供してくれました。
ワークフローでTrusted Timestamp (Authenticode)を使用したため、ファイル プロパティを介して署名を調べると、署名はまだ有効であり、ユーザーは Windows AppBlocker をトリガーせずに署名を実行できます。すべてが良いです。
現在、証明書が取り消されていると言われ、crl を確認することで確認できます。CA の管理によると、1 か月間は無効になっているはずですが、署名はまだ有効です。
私が信じているのは、crlで提供されている理由がこれを引き起こすということです。RFC 3161の §4 Bullet 1 によると:
TSA が使用されなくなったが、TSA 秘密鍵が危険にさらされていない場合、当局の証明書は失効する必要があります。TSA から取り消された証明書に関連する reasonCode 拡張が CRL エントリ拡張に存在する場合、未指定 (0)、affiliationChanged (3)、superseded (4)、または cessationOfOperation (5) のいずれかに設定する必要があります。その場合、対応するキーで署名されたトークンは無効と見なされますが、失効時刻より前に生成されたトークンは有効なままです。TSA から取り消された証明書に関連する reasonCode 拡張が CRL エントリ拡張に存在しない場合、対応するキーで署名されたすべてのトークンは無効と見なされる必要があります。そのため、reasonCode 拡張を使用することをお勧めします。
だから私の質問/問題は次のもので構成されています:
- RFC 3161 はコード署名証明書または TSA のみに適用されますか?
- はいの場合、理由 5 CessationOfOperation による失効前に作成された場合、署名は引き続き有効ですか?
- はいの場合、有効期限が切れた後に証明書が危険にさらされていることが判明した場合、別の理由を使用して証明書を再度取り消すことができますか? まだ何百もの有効な署名があるかもしれません!
itext - iText を使用して既存の PDF に TSA 署名を追加する
Adobe Reader を使用すると、PDF を (署名なしで) 開き、TSA プロバイダーによってタイムスタンプと署名を付けることができます。私は TSA タイムスタンプを使用して PDF に署名していません。実際には、PDF を歌ってタイムスタンプを付けているのは TSA プロバイダーです。
どうすればiTextで同じことができますか?
java - 証明書の有効期限が切れた後も Java Web Start アプリが動作し続けるかどうかを確認する方法
CA (Thawte) からのコード署名証明書を使用して Java Web Start アプリに署名しました。証明書の有効期限が切れた後も有効になるように、署名にはタイムスタンプが付けられます (-tca https://timestamp.geotrust.com/tsa引数を jarsigner ツールに渡します)。現在、証明書が有効な場合、アプリは完全に機能します。しかし、証明書の有効期限をシミュレートするために現地時間を進めようとすると、アプリは起動しません。次の例外が発生します。
この証明書は、2015 年 9 月 10 日から 2017 年 8 月 11 日まで有効です。
署名済みの JAR を jarsigner ツールで検証しようとしました。すべてのファイルにタイムスタンプがあるようです:
したがって、jarsigner の出力は正しいようです。これが署名にタイムスタンプがあることを本当に意味することを誰かが確認できますか?
現地時間を数 (3) 日前に変更すると、アプリが機能することに気付きました。しかし、それをさらに (週) 変更すると、例外が発生します。CA サーバーは、クライアントの現地時間が有効かどうかを確認しますか? そうであれば、証明書の有効期限をどのようにシミュレートできますか? ありがとうございました。
c# - リソースをロックし、ロック時間に従ってタイム スタンプを生成する
同期プロトコルで使用されるタイムスタンプを生成する同期プリミティブを実装したいとします。タイムスタンプは、リソースをロックするために使用される特定のキーの場合、2 つのスレッドが同じタイムスタンプ値を取得できないようなものです。
後者の仕様の可能な実装は次のとおりです。
2 つの API メソッドTryEnterOrThrowとGetTimeStampOrThrowは、不適切に記述されたコードがクリティカル セクションの原子性を壊すことを禁止するガード メソッドとしてクラスを消費することによって使用されることを意図していることに注意してください。後者のメソッドは、特定のキーに対して以前に取得したタイム スタンプ値も返します。タイム スタンプは、その所有者がクリティカル セクションを終了しないように長期間維持されます。
私は考えられるすべてのシナリオを頭の中で実行してきましたが、それを壊すことはできないようです-原子的にだけでなく、それを悪用しようとしても. 私の質問は、これは同期プリミティブを作成するための私の数少ない試みの 1 つであるため、このコードは誰にでもわかるものであり、アトミック性を提供しますか?
助けていただければ幸いです。