問題タブ [rfc3161]
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 - タイムスタンプの応答が正しくない - BouncyCastle
BouncyCastle を使用してhttp://timestamping.edelweb.fr/service/tspに接続し、タイムスタンプ (RFC 3161) を要求しようとしています。サーバーから TimestampResponse が返されますが、実際の日付がないようです。
これはコードです:
質問は次のとおりです: タイムスタンプに Bouncycastle のライブラリを使用していて、たまたまさまざまなステータス コードとその意味を知っている人はいますか? または、一般的に、これが機能しないように見える理由。
日付が表示されると予想されるこの行は、NullPointer をスローするだけです。
無料の RFC 3161 準拠のタイムスタンプ サーバーを他に知っている人はいますか?
コードを実行するには、ここからダウンロードできる bouncycastle jar が必要です。必要なもの: プロバイダー、メール、tsp。
ありがとう
security - タイムスタンプを使用してデータに安全に署名するにはどうすればよいですか?
安全なタイムスタンプを使用してデータベース内のレコードに署名し、その日付以降に誰も変更していないことを証明したいと思います。
どのような方法またはプロトコルを検討する必要がありますか?RFC 3161?そのサービスを提供すると主張している私が見つけたほとんどのウェブサイトは、私にはあまり評判が良くないようです。
あなた自身を転がすことは可能ですか?
python - Python でのタイムスタンプ サーバー rfc3161 応答トークンの生成
ツイストを使用して python に tsa サーバーを実装しようとしています。現在、私はopensslバイナリを使用して応答を生成していますが、これは私には醜いように思えます。そのため、m2cryptoで応答トークンを作成する方法を見つけようとしています。
助けてくれてありがとう!
マリス。
編集:
m2crypto で達成する方法?:
trusted-timestamp - 信頼できるタイムスタンプ - 形式を理解する (rfc3161)
[編集:すべてを詳細に説明するブログ投稿を書きました:ここを見てください]
やあ!
rfc3161 に基づいて、信頼できるタイムスタンプのサービスを必死に構築しようとしています。zeitstempel.dfn.deで無料の信頼できるタイムスタンプ サービスを使用することにしました。
私の質問は、有効な応答を受け取るためにこのサービスにどのように連絡するかです。リクエスト形式に関して、RFC は次のように述べています。
どこ
私を少し助けてくれたクライアントを見つけました。
それでも、タイムスタンプ サービスのリクエストをどのように作成すればよいかはまだわかりません。
よろしく!
c# - TimeStampResponse
Bouncy Castleを使用して.NETのタイムスタンプサーバーからの応答を読み取ります。クライアントにタイムスタンプサーバー証明書を表示したいのですが、応答からタイムスタンプサーバー証明書を読み取るにはどうすればよいですか?
前もって感謝します。
java - Java Implementation of time stamp protocol
We currently using openssl for timestamping. I wonder, is there a Java implementation of Time stamp protocol (RFC 3161).
git - RFC3161 (信頼できる) タイムスタンプを使用して、Git リポジトリのコミットの経過時間を証明するにはどうすればよいですか?
更新しました
これに使用しているスクリプトを StackExchange Code Review サイトに投稿しました。
これに対する私の最初の質問は、X.509 証明書とタイムスタンプを使用して Git コミットに署名できる方法はありますか? でした。. しばらくの間、信頼できるサードパーティによってタイムスタンプが付けられた X.509 証明書で署名したものしか取得できないと思っていました。これはそうではありません。X.509 証明書によるデジタル署名と信頼できるタイム スタンプは、相互に排他的です。これを反映するために質問を更新しました。
VonC が指摘したように、Git コミットに X.509 証明書で署名しても何の価値もありません。Git にはサポートが組み込まれているため、GPG キーを使用する方がはるかに優れたオプションです。
元の質問は少しあいまいでしたが、それが私が求めていたものに最も近いため、Greg の回答を受け入れました。Greg が指摘しているように、特定の時点でのコミット ハッシュを知っていることを証明できれば、その時点でのハッシュの対象となるリポジトリ コンテンツを知っていることが保証され、リポジトリに余分なデータを保存する必要はありません。タイムスタンプ データはどこにでも保存できます。
openssl
(v1.0.0+)を使用しcurl
て、コミット ハッシュの RFC3161 タイムスタンプを要求することができます。
タイムスタンプをリクエストする
これには少しの情報が必要です。
- URL - RFC3161 タイムスタンプ サービス
- REV - タイムスタンプが必要なリビジョン (ハッシュ)。完全なハッシュである必要があります。
上記は、署名されたタイムスタンプを に出力しstdout
ます。タイムスタンプ サービスが要求を拒否した場合にも、エラーが出力されることがあります。
タイムスタンプを確認する
これはタイムスタンプのリクエストと非常に似ていますが、以下も必要です。
- CAFILE - タイムスタンプ サービスからルート CA に戻る証明書チェーン
タイムスタンプ サービスは、信頼できる機関によって発行された証明書を使用してタイムスタンプに署名する必要があります。そうでない場合、タイムスタンプの信頼性は高くありません。適切な証明書チェーンが見つからない、または作成できない場合は、cacert.pem
発行元を使用してみてくださいcurl
。ここです。
以下のスニペットは、署名付きの既存のタイムスタンプ応答が に渡されることを前提としていstdin
ます。上記のリクエストを以下の検証コマンドに直接パイプできるはずです。リクエストからのレスポンスを変数に格納する場合、base64 でエンコード / デコードする必要がある場合があります ( man base64
)。
返信を調べると、リクエスト ダイジェストが使用された Git リビジョンと一致することがわかります。このコマンドを使用して、返信のプレーン テキスト バージョンを調べることができます。
これは、Git リビジョンを先頭に追加した返信の例です。
その他の注意事項
多くのタイム スタンプ サービスでは、スクリプト化された署名要求に遅延を追加するようユーザーに求めます。使用する予定のサービスで必要かどうかを確認してください。これを書いている時点で、私が使用している Comodo は、スクリプト化されたリクエストの間に 15 秒の遅延を要求します。Comodo を使用することを選択した唯一の理由は、コード署名証明書を購入したからです。
Git ノートは、署名付きのタイムスタンプの返信を保存するための当然の選択肢のように思えますが、投稿するための完全なソリューションはまだありません。私は現時点でこれにこだわっています。
私の元の質問と更新は以下のとおりです。
Git のコミットがいつ行われているか、およびリポジトリの履歴が書き換えられていないことを証明できるようにしたいと考えています。すべてのコミットである必要はありません。1日1回でも週1回でも十分です。そうするための推奨される方法はありますか?
GPG キーで Git コミットに署名できることはわかっていますが、X.509 証明書とhttp://timestamp.comodocaのようなオンライン タイムスタンプ サービスを使用してコミットに署名できる方法があるかどうか疑問に思っています。 .com/rfc3161。
そうでない場合、現在のリビジョンをgit rev-parse --verify HEAD
1 日 1 回テキスト ファイルにダンプし、そのファイルに署名し、コミットするだけで、コードがいつ書かれたかを (大まかに) 証明できますか?
明確にするために追加された情報
Git がリポジトリの完全性を保証していることは知っていますが、私が理解している限りでは、もし私がリポジトリを管理しているとしたら、サード パーティは、私がリポジトリの履歴を書き直したり、時計を遅らせたりしていないことを信頼しなければなりません。私のコードが実際よりも古いことを「証明」するためだけに、完全に偽のリポジトリを作成しましたか? また、リポジトリを公開したくありません。
これは、私がやりたいことをよりよく理解できる架空の使用例です。
いくつかのコードをオンラインで公開しています。1 年後、誰かが同じコードを本や記事にコピーして公開し、私がそれらをコピーしたと主張します。その時点で、私は自分のレポジトリを取得して、再公開される前に、そのコードを 1 年前にコミットしたことを証明したいと考えています。
X.509 証明書とタイムスタンプ サービスを使用することで、署名がいつ行われたかを証明できます。1 年前のコミットのハッシュを知っていることを証明できる限り、Git はアーカイブの整合性を保証します。
または、GPG キーを使用してコミットに署名する方法はありますが、タイムスタンプが検証されていますか? X.509 証明書で利用できるものと同様のタイムスタンプ サービスを提供する信頼できるサード パーティはありますか?
GPG キーと X.509 証明書の組み合わせを使用できるかもしれません。(公開) GPG キーのコピーをリポジトリに保持していると仮定すると、毎日の終わりに次の作業を行った場合、次のように動作しますか?
- X.509 証明書とオンライン タイムスタンプ サービスを使用して、(公開) GPG キーに署名します。
- (プライベート) GPG キーからの署名を使用して、変更をリポジトリにコミットします。
digital-signature - RFC 3161 の信頼できるタイムスタンプを確認する
ビルド プロセスに、RFC-3161 準拠の TSA からのタイムスタンプを含めたいと考えています。実行時に、コードはこのタイムスタンプを検証しますが、できればサードパーティ ライブラリの支援は必要ありません。(これは .NET アプリケーションなので、標準のハッシュおよび非対称暗号化機能を自由に使用できます。)
ASN.1 や X.690 などに依存する RFC 3161 の実装は簡単ではありません。そのため、少なくとも今のところ、Bouncy Castle を使用して TimeStampReq (要求) を生成し、TimeStampResp (応答) を解析しています。応答を検証する方法がよくわかりません。
これまでのところ、署名自体、公開証明書、タイムスタンプが作成された時刻、および送信したメッセージ インプリント ダイジェストと nonce (ビルド時の検証用) を抽出する方法を理解しました。私が理解できないのは、このデータをまとめて、ハッシュされ署名されたデータを生成する方法です。
これが私がやっていることと私がやろうとしていることの大まかな考えです。これはテスト コードなので、いくつかのショートカットを使用しています。うまくいくものを手に入れたら、いくつかのことを片付けて、正しい方法で行う必要があります。
ビルド時のタイムスタンプ生成:
実行時のタイムスタンプ検証 (クライアント サイト):
ご想像のとおり、私が行き詰っていると思うのはMagicallyCombineThisStuff
関数です。
pdf - Bouncy Castle を使用して RFC 3161 タイムスタンプを作成する方法
X509証明書(もちろん秘密鍵を含む)とRFC 3161に基づいて独自のPDFタイムスタンプメカニズムを実装する必要があります。私はGoogleで検索してここでSOについて質問しました。適切な解決策は、TSAClientクラスを再実装してローカルでタイムスタンプを行うことです。 (オンライン TSA なし)。ただし、SecureBlackbox コンポーネントを除いて、RFC 3161 の実装は見つかりませんでした。Bouncy Castle ライブラリを使用すれば可能ですが、方法がわかりません。
正しい方向を教えてください。