原文

TL; DR - 私は、パスポートごとに一意のナリファイアを生成し、それをイーサリアムアドレスに関連付けるSigilを作成しました。これにより、アドレスレベルでの本人性証明が可能になり、シビル耐性が向上します。つまり、プロトコルはアドレスごとではなく、プロトコルごとに1つのパスポートを強制できるようになります。

概要

私は比較的最近Web3の旅を始め、特にプライバシー/アイデンティティ/ZK証明に興味を持つようになりました。それが、イーサリアムアドレスレベルで本人性証明を行うアプリの作成につながりました。良いアイデアなのか、実用的なアイデアなのか確信はありませんでしたが、とにかく何かを作りたかったので、そのまま進めました。その仕組みはこうです。まずユーザーはウォレットに接続し、次にスマートフォンを使って有効なパスポートをタップします。これにより、ローカルでZK証明が生成されます。この証明は、内容の真正性と、それが実際のCSCA(国が発行した鍵)によって署名されたことを確認します。ICAOによってコンパイルされた鍵のマスターリストがあるので、私は各ハッシュ化された鍵をリーフとする別のマークルツリーを作成しました。証明の一部は、CSCA鍵がこのリストに存在することを確認することです。

生成された証明はオンチェーン検証者に提出され、成功した場合、パスポートナリファイア(一意な一方向ハッシュ)がレジストリにトランザクションアドレスとともに保存されます。有効期限、登録解除、登録制限に関するいくつかのメカニズムも実装しましたが、基本的なアイデアは、アドレスの背後に何らかのレベルの本人性が存在するというものです。

シビル耐性

パスポートに裏付けられたアドレスを持つことのもう一つの利点は、シビル耐性です。パスポートナリファイアはパスポートごとに一意であるため、追加で検証されるアドレスは同じパスポートにリンクされます。したがって、Sigilを活用するプロトコルが一意のパスポートナリファイアを強制する場合、ユーザーは異なるアドレスで複数回やり取りすることはできません。例としては、エアドロップのようなものが挙げられます。

類似プロジェクト

self.xyzやzkpassportのような他のパスポートベースのプロジェクトも存在しますが、これらはセッションごとの証明のように設定されており、プロトコルがSDKを実装し、ユーザーはやり取りするたびに証明を生成する必要があります。しかし、Sigilでは、証明はアドレスごとに一度だけ行われ、グローバルレジストリに書き込まれるため、その後はどのプロトコルでもそれを読み取ることができます。

制限事項

プロジェクトを開始した当初は、アイデアは単純明快に見えましたが、ツール、セキュリティ、設計、プライバシーに関して、当初考えていたよりもはるかに多くの考慮事項がありました。正直なところ、私のほとんどのプロジェクトではいつもそうですが(笑)。そこで、Sigilの現在の仕組みに関するいくつかの制限/懸念事項を挙げます。特に、プライバシーの懸念についてはしばらく考え込んでいたので、それについてのご意見/ご感想/コメントをいただけると幸いです。

1) 複数のパスポート

もし誰かが複数の有効なパスポートを持っている場合、それらそれぞれでアドレスを検証/登録できるため、一意のパスポートが強制されていても、プロトコルと複数回やり取りすることができます。したがって、Sigilは文書レベルで一意であり、必ずしも個人レベルで一意ではありません。しかし、文書レベルであっても、シビル耐性には大いに役立つと考えています。

2) リンクされたアドレス - プライバシーの懸念

これは私がしばらく考え込んでいたことです。Web3におけるシビル耐性というアイデアに惹かれ、オンチェーンの一意のパスポートナリファイアが有効なアプローチだと考えました。しかし、これにはプライバシーのトレードオフが伴います。

ユーザーが同じパスポートで複数のアドレスを検証すると、それらのアドレスは実質的にリンクされます。これは、特定のアドレスが同じ人物によって所有されている可能性が高いことを人々が知ることを意味します。

このことは本当に私を悩ませ、これを避ける唯一の方法は、self.xyzやzkpassportと同様に、プロトコルごとのセッションごとの証明を行うことのように思えました。また、一度に1つのパスポートにつき1つのアドレスのみを許可し、増分するナンスを使用して後続のアドレスに異なるナリファイアを生成することも考えました。しかし、誰かがトランザクションを十分に注意深く調べれば、これらのアドレスは依然としてリンク可能になります。そのため、苛立ちはしましたが、当面はより単純なグローバルナリファイアを採用し、リンク可能性の懸念を受け入れることにしました。ユーザーがアカウントが互いにリンクされるリスクを認識している限り、これは許容できるトレードオフだと感じました。しかし、それは私個人の意見であり、何か見落としていることや、より大きな懸念があるかどうかはわかりません。

いずれにせよ、これに関するフィードバックやコメントをいただけると幸いです!私にとっては楽しく取り組んで学べるプロジェクトでしたし、もし使われることがあれば、さらに嬉しいです。私が設定した1ページのサイトとコードはこちらです。

www.zksigil.xyz

github.com

GitHub - zksigil/sigil-monorepo: ZKPを介したパスポートによるアドレス認証

ZKPを介したパスポートによるアドレス認証

現在、App Store (iOS) で公開しようとしていますが、組織として公開するよう求められ、壁にぶつかっています。そのため、まずAndroidで公開することを試みるかもしれません。

1投稿 - 1参加者

トピック全文を読む