海外在住者がオンライン在外投票をできないか

選挙権を持っている海外在住者が日本の国政選挙などに投票するには、現在は在外投票と言うものがあります。これは手続きが複雑でかなり時間を要するものなので、多くの海外在住者が登録すらしていないというニュースを先日見ました。

現在自分もドイツ在住で在外投票経験者なので、ITエンジニアの視点からどうすればもっと多くのユーザー（在外投票登録者）を増やし、ユーザーエクスペリエンス（簡単に投票出来て、投票数が増やせる）をよくできるか考えてみました。

# そもそも在外投票とはどういうものか
日本に居住していている場合は住民票がある地域の国政選挙や地方選挙に投票できますが、住民票を抜いて国外に住んでいる場合は国政選挙にのみ現在のところ投票権があります。地方自治体の選挙には参加することはできません。対象の選挙区は、海外転出前の選挙区となります。

# 在外選挙人証
海外在住者が選挙に参加するには、在外選挙人証を取得する必要があります。

日本在住の場合は引っ越しをして住民票を移動しても、その地区に3か月以上居住すると選挙管理委員会から自動的に選挙の際に連絡などが来ますが、海外在住の場合は、まずそこから複雑な手続きが必要となります。

https://www.mofa.go.jp/mofaj/toko/senkyo/flow.html

詳しいことはこちらに書かれていますが、だいたいこんな感じです。

* 海外在住者は住んでいる地域を管轄している大使館か領事館などに在留届を提出します。これは、自分が管轄地域のどこに住んでいますよと言うことを日本国政府に連絡するようなものです。これによって、もし地域で災害などあった場合に大使館・領事館から連絡などしてくれます。
* 在留届を提出して3か月たつと、在外投票の登録ができます。申請自体は3か月前からできるみたいですが、登録は3か月後のようです。まず在外選挙人名簿の登録申請書を提出します。ここでは、海外転出時の最後の住民票の住所を記載して申請します。つまり、転出前の住所の地区がこれからの選挙地区となります。例えば東京10区の住所から海外転出した場合は、海外にいる間はずっと選挙区は東京10区になります。
* この在外選挙人名簿の登録申請は、在外公館に提出してから外務省を通して日本の選挙管理委員会に送られ手続きをされるので2か月ほどかかります。
* 無事登録が済むと、在外選挙人証が送られてきます。これには登録された選挙地区が書かれています。先ほどの例ですと東京10区です。
* ちなみに、もし一時帰国して違う市町村に転入届をして再度海外転出すると選挙地区が変わるので、これらの手続きをすべて再度行わないといけなくなります。

# 選挙当日
選挙当日と言っても、日本国内のように投票日の日曜日に投票するのではなく、基本的には期日前投票です。方法としては以下の3通りです。

* 在外公館で期日前投票
* 郵便投票
* 日本に帰国して投票

# 在外公館で期日前投票

郵便投票は対象の選挙管理委員会と郵便のやり取りを1往復半（投票用紙の申請、選管から投票用紙の返送、投票用紙に記入して返送）しないといないので、かなりの時間を要します。ですので、時間的にはよっぽど急がないと間に合いません。

在外公館で期日前投票は以下の通りです。

https://www.mofa.go.jp/mofaj/toko/senkyo/vote1.html

>投票期間は、選挙の公示日の翌日から日本国内における投票日の6日前までとなっていますが、投票用紙を日本に送付するために必要な日数との関係でこれより短くなる在外公館もありますので、投票される際は事前にご確認ください。

* 日本の投票日の約1週間前までに投票をする必要があります。
* 在外選挙人証とパスポートを持って、在外公館に行って投票しますが、投票をする在外公館は管轄以外でも構いません。自分の場合は、管轄はミュンヘンの領事館で、そちらで在外選挙人証を申請しましたが、投票はいつもフランクフルトの領事館のほうが近いのでそちらで行っています。また、住んでいる国以外の大使館などでもできるようです。
* 投票所での基本的な投票の流れは日本と同じですが、来られる方々の選挙地区が違うので投票する台には分厚い冊子があって全国の選挙区とそこの立候補者が掲載されています。そこから自分の在外選挙人証と同じ選挙区を見つけてだれに投票するかを決めます。

# 問題点

