inSmartBank

B/43を運営するSmartBank社のメンバーによるブログです

B/43のeKYCシステムの裏側

こんにちは。スマートバンクでサーバーサイドエンジニアをしている mitani です。

B/43をAppStoreに公開してから1年近く経ちました。iOSDC Japan 2021 で B/43 の本人確認フロー(eKYC)の構築についてトークしました!の記事でも紹介した通り、B/43は資金移動業ライセンスのもとサービスを運営しているため、eKYCが必須となっています。このエントリーでは1年近く自社で行ってきたeKYCシステムの裏側をご紹介したいと思います。

eKYCとは

eKYC(electronic Know Your Customer)とはオンライン上で行う本人確認のことです。B/43は資金移動業ライセンスのもとで金融サービスを提供しているため、100万円に相当する額以下の為替取引を行うことができます。前払式支払手段*1に比べて高額であり出金もできるため、マネー・ローンダリングやテロ資金供与などのリスクが高まります。そのため、資金移動業者には犯罪収益移転防止法(以下、犯収法)によって取引時確認、確認記録・取引記録の作成・保存などが義務付けられています。

この犯収法が2018年11月に改正されて、オンラインで完結する非対面型の本人確認(eKYC)が可能となりました。犯収法では下記のように本人確認の方法をいくつか規定しており、B/43では「写真付き本人確認書類の画像」+「容貌の画像」を用いた方法を利用しています。まだB/43のアプリを触ったことがない人はiOSDC Japan 2021 で B/43 の本人確認フロー(eKYC)の構築についてトークしました!をご覧いただくとイメージできると思います。

f:id:smartbank:20220105224929p:plain

参考資料_犯罪収益移転防止法におけるオンラインで完結する本人確認方法の概要 P1より引用

犯収法で規定されていること

