4

私は電子署名をする必要がある何かを書いています。

一部のユーザーは私のようなオタクであり、すでに独自のPGPキーを持っています。ほとんどの人はそうしないでしょうし、とにかくそれをインストールしたり維持したりすることに夢中になりたくないでしょう。

回避策として、次のことを実行したいと思います。

  1. 別の「署名」パスワードを使用するユーザーの公開/秘密キーペアを作成します。
  2. ユーザーが何かに署名する必要がある場合は、タイムスタンプやその他の参照などの情報とともにプレーンテキストをユーザーに提供し、保存した秘密鍵を使用して署名してもらいます。

これを行うには、基本的に2つの方法があります(独自のPGPキーを持っていないユーザーの場合)。

  1. ユーザーはSSLを介して署名パスワードを私に送信します。秘密鍵ペアサーバー側を生成し、署名が必要になったときに秘密鍵のロックを一時的に解除します。パスワードはまったく保存せず、ロック解除された秘密鍵をできるだけ早く削除します。
  2. ユーザーはJavascriptでpub/privキーを生成します。彼らは私に公開鍵と暗号化された秘密鍵を送り、ローカルストレージにコピーを保存します。彼らが何かに署名する必要があるとき、私は彼らのローカルストレージがそれを持っていることを確認します(そしてそうでない場合はプッシュします)、彼らはJSを使用してローカルでテキストを復号化して署名します。彼らの署名パスワードもロック解除された秘密鍵も見たことがありません。

いずれにせよ、サーバーのキーを使用して結果に署名します。しかし、ユーザーがテキストに署名するための、ユーザー独自の、再現性のない方法が必要です。私が維持しているPGPキーをユーザーに持たせるのが、最も簡単な方法です。

オプション1は非常に簡単で、私の最小限のニーズを満たすのに十分に機能します。

オプション2はもう少し信頼できます。つまり、JSを破壊しない限り(これはまだ可能です)、自分でそれらのプライベートキーを使用することはできません。

ただし、それを行うには、次のことができるJavaScriptライブラリが必要です。

  1. pub/privキーペアを生成します
  2. 使用する秘密鍵を復号化する
  3. その秘密鍵でテキストのブロックに署名します

どの図書館がこれを行うことができますか?

PS特定の公開鍵に暗号化する必要はないことに注意してください。ユーザーが自分の(保存時に暗号化された)キーで署名する必要があります。

4

3 に答える 3

4

http://openpgpjs.orgをご覧ください-探している機能のほとんどが実装されているはずです。

于 2013-01-14T06:28:46.317 に答える
1

まず、この記事を読んでください: http://www.matasano.com/articles/javascript-cryptography/

JavaScript暗号化があなたのやっていることにとって良い考えであるとまだ確信している場合は、次のようにします。

PGP はかなり複雑で、その機能の 95% は必要ありません。代わりに、署名に Ed25519 を使用することを検討することをお勧めします。JavaScript バージョンは http://www.flownet.com/ron/code/ed25519で入手できます。 .js . これは楕円曲線ベースのシステムであり、RSA よりも大幅に高速であり、同等のセキュリティとはるかに小さなキーを備えています。実際、キーは非常に小さいため、ユーザーに「署名パスフレーズ」を選択させ、ユーザー ID をソルトとして scrypt[1] にフィードし、出力を秘密キーとして使用できます (必要なのは、有効な Ed25519 秘密鍵にするために 3 ビットをフロブします)。

  1. https://github.com/cheongwy/node-scrypt-js
于 2012-05-18T04:12:57.113 に答える
1

あなたの記事は間違ったことを主張していると思います。たとえば、 math.RND() が上書きされるのを防ぐ方法はありませんが、簡単に実行できます-ファイルの上にインラインjsを含むhtmlファイルを書き込みます。そのコードでは、openpgp.js が依存するすべてのオブジェクトをフリーズします。

Object.freeze()

安全な環境を構築できます。確かに!index.html を ssl で転送し、重要なものをフリーズし、他の js ファイルがロードされないようにし、他のサーバーへの接続が許可されていないことを確認します。

于 2013-08-19T17:30:56.480 に答える