1.  `在留届を提出して3か月たつと、在外投票の登録ができます。` 国内にいる場合は住民票を移動した後3か月後に自動的に新しい選挙区で投票できます。海外にいると在留届以外にさらに在外投票の登録が必要です。
1.  在留届はオンラインで行えますが、在外投票の登録はアナログです。これは郵送でもできません。管轄の在外公館に本人が必要書類を提出する必要があります。自分のように管轄の在外公館が遠距離の場合は、時間をかけて出向くかもしくは在外公館が時々出張サービスをすることがあるのでそれを待つしかありません。
1.  必要書類を提出した後も、前述のように外務省経由で選挙管理委員会に送られ手続きされます。それに、2か月も必要だと考えるとそこも紙ベースのアナログだと考えられます。
1.  在外選挙人証がまた郵送で送られてきます。海外での郵送は、必ずしも予定通りに届くわけではありません。普通の手紙を日本からドイツに送っただけで1か月以上かかることも普通にあります。
1.  日本の投票日の約1週間前までに投票をする必要があるため、投票に行ける日がかなり限られます。
1.  在外公館に投票に行くにも、ドイツのように各地方に在外公館がある場合は数時間でいけますが、国によっては近くになかったりそもそも滞在国にない場合もあり得ます。その場合は何日かかけて投票に行く必要があったりします。

# プロセスの見直し

これまでは、在外投票の現状と問題点を挙げてきました。それぞれの問題点を、ITシステムを使って解決するためにプロセスの見直しができないか考えていきます。

* 在外投票の登録の問題ですが、そもそもどの選挙区で投票権があるかは、出国時の選挙区となっています。と言うことは、日本を出国する際に海外転出をした段階で、その人の選挙区は次に帰国して国内に転入しない限り変わらないということです。また、投票権は在留届を提出して3か月たつと取得できるということなので、在留届に在外投票の登録の申請も同時にできるようしたらどうでしょうか？![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/1750891e-d56e-8a63-24e8-e07c46ca5093.png) 

* 在外投票の登録の申請書に記入する項目で在留届にないのは、出国前住所です。これらの情報を追加することによって、2枚の紙を出す必要はなくなると考えられます。

* 次に在外公館に本人が必要書類を提出する件ですが、本人が出向いて提出しその際にはパスポートの提示が必要です。本人確認ですね。システム的にはAuthentication(認証)で、登録時におそらくもっとも重要なところとなります。
  * 先ほど在留届と、出国前住所を同時にオンラインで提出することを考えると、本人確認もその時に行えればいいですがオンラインでの本人確認はやはり難しいでしょうか。例えばこちらの金融機関などは、オンラインでビデオカンファレンスで本人確認を行ったりしています。
  * 前述通り、出国時に海外転出した段階で選挙区は決まっているので海外転出時に在外選挙人証を発行すれば良いだけのような気がしています。役所で転出時には本人確認は必ずされますし、それをもって在外投票の登録の本人確認終了とし、その場で在外選挙人証を発行できると思います。
  * 在留届を提出して3か月と言う規則を出国後3か月にしてしまえば、投票時にパスポートと在外選挙人証を使って3か月以上海外在住者であるかは証明できるはずです。　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/f2742521-cc53-4a20-3829-16028368652d.png)

  * この段階で在留届は在外投票の登録とは切り離されて考えられます。すでに在外選挙人証を持っているので、在留届とは関係なくなりますね。また、申請書を海外から郵送し、在外選挙人証をまた郵送する手間も省けます。

これまでの段階ではIT技術を使っているわけでもなく、プロセスの見直しをしている感じです。ただシステムを作る時には必ず必要な工程で、どんなプロセスでもシステム構築時は、前例踏襲ではなくそれを見直す良い機会です。前そうしていたからと言うの理由だけで同じプロセスを続けるといつまでたっても改良できません。

# システム構築
これまではプロセスの見直しをしてみましたが、まだすべてアナログ、紙ベースでこれではオンラインでの投票はできません。在外選挙人証を紙で発行していてはシステムでの認証に使えませんので、実際オンライン投票で必要なのは投票システムのユーザーID/クレデンシャル(credential)です。

先ほどの例で行くと、海外転出と在外投票の登録を行う際に、投票システムでクレデンシャルの発行を行えば解決できると思います。本人確認をどうしても、オンラインではなく対面で行う必要があると言うのであれば役所に行く必要はありますが、その場で情報をシステムに入れることは可能ですし、事前にインターネットで本人が情報だけ登録しておいて本人確認だけ役所で対面で行えば良いかと思います。

## ユーザー/クレデンシャル
このシステムの最も重要な個所の一つは、どのようにしてユーザーID/クレデンシャルを作って実際ユーザーに与えるかです。

