推しアイデア
Metamask(ウォレット)を暗号化インターフェースとして捉え、メールに必要な電子署名、平文の暗号化などを実現できるようにした。またスマートコントラクト上で公開鍵認証局を作ることで従来よりも分散されたPKIの実現ができるようになった。
―
Metamask(ウォレット)を暗号化インターフェースとして捉え、メールに必要な電子署名、平文の暗号化などを実現できるようにした。またスマートコントラクト上で公開鍵認証局を作ることで従来よりも分散されたPKIの実現ができるようになった。
Metamask(ウォレット)は秘密鍵と公開鍵を所持しているため、普段の使い方は違う使い方をすることで新しい可能性を見せたかったから
公開鍵と秘密鍵をふんだんに使った暗号技術とスマートコントラクト。暗号は楕円離散対数問題における安全性が保証されている。
このプロジェクトはブロックチェーンで取引する際に使っているウォレットアドレスをメールアドレスとしてテキストのやり取りができるブラウザメールアプリです。
私たちはブロックチェーンで取引をする際にウォレットを使用して取引しますが、ウォレットには取引をするための秘密鍵と公開鍵が入っています。 私たちはこのウォレットが秘密鍵と公開鍵を持っていることに注目し、ウォレットを暗号化インターフェースとして捉えることであらゆる暗号、認証を実現しました。
ウォレットアドレスを公開していればメールが届くのでいつの間にか有名人からのメールが来るかもしれません。←目が離せない
既存の公開鍵認証局はその公開鍵が本人のものであることを証明するために認証局を通しています。ユーザーは認証局を信用しなければならず、中央集権的です。しかし、私たちはアドレスと公開鍵を紐づけるスマートコントラクトを作成し、分散型の公開鍵認証局を作成しました。 公開鍵を登録するのはウォレットを持っている本人しかできません。 また、スマートコントラクトなので、他の開発者がアドレスと公開鍵の紐付けデータが欲しいとなった時、このスマートコントラクトを使えば良い(色んなアプリで使われることでたくさんのアドレスと公開鍵の紐付けが登録される)ので、コンポーザビリティを意識した開発を行いました。
通常のメールサービスは登録していないメールアドレスには送信できませんが、このサービスではアドレスをメールアドレス部分としているので、メールアドレスを登録する必要がありません。ただのuidに向けたチャットのように見えますが、それだとメッセージの暗号や、電子署名を実現しきれない(しようと思ってもサーバー側を信頼する必要がある)ので、公開鍵を秘密鍵を持つアドレスで実現可能です。
既存のメールクライアントは、向こうが用意したサーバーに保存されたりと、ユーザーが選択できるものが少なかったのに対してこのアプリでは多くの選択ができるようになっています。ユーザーは何を重要視するかによって利用する形態を自由に選択できます。
firebaseでの認証も、一度きりのトークンの発行をMetamaskで署名し、ウォレットが本人のものであることが証明されているので不正な認証はできません。また、一度きりのトークンなのでリプレイアタックによる攻撃の心配もありません。
また、それだけでなくLayer1,Layer2のEVM互換であるチェーンにデプロイしてあるので、ユーザーは好きなチェーン(手数料が安いなど)やサーバー(信用しなければならないが利用は完全に無料)などを自由に選ぶことができます。
フロントではNext.jsを、バックエンドにはBackend as a ServiceのFirebaseを使用しています。Firebaseからワンタイムトークンを発行し、そのワンタイムトークンをMetamaskを使用して署名を行い、Cloud Functions上で検証し、アドレスが復元されることが確認されるので、アドレスが本人のものである検証ができます。その後Firebaseログインを行うことで、オフチェーンのガス(手数料)が無料のままサービスを利用することも可能です。
前提として送信先のアドレスが公開鍵を登録しているとします。
これによって相手のみにしか復号できない暗号文と、メールを送ったのが送信元アドレス本人であることがわかります。