EDSを使用するためのシンプルなソリューション

画像 数年前、信頼できる検証可能な投票を便利に実施するためのシステムを作成するために設計されたOpen Votingプロジェクトを開始しました。 残念ながら、問題は理論的な開発のみに限定されており、特定の実装に関しては前進していません。 少し前に、私は熟考し始めました-なぜそうですか? 私は自分で開発者です。 チームには複数の開発者もいます。 それで私たちを悩ますのは何ですか? そして彼は、主要な障害は大きすぎる初期計画であるという結論に達しました。 そこで、私は小さなものから始めようと決心しました。普通の人が電子署名を簡単に使用するためのツールを使って。 さらに、私たちのプロジェクトだけでなく、それが必要だと考えるサイトにとっても。



現時点では、この決定は準備ができており、私はそれを一般に公開したいと思います。 ソースコードはオープンライセンスで配布されます(記事の最後にリンクがあります)。



だから、私は何を提案していますか...



ユーザーのスマートフォンにあるモバイルアプリケーションは、キーの作成、保存、ドキュメントの署名など​​、すべての基本的な暗号化を提供します。 ドキュメントは、データのセットとそれらを表示するためのテンプレートです。 2つのタイプのテンプレートが利用可能になりました:単純なリストとHTMLテンプレート。



ユーザーは、公開鍵のハッシュによって識別されます。 文書への署名を要求するサイト(以下、「顧客」と呼びます)は、シンボリック識別子(通常、サイトのドメイン)によって識別されます。 システムには、ユーザーとクライアント間のプロキシサーバーであるパケットの転送を保証する中間要素もあります。 署名済みドキュメントに関する情報は、プロキシサーバーでは利用できないため、すぐに注意してください。 ユーザーの公開鍵で暗号化されます。



作業指示書



当然、クライアントのサイトが特定のユーザーに署名するためのドキュメントを送信できるようにするには、まず何らかの方法でユーザーの公開キーを取得し、それを自分の内部ロジック(たとえば、ユーザーのログイン)にバインドする必要があります。 「署名の登録」手順はこのためのものです。 以下で構成されています。



-サイトは、ユーザーに数行を提供します:その識別子(通常はドメイン)と1回限りのコード。

-ユーザーはこのデータをモバイルアプリケーションに入力します。モバイルアプリケーションは、公開キーと署名したワンタイムコードを含むパッケージを生成します。 そして、このパケットをプロキシサーバーに送信します。

-クライアントのサイトはプロキシサーバーからこのパッケージを受け取り、公開キーをそのロジックにバインドします。



その後、必要に応じて、サイトでドキュメントに署名します。



-クライアントは、署名用のドキュメント(ドキュメントの内部識別子を含む)を生成し、ユーザーの公開キーでドキュメントデータを暗号化し、公開キーでユーザー識別子を設定し、プロキシに送信します。

-ユーザーは、都合が良いときに、新しいドキュメントの署名を確認します。

-そのようなドキュメントを受信すると、ユーザーはデータを解読し、それらから署名、テンプレート、およびドキュメントの他の属性を作成します。

-受信した署名をクライアントIDとドキュメントの内部番号とともにプロキシサーバーに送信します。 ドキュメントデータ自体は送信されません(クライアントに保存されます)。

-クライアントは署名を受け取り、内部識別子を使用してドキュメントの元のデータを抽出し、署名をチェックし、正しい場合は、さらなるアクションのために保存します。



これでサイクルが終了します。



結果と展望



もちろん、システムが完全ではないことは認められます。 しかし、これは最初のオプションであり、最も重要なことは、それが機能していることです。 また、投票の実施に関連するプロジェクトの目的だけでなく使用できることも重要です。 たとえば、2要素認証を提供するために使用できます。 または、ログインに関連付けられたパスワードや電子メールの変更などの重要なユーザーアクションを保護するため(このようなオプション機能は、人気のあるサイトのいずれかに既に実装されています) これは基本的なツールであり、それに基づいて何でも作成できます。問題は私たちの想像力によってのみ制限されます。 :)



計画は多くの改善です。 現在、モバイルクライアントには最小限の機能があります。サイトへの登録と、ドキュメントへの署名または署名の拒否のみです。 次のバージョンの計画には、すべてのユーザードキュメントのモバイルアプリケーションへの保存、クライアントサイトとの直接通信の可能性の実現(プロキシサーバーを使用しない)、この機能をサポートする場合、およびiOSのバージョンの作成が含まれます(モバイルアプリケーションバージョンは、 Android)。



プロジェクトは完全にオープンであり、コードに基づいた独自の開発とプロジェクトへの支援の両方を歓迎します(たとえば、アプリケーションをiOSに移植することを支援しません)。 :)



さて、リンク:



Google Play Marketモバイルアプリ:GPLVote Sign Doc

GitHubモバイルアプリのソースコード

モバイルアプリケーションをテストするためのクライアントテストサイト

PerlモジュールGPLVote :: SignDoc ::クライアント。クライアントサイトへの必要な機能の固定を容易にします

GitHubテストクライアントソースコード(Perl)



All Articles