対面での本人確認が必要とすると、情報を登録する段階（役所もしくは事前にオンラインで）でユーザーの発行はできます。システムが投票システムと言うことを考えると、単純にIDとパスワードだけの認証では不十分なので最低でも二要素認証が必要かと思います。

ただ、ここでは在外投票で海外在住者を対象にしているので、よくあるSMSでトークンを受け取って二要素目とするということはおそらく難しいかと思います。それぞれの国の通信事情やコストの面もあるので、何か別の方法が必要です。いくつか例を挙げると

* Google認証システム (Authenticator)のようなものを専用に開発する。おそらく国の投票システムなので、Google認証システムをそのまま使うということは役所的にきっと無理だと想定すると、自前で開発するしかありません。
* 認証アプリでQRコードを読み込ませてトークンを表示する。いくつかの金融機関などで使っているようですが、IDとパスワードでログインした後にQRコードを表示させ、それを読み込んでトークンを発行するというものです。
* 公開鍵認証を使って認証をする。ドイツの確定申告のシステムは公開鍵認証を使っています。公開鍵認証はパスワードがかかっていて、公開鍵認証の初期パスワードはユーザー登録をした後に税務署から送られてきます。

アプリを使う例は最初に二要素認証を設定する段階で、使っているスマートフォンが本人の物か確認する必要があります。Google認証システムの場合だと、最初にGoogle認証システムを有効にするときにSMSでトークンを受け取って初めて有効にできます。ただ、前述の通り海外ユーザーにはSMSでのやり取りが難しいと思われます。
公開鍵認証は初期パスワードを渡す必要があり、また例に挙げた公開鍵はパソコン上にコピーして使うもので、つまり他のパソコンにもコピーできるのであまりセキュリティー的にもいいとも思えません。

そこで、ここではドイツの別の金融機関で行っている例で考えてみたいと思います。前提としては在外投票システム用の二要素認証アプリが開発されスマートフォンで海外からもダウンロードできる点です。

1. 出国前に在外投票の登録をオンラインで行う。
1. 役所に出向いて本人確認及び海外転出届。これによって在外投票システム上は本人確認済みとする。
1. 役所は二要素認証アプリを有効化する専用のQRコードを発行する。
1. 日本国内で使用しているスマートフォンをそのまま渡航先で利用する場合は、その場で二要素認証アプリを有効化も可能。
1. 海外で新たに購入する場合は、購入後に発行されたQRコードで二要素認証アプリを有効化。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/b3d7967a-e338-153c-7f7c-e50f9fa17a0c.png)

この方法だと、SMSを使う必要もないですし、QRコードを本人に手渡しできるので間違いなく本人に渡したことを確認できます。課題は、QRコードの有効期間をどれぐらいにするか、もしくは使用回数度に限るのかなど考える必要があります。例に挙げた金融機関では、使用は一度きりで別のデバイスに変更した場合は新たにQRコードを送ってもらう必要があります。

## 在留届のシステムと連携
在外投票システムのオンライン登録や、二要素認証アプリの有効化などができるようになっても、アナログの時に行っていた在留届を提出してから3か月後に有効となる条件は満たされていません。

>在留届を提出して3か月と言う規則を出国後3か月にしてしまえば、投票時にパスポートと在外選挙人証を使って3か月以上海外在住者であるかは証明できるはずです。　

プロセスの見直しでこのように書きましたが、オンラインで投票をするのが最終目的なので、この3か月の条件も何とかオンラインで行うべきです。そこで、すでにオンラインでできる在留届システムと、在外投票システムを連携して在留届の提出日を共有できるよにします。3か月後には自動的に在外投票システムでユーザーに投票の権限が与えられるようすれば、アナログ的なところは省かれると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/0cb93a8f-b01e-90f1-46dc-339f9cb65216.png)

流れとしては

1. 海外でスマートフォン購入後に発行されたQRコードで二要素認証アプリを有効化。
1. 在留届をオンラインで提出。
1. 在留届システムから在外投票システムに在留届の提出日をアップデート。
1. 在外投票システム上で例えば`在留届の提出日が1月20日となりました。間違いありませんか？`のような感じで二要素認証アプリのトークンを使って承認を行う。

弱点は在留届システムと在外投票システムが別のもので、ユーザーがシステム的には異なっている点です。ユーザーIDを共有するなり名前、生年月日で紐づけなどを行ったりする必要があります。