犯収法で資金移動行者に課されている義務は下記の通りです。(参考: 犯罪収益移転防止法の概要

  • 取引時確認
  • 確認記録の作成・保存(7年間保存)
  • 取引記録等の作成・保存(7年間保存)
  • 疑わしい取引の届出
  • コルレス契約*2締結時の厳格な確認
  • 外国為替取引に係る通知
  • 取引時確認等を的確に行うための措置

本人確認の方法は「犯収法施行規則 第6条」に規定されており、「犯罪収益移転防止法におけるオンラインで完結可能な本人確認方法に関する金融機関向けQ&A」のパブリックコメントの中では、下記のような具体的な手法について言及があります。

  • 写真付き本人確認書類と本人の容貌(顔)を、加工機能がないソフトウェアの中で、取引時に撮影させ、送信を受ける
  • 本人確認書類(運転免許証)は、表面に加え、裏・表面を傾けた厚みが分かる画像を撮影
  • 事前に撮影した写真を撮影させてその画像の送信を受けることは認められない(撮影時にランダムに指定する行為を求める)
  • etc...

このように仕様について、いくつかの細かい規定があります。一方で、セルフィー撮影の容貌画像と本人確認書類の容貌画像の具体的な比較方法や品質に関しての記載はなく、自社で具体的な閾値などを規定して運用する必要があります*3。また、犯収法の中では外国PEPs*4や反社会勢力の取引確認が必須化されていますが、一元管理されている公式なデータベースは存在せず、各事業者が複数のデータソースから独自に準備する必要があります。

システム構成

前置きが長くなりましたが、ここからはB/43のeKYCシステムの裏側についてご紹介したいと思います。アプリ側の仕組みについてはiOSDC Japan 2021 で B/43 の本人確認フロー(eKYC)の構築についてトークしました!をご参照ください。

eKYCシステムは下記のようにいくつかのシステムによって構成されています。

AML / ASFシステム

f:id:smartbank:20220105225008p:plain

AML/ASFとはAnti Money Laundering / Anti Social Forcesの略です。B/43では反社会勢力の方の登録をお断りしているため、反社会勢力に属している人たちのデータベースが必要となります。ただし一つにまとまったデータベースは提供されていないため、複数のデータソースを独自に入手して構築する必要があります。B/43ではOpenSanctionsというOSSを利用してデータを収集しています。OpenSanctionsには外国PEPsや海外の犯罪者などの情報を収集するスクリプトが実装されています。独自の収集スクリプトを定義できるため、財務省や外務省が公開しているリストを収集して保存したり、暴力団追放運動推進都民センターが公開している反社会勢力のリストを保存しています。

ユーザー向けeKYCシステム

f:id:smartbank:20220105225028p:plain

ユーザーがeKYCを行う過程では、大きく3つの処理が走ります。

申請情報の記録

犯収法では取引確認を行った情報を記録することが義務付けられています。そのため、ユーザーがアプリから入力した情報と提出した画像はDBとS3に保存されています。これらの情報は個人情報となるため非常に高いセキュリティを求められます。そのため、データの暗号化を行ったり適切なアクセスポリシーの設定を行っています。

容貌の一致判定

ユーザーの身元確認のため、本人確認申請書類の容貌画像とアプリのセルフィーで撮影した自画像を比較し、本人かどうかを判定する必要があります。この画像比較にはAmazon Rekognitionを利用しており、閾値を下回る場合にはアプリの申請途中で自動的に再申請を依頼する仕組みが入っています。

AML/ASF判定

AML/ASFに該当する場合はユーザーの登録をお断りしています。この判定処理にはAML/ASF APIを利用しますが、アプリの登録途中で検索処理を走らせてしまうとパフォーマンス劣化に繋がってしまうこと、またAPIで一致する情報が見つかっても必ず目視で確認しなければ正確な判定ができないことから判定処理は非同期で行っています。

CS向けeKYCシステム

f:id:smartbank:20220105225043p:plain

eKYCはリアルタイム審査ではなく、ユーザーの申請が完了したのちCSメンバーが目視で各申請を審査しています。審査を行う管理画面はReactAdminというフレームワークで作っています。

DBとS3に保存した情報を管理画面に表示、内容を審査して結果を保存し、事前のAML/ASF判定から一定時間経っている場合や判定処理に失敗した場合などは管理画面からAML/ASF検索をリアルタイムで行い、チェックする運用を行なっています。

実装上の工夫点

画面構成

eKYCの申請1件あたりの審査時間はCSメンバーの生産性を示し、1件あたり1秒でも縮めることができれば全体的な生産性を大きく上げられることになります。リリース当初はeKYC審査に慣れていなかったため、画面の構成や表示している情報に余分なものが含まれたりと無駄が多い状態でした。

審査件数が増えた去年の秋頃に下記のようなポイントを意識し、管理画面のデザインや機能を改善しました。

  1. タブに表示する情報とチェック項目を明確にする
    1. 不要な情報を表示させない
    2. タブや画面の往復をさせない
    3. 和暦や年齢を西暦の生年月日から変換し載せる
  2. 画像のサイズを大きくし、文字を読み取りやすくする
  3. 画面上部に重要なチェックポイントを表示し、注意が必要な申請は赤字で目立たせる
  4. 再申請を依頼する際に非承認理由のメール文面を自動生成し、ユーザーへの連絡コストを少なくする

画面移動や目の移動を少なくすることと、不要な情報を削除したり年齢変換などの頭を使う箇所を極力減らして長時間作業しても疲れにくいデザインを意識しています。

f:id:smartbank:20220105225123p:plain f:id:smartbank:20220105225145p:plain

容貌の一致判定

本人確認書類の画像とセルフィーの容貌画像の比較判定にはAmazon Rekognitionを利用しています。Rekognitionは高い精度で判定処理を行ってくれますが、影の映り込みや化粧の具合、髪型が変わるなどで精度がブレるケースがありました。Rekognitionは判定結果を数字で返してくれます。当初は高い閾値を設定していましたが、うまく撮影できないユーザーが先へ進めないことがあったため、現在では下記のような閾値で運用しています。

  • 80未満: NGとし、アプリで再撮影を求める
  • 80~94: 申請は許可し、CSメンバーの目視による審査を必須化する。怪しい場合には2名以上のチェックが必要
  • 95以上: 明らかに怪しい場合を除いて、1名のCSメンバーでの許可が可能

Rekognitionではマスクをつけていても高い判定を出す場合もあったため、必ず目視でのチェックを行っています。

機密情報の取り扱い

eKYCの審査では電話番号、メールアドレスだけでなく、住所や免許証などの身分証の画像を確認する必要があります。そのため、情報の取り扱いには非常に気を遣っており、下記のような仕組みを導入しています。

  • 管理画面は自社のGSuiteのSSOのみ許容し、不正にアカウントが作られないようにする
  • 管理画面には独自に認可の仕組みを実装し、eKYCの担当者のみ個人情報が見れるようにする
  • 個人情報は全て暗号化
  • S3へのアクセス制限を厳密に管理し不正アクセスを防止
  • 画像閲覧時に動的に発行するS3のURLには有効期限を設け、万が一URLが流出しても悪用できないようにする
  • NginxのX-Accel-Redirectを使うことで管理画面側にはS3のURLを露出させず、かつ認証されたユーザーのみ閲覧できるようにする
  • 管理画面の画像表示場所は右クリックやコピペが不可能な実装を入れる

終わりに

ここまで現状のB/43のeKYCのシステムについて説明してきました。今後の課題として、事業がスケールしていったとき、1日の審査件数がCSメンバーのキャパシティをオーバーしてしまうことが考えられます。そのため、より効率的かつ高い品質で審査できる仕組みに改善し続けなければなりません。具体的には本人確認書類をOCRにかけて申請情報と書類情報の一致を自動化したり、システムでの自動チェックのみで審査可能な項目は画面に表示せず、自動化部分と目視部分を明確に分けて審査項目を減らす等の工夫が考えられます。引き続き、内製でのeKYCシステムの利便性にこだわり、少しでも早いユーザーへのeKYC承認や、CSの負荷軽減に取り組んでいきたいと思います。

*1:資金移動業と同じく資金決済法で規制されているもの。交通系電子マネー(SuicaやPASMO)などが該当し、資金移動業とは違い出金ができないなどの違いがある

*2:ある銀行が他の銀行との資金の仕向・被仕向の為替取引を行う場合に、予め諸条件を取り決める「銀行相互間の為替取引契約」のこと

*3:「特定事業者は、本人確認書類の真正性を確認するため、本人確認書類や本人特定事項の確認時に撮影された顧客の容貌の画像を専ら機械を利用して確認することも許容されており、その機械においては十分な性能を有しているものに限りますが、具体的な方法や基準は特定事業者が判断することとなりますので、一律に数値をお示しすることは困難です。」パブコメ No.49より引用

*4:重要な公的地位にある者(Politically Exposed Persons)