質問:
動機
安全なオンライン投票システムが欲しい
"セキュリティ"
ここでの「安全」とは、「少なくとも現在の投票方法と同じくらい安全」を意味し、「完全にすべての可能な攻撃に対して安全」ではなく、メールによる投票を含みます。ただし、攻撃を軽減できるとよいでしょう。 TOTP IDカードが盗まれた(そしてその署名が取り消された)場合、どちらの投票かを知らなくてもその投票を無効にできるとよいでしょう。
この質問の目的のために、一般的なウェブサイトのセキュリティ、トランスポートのセキュリティ、政府がこのような認証サーバーを実行することを信頼しているか、一意のIDを持っているか、誰かがあなたのIDカードを盗んでパスワードを知ることができるかどうかなどの問題に脱線しないでください、など、この問題に固有ではありません。
ここでの私の焦点は暗号化の質問です:仲介者(など)に投票を開示せずに、認証のみを信頼するサーバーによって認証された投票のZKPを取得できますか、そしてwithout =クライアント側の暗号化が必要(暗号チップIDまたはユーザー管理のPGPキーなど)。
背景
認証サーバー
次のような政府が運営するサーバーがあるとします。
OpenID ish APIがあり、第三者がリクエストできるようになっています。また、次の情報のサブセットを選択的に承認できます。
そのようなすべての応答には、署名に使用されたTOTPカードの(サイト固有の)ハッシュも含まれます(盗まれたIDで行われた認証を遡及的に無効にするため)。
この場合も、この情報の任意のサブセットを承認できることに注意してください。例えば必要な場合は、サイト固有のハッシュと投票資格情報の開示のみを承認できます。これにより、サードパーティに「地区XYZでの投票が許可された一意の人間」という最小限の情報のみが提供されます。
サードパーティが政府サーバーにblob(テキストまたはバイナリ。ハッシュの場合もある)を提供し、署名を要求するためのAPIがあります。
提供されたblob(サーバーによって表示されます)に署名するときは、上記の情報のいずれかと、オプションのタイムスタンプを署名の一部として承認することができます。
署名自体は、任意の数のメソッドを使用できます。
最も簡単なIMHOは、政府が管理するPGPシステムです。政府は、所定のIDカードに関連付けられた署名キーを所有し、そのキーを取り消したり、認証した政府機関のキーを使用してそのキーに署名したりできます。
その後、サーバーは(関連付けられたキーまたは独自のキー([IDを公開していない場合]のいずれかを使用して)に署名します(a)blobと(b)その署名に関連付けるために選択した情報(標準化されたフォーマット)。
信頼
このサーバーが信頼されていると仮定のみ誰かの法的情報(または人間の一意性)の認証、および政府関連の問題(投票権など)に対する承認を提供します。
notこのサーバーを信頼して、ユーザーに何を署名してほしいかを知ってもらう必要があります。例えば。サーバーに契約の安全なハッシュのみを与えることにより、私的な契約に署名するために使用できます。その後、ユーザーはハッシュに署名し、それによって契約を署名します。政府に契約を開示したり、第三者に必要以上の情報を開示したりする必要はありません。
ZKP投票
最後に、 ゼロ知識証明ベースの投票システム が必要であるとします。
私はZKP自体以外のプロトコルの提案を受け入れるつもりです。私が気にしているのは、単に上記の機能セットであり、ZKP(たとえば Helios Voting によって実装されている)は、私が知っている唯一の方法で、それらを満たしています。
問題は、私が見たすべての安全な投票方法がクライアント側の暗号(クライアント管理のPGPまたは暗号チップIDのいずれか)に依存していることです。これは、通常のユーザーが使用するためにロールアウトすることはできません。誰もが使えるもので十分安全なものが欲しい。
ゼロ知識証明 は、ある当事者(prover)が別の当事者(verifier)を説得できる「ステートメント」の証明です。 )追加の情報を開示することなく、ステートメントが真であること。 Helios投票では、プロトコルは 準同型暗号 を使用します。簡単な説明は次のとおりです。
(Helios Votingは実際には、加算ではなく乗算の準同型であるElGamalを使用しますが、この答えには関係ありません。)
ここではZKPを使用して、有権者が実際に0または1を暗号化したことを示していますnot別の整数値。実際、不正行為を行うユーザーは、「40回投票する」ために、たとえば40を暗号化しようとする可能性があります。有権者は、暗号化された投票が0または1であることを証明する必要がありますが、実際の投票は開示しません。つまり、ゼロ知識証明supportクライアント側の暗号化です。 ZKPはクライアント側の「暗号」ではありません。これは、必然的にクライアント側で発生する余分な数学であり、クライアント側の暗号化にのみ関連しています。これは、クライアント側の暗号化が不要な場合、ZKPが主な問題ではないことを意味します。 投票暗号化です。
「クライアント側の暗号化」(クライアントシステムと一部のサーバー間のSSLトンネル、つまり単なるトランスポートを除く)が不要な場合、発生する必要のある暗号化はすべてサーバーで発生する必要があります。これは、クライアントが話しているサーバーが必要に応じてユーザーの投票の価値を知ることを意味します。これはしばしば投票システムの問題と考えられています。投票システムにしばしば必要とされる特性の1つは、投票者自身以外の誰も投票者の投票を知ることができないということです。
ただし、technicallyでユーザーの投票を学習できるサーバーがある可能性があることを許容する準備ができている場合は、そうしないでください(つまりtrusted servers)。問題は解決されました。必要なのは、有権者がこれらのサーバーのいずれかで認証する方法を持っていること(TOTPはそのために便利です)であり、サーバーに必要なすべての暗号化マジックを実行させます。
信頼できるサーバーがなく、クライアント側の暗号化もない場合は、遠くまで行けません。信頼されたサーバーがないと、投票値が有権者のコンピューターに「そのまま」存在することを許容できません。ただし、クライアント側の暗号化を使用しない場合、投票値は、接続の反対側にいる誰もがすぐに読み取ることができるプレーンな値を除いて、投票者のコンピューターを終了できません。
TOTP isクライアント側の暗号化ですが、認証以外には使用できません。確かに、TOTPは秘密鍵の知識の証明([〜#〜] zk [〜#〜]証明ではない)であり、[]を知っているシステムによって検証可能ですキー。ワンタイムパスワードの内容は、現在の時刻と秘密鍵に依存しますが、それ以外には依存しません。特に、投票値には依存しません。
さらにいくつかのメモ:
クライアント側の暗号化は必ずしもクライアント側の秘密鍵のストレージを意味するわけではありません。クライアント側の暗号化の場合、クライアントコンピューターで実行するためにいくつかのコードが必要ですが、これはユーザーがキーリングなどを管理する必要があることを意味しません。 Webベースのコンテキストでは、コードはサーバーからダウンロードされることがよくあります(それがJavascriptについてです...)。
実際、インターネットベースのシステムの基本的な特性は、魔法のようなものです。これにより、彼らは「コンピュータ内」で行うことを意味します。これは、ほとんどの人にとって、不透明で魔法のようなものです。アーサー・C・クラークが言うように、コンピューターは人々の「魔法の地平線を超えた」ものです。平均的な投票者しない投票の正しさについて何でも確認できる。
これが、ほとんどの投票が依然として紙と封筒を使用する理由です。人々は紙を握ります。彼らは投票手続きを観察し、封筒を数え、彼らの開会を目撃し、何が起こっているのか一般的に理解することができます。これにより、選挙は攻撃に対して堅牢になります:多数の目。
これらの状況下で、電子投票システムで実行できる最善の方法は、if詐欺が(「信頼されたサーバー」によって)試行されたことを確認することですthen少なくとも知識のある専門家が回復できる可能性のある痕跡を残します。たとえば、フランスでのインターネットベースの投票(フランスに住んでいないフランスの選挙人の場合)はsigned Java applet:そのアプレットはクライアント側の暗号化を行います)を使用します。 、プロトコルは、アプレットが正しく実装している限り、投票値を有権者にリンクできず、投票全体が安全で検証可能です。しかし、これはappletです:クライアントシステム、およびブラウザキャッシュにまだ存在します。署名されています。アプレットがスパイクされている場合は、逆コンパイルできます(Javaバイトコードをリバースエンジニアリングするのは難しくありません)。署名は、これは、あらゆる大規模な詐欺が発見される可能性が高い、または少なくとも非常に危険であることを意味します(そして、大規模ではない詐欺はどこにも詐欺師を招きません)。
フランスのシステムはあなたが望むものの良い例かもしれません。クライアント側の暗号化は、実際のソフトウェアのインストールなしで行われます(アプレットメカニズムはかなり合理化されています)。概念的には、純粋なJavascriptバージョンが実現可能ですが、コードにクライアントシステムに痕跡を残してほしいwith署名を使用して、コードの変更が危険にさらされるようにします。クライアントシステムにはシークレットのストレージはありません。投票手順の最後に、有権者は、すべての将来の暗号検証を可能にするのに十分な暗号情報を含むレシート(印刷可能)を取得します。 Voter authenticationメールで取得された2つの自動生成されたパスワードを使用します(メールではなく紙のメール)。有権者がTOTP対応デバイスを持っている場合(これがシナリオです)、TOTPを使用できます。
あなたの質問を読んでいると、応用暗号法(ブルースシュナイアー)の第6章のシナリオに似た多数の投票シナリオについて読んだことを覚えているようです。私はあなたがあなたの答えをそこに見ることを勧めます。
あなたが尋ねている一つの質問のようです:
「TOTPとパスワードで知識ゼロの証明を提供するには十分ですか?」
TOTPは本質的にサーバーの「キー」を認証に使用し、そのキーのプライバシーはサーバー上で公開されます。おそらく、TOTPよりも優れたもの、およびクライアント側に必要なものを実現するためのよりスマートなハードウェアが必要です。
それはあなたが尋ねているようにも聞こえます...
「使いやすい2要素認証をデプロイし、そのテクノロジーを再利用してZKPを提供するにはどうすればよいですか?
すべての暗号は数学です。 「数学」を実行するインフラストラクチャを展開していて、選択した数学がTOTPである場合、ZKPを提供するために使用できる優れた方法があると思います。