## マイナンバーカードは使えるのか
結論から言うと、現状では使えません。マイナンバー自体が海外転出者に発行されていません。たとえ以前マイナンバーを交付されていても海外転出した段階で、マイナンバーは無効となります。

制度がかわって、海外在住者にもマイナンバーカードが発行されたと仮定するとどうでしょうか。

https://www.soumu.go.jp/kojinbango_card/kojinninshou-01.html

総務所のサイトによると、以下の通りマイナンバーカードには電子証明が付いているようです。

>署名用電子証明書・・・インターネット等で電子文書を作成・送信する際に利用します（例　e-Tax等の電子申請）。「作成・送信した電子文書が、利用者が作成した真正なものであり、利用者が送信したものであること」を証明することができます。
>
>利用者証明用電子証明書・・・インターネットサイトやコンビニ等のキオスク端末等にログインする際に利用します（例　マイナポータルへのログイン、コンビニでの公的な証明書の交付）。「ログインした者が、利用者本人であること」を証明することができます。

自分も海外在住者なのでマイナンバーカードを持っていませんし、それを使ったサービスを利用したこともありません。

総務省のサイトを見る限りでは、このような感じです。

* スマートフォンとパソコンをBluetoothでつなげる。
* スマートフォンでマイナンバーカードを読み取り。読み取り時に4桁の暗証番号を入力。
* NFCを通して電子証明を読み取り、公開鍵認証を行う。

方法としては、ドイツの税務署とよく似ています。この方法ですとマイナンバーカードと4桁の暗証番号があれば、認証が行えます。確かに二要素認証にはなっていますが、4桁の暗証番号をもって知識要素とするのは少し簡易すぎるような気もします。ただ、電子証明書がマイナンバーカード内にあるので、おそらく取り出せないと思いますのでファイルとしてコピーできるよりもセキュリティー的には良いかと思います。

## マイナンバーカード、在外投票システム、在留届システムの連携
そこで、ここではマイナンバーカートを利用して所有要素とし、在外投票システムのユーザーとパスワードを知識要素として考えてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/87b5618c-dff2-4107-2cc7-b5fccc6a4a7c.png)
まず、日本国内に在住時にマイナンバーカードを取得しておきます。これによって基本的に本人確認は完了とみなします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/1bbcaf36-7294-8964-6955-347e5accf509.png)

1. 出国前に在外投票の登録をオンラインで行う。ユーザーの設定とマイナンバーカードとの紐づけを行う。
1. 役所に出向いて海外転出届。在外投票システムの本人確認は、マイナンバーカードで登録時に行えるので今回新たにする必要はありませんが、転出届時にどちらにしても本人確認をされます。
1. 出国後に在留届をオンラインで提出。マイナンバーカードを利用して認証を行う。
1. 在留届システムから在外投票システムに在留届の提出日をアップデート。両方のシステムでマイナンバーカードで認証を行っているので、こちらは自動的に変更をかけても問題ないかと思われます。
1. 在留届後3か月以降に行われる選挙より、自動的に投票権が使えるように在外投票システムを設定。

先ほどの二要素認証アプリを使うより、プロセスがより簡素になりました。これにより、二要素認証アプリの開発、QRコードの発行、スマートフォンでのアプリの有効化などの手間が省けます。

# オンライン在外投票
実際のオンラインでの投票は、事前にこれだけできればすごく簡単になると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/9860c002-b5cb-a509-9fee-5f865e891d34.png)

出国前に作ったユーザーとマイナンバーカードで認証を行い、在留届後3か月以上たっていれば投票が行なえます。

## メリット

かなりたくさんのメリットがありますが、海外在住者の立場で見るとこの様な感じです。

* 現在のように在外選挙人証を取得するために、時間のかかる手続きをする必要がない。
* 投票所に数時間、数日かけていく必要がないし、郵送で送る必要もない。
* 投票の集計を手で行う必要もないので、投票できる期間を日本の投票日まで設定できる。これによって、ユーザーはそれだけ時間をかけて候補者を吟味して投票することができる。
* 選挙期間が短くても慌てて、郵便投票などを行う必要がない。
* 事前にマイナンバーカードを発行しているので、対象の選挙区を自動で表示できる。

## 課題

