私は電子署名をする必要がある何かを書いています。
一部のユーザーは私のようなオタクであり、すでに独自のPGPキーを持っています。ほとんどの人はそうしないでしょうし、とにかくそれをインストールしたり維持したりすることに夢中になりたくないでしょう。
回避策として、次のことを実行したいと思います。
- 別の「署名」パスワードを使用するユーザーの公開/秘密キーペアを作成します。
- ユーザーが何かに署名する必要がある場合は、タイムスタンプやその他の参照などの情報とともにプレーンテキストをユーザーに提供し、保存した秘密鍵を使用して署名してもらいます。
これを行うには、基本的に2つの方法があります(独自のPGPキーを持っていないユーザーの場合)。
- ユーザーはSSLを介して署名パスワードを私に送信します。秘密鍵ペアサーバー側を生成し、署名が必要になったときに秘密鍵のロックを一時的に解除します。パスワードはまったく保存せず、ロック解除された秘密鍵をできるだけ早く削除します。
- ユーザーはJavascriptでpub/privキーを生成します。彼らは私に公開鍵と暗号化された秘密鍵を送り、ローカルストレージにコピーを保存します。彼らが何かに署名する必要があるとき、私は彼らのローカルストレージがそれを持っていることを確認します(そしてそうでない場合はプッシュします)、彼らはJSを使用してローカルでテキストを復号化して署名します。彼らの署名パスワードもロック解除された秘密鍵も見たことがありません。
いずれにせよ、サーバーのキーを使用して結果に署名します。しかし、ユーザーがテキストに署名するための、ユーザー独自の、再現性のない方法が必要です。私が維持しているPGPキーをユーザーに持たせるのが、最も簡単な方法です。
オプション1は非常に簡単で、私の最小限のニーズを満たすのに十分に機能します。
オプション2はもう少し信頼できます。つまり、JSを破壊しない限り(これはまだ可能です)、自分でそれらのプライベートキーを使用することはできません。
ただし、それを行うには、次のことができるJavaScriptライブラリが必要です。
- pub/privキーペアを生成します
- 使用する秘密鍵を復号化する
- その秘密鍵でテキストのブロックに署名します
どの図書館がこれを行うことができますか?
PS特定の公開鍵に暗号化する必要はないことに注意してください。ユーザーが自分の(保存時に暗号化された)キーで署名する必要があります。