* セキュリティー。これは各ユーザーのセキュリティーだけでなくシステムそのもののセキュリティー、運用体制、アクセス管理などもかなり細部にわたって対処する必要があります。DDoS対策やハッキングなどの防御対策も必要です。
* 現存の海外在住者にどう対処するか。今までは出国前にユーザーの手続きやマイナンバーカードの発行を行う前提で書いていますが、すでに海外には100万にほどの有権者の在外邦人がいます。この100万のユーザー登録をどのように行うか考える必要があります。
* 今まで通りの投票所での投票をサポートするかどうか。100万人すべてがオンラインで投票したいわけでもないと思います。そのような人をどうサポートするか。
* パフォーマンス。投票システムなのでおそらく国内に作られると考えられます。海外から日本のシステムにアクセスすると、結構なストレスを感じるぐらい遅いこともあります。世界各国に100万人のユーザーがいるので、CDNなどを使ってパフォーマンス上げる必要があります。CDNについては以前に次の記事を書いてみました。

https://qiita.com/dg4101/items/6a61a27616ede8ca4435

* 在留届システムと在外投票システムの両方で別々のユーザーの登録が必要。ユーザーにとっても手間ですし、運用する側も2つのシステムでユーザー情報の管理をするのは効率がいいとは考えられません。

# 公的個人認証サービスとIdp

マイナンバーカードの発行などはこちらの公的個人認証サービスで説明されています。

https://www.jpki.go.jp/index.html

ただ見ている限りだと、マイナンバーカードは電子証明書付きのカードでそれを使うそれぞれのサービスでユーザー管理が必要です。前述の課題点に挙げた通り、在留届システムと在外投票システムの両方で別々のユーザーの登録を行うのは効率がいいとは言えません。

そこで、もし公的個人認証サービスがIdp(Identify Provider)として機能するとどうなるか考えたいと思います。以前、こちらの記事でIdpを使ってOAuth2でSSOを設定する例を挙げました。

https://qiita.com/dg4101/items/7fdcf0e14d00b3fa0c7e

その例を元にこちらではSAMLを使った場合の例を挙げてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/ed6607e3-f701-6bfd-458e-43d357780944.png)

まず先ほど同様、日本国内に在住時にマイナンバーカードを取得しておきます。マイナンバーカードの発給と同時に、公的個人認証サービスIdpにユーザー登録をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/799224/e2598980-7506-6927-74d0-cd604ab4fae5.png)

* 全体の流れは先ほどと変りませんが、認証をマイナンバーカードを使って公的個人認証サービスIdpで行います。その認証をもって在外投票システムと在留届システムにアクセスできるようにします。
* ユーザーとしては基本的なユーザー情報はIdpで管理していて、それぞれのシステムで一から登録する必要はありません。
* 運用する側としても、それぞれのシステムで全ユーザー情報を管理・メンテナンスする必要がありません。特に、認証関係の情報を持つ必要が無くなるだけでもシンプルにできるはずです。全体的にシステムが少し複雑にはなりますが、長期的に考えるとこちらの方が運用は楽になると考えられます。
* 公的個人認証サービスIdpは、将来的に他のシステムの認証にも使えるので、他のシステムを構築する際に認証系の設計がかなり楽になると思われます。
* SAMLを使うかOauth2を使うかなどはそれぞれメリット・デメリットがあるのでどちらが良いか検証して決める必要があります。
* 公的個人認証サービスIdpにすると、Idpが高可用性システムであることは最低条件です。DR（ディザスタリカバリ）対策など、最悪の事態を想定してシステムの構築をする必要があります。高可用性システムやDR）対策について以前まとめてみた記事です。

https://qiita.com/dg4101/items/0aeae61a16b979f00f80

* システムの利用は選挙期間に限られて、それ以外の時はそれほど負荷がかかるシステムではないと思います。そのように負荷の上下に対応できるようなスケーラビリティーを持ったシステム設計が必要です。例えば、選挙期間中は能力を数倍必要に応じて増やし、選挙期間外は減らせるようにするとコストの削減にもなります。



# まとめ
海外在住者にとって、在外投票は日本の国政と数少ない関わりを保つものです。100万人以上いる在外邦人が、どうやったら簡単に在外投票に参加できるか考えてみました。セキュリティー対策など課題点はたくさんありますが、いずれこのようなシステムができて多くの在外邦人が簡単に在外投票に参加でき投票率が上がることになればと思います。
いきなりIdpを作ってと言うのは難しいと思いますが、マイナンバーカードを使って認証を行っている市民サービスは存在しています。それを拡張して、在留届システムや在外投票システムを作るところから始まればと願って思いつく事を書いてみました。