乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

マッチングアプリ

今回はOmiaiの会員情報流出事件についてです


解説動画はこちら



会員情報流出事件

さて
マッチングアプリ「Omiai」は会員数が延べ
600万人と国内有数のマッチングアプリです。


そんな恋活・婚活マッチングアプリ
「Omiai」を管理するサーバーに対し
外部からの不正アクセスを受け
会員情報の一部が流出した可能性が
高い事が判明したそうです。

今のところ、不正利用などの
被害は確認されていないそうですが・・・



流出対象の会員情報

対象:2018年1月31日
~2021年4月20日の期間(3年分ちょい)
171万1千756件分の年齢確認書類の画像データ

年齢確認審査書類の主な種別:
運転免許証、健康保険証、パスポート
マイナンバーカード(表面)等
そのうち、全体の過半数となる約6割を
運転免許証画像データが占める

マイナンバーは取っていなかったんだけど
会員さんがマイナンバーを含む画像を
誤って送って来てしまったので
それが流出しちゃった(ゴメンね)

結構エグいですよねーーーー
免許証のデータが流出しちゃうとか
管理方法はどうなっているんだって
思いますよね。


事件の経緯

2021年4月28日15時頃:
「Omiai」サービスの会員情報を
管理するサーバーにおいて
意図されていない挙動が観測

画像データに対する不正アクセスの痕跡を発見

特定可能な不正アクセス者のIPを速やかに遮断
ネットワーク制限を強化するなどの対処を行う

外部専門会社の協力の下
フォレンジック調査および
更なる監視体制の強化を図り
システム全般面の第三者検証も同時に開始

サービス内で利用されている
他の情報についてもアクセス制限を強化



流出の原因は?

恐らくですが
・アクセスポイントやID、PASSが流出していた
・第三者がアクセスできる状態にあったこと

こういうことなんだろうと思いますね。
一応運営側の言い分がありました。

「これは言い訳になってしまうかもしれませんが
この不正アクセスの痕跡を確認したのが
ゴールデンウィークの直前で

さらには当社では新型コロナウイルス感染症の影響で
リモートワークを進めていたことなどもあり
結果的に発表までに時間を要してしまいました」


対策

やはり
個人情報を扱う場合は
外部との接触ポイントを極力抑える

個人情報取り扱い業者のリモートワークは
そもそも危険なのではないかということ

定期的にID,PASSの管理、チェックを行う
最低限の努力はしないといけないですね。



そもそもなんで本人確認が必要なのか

インターネット異性紹介事業を利用して
児童を誘引する行為の規制等に関する法律
通称「出会い系サイト規制法」

異性と出会うことを目的とした
マッチングアプリなどのサービスの運営を
開始する際には、インターネット異性紹介事業の
届出を行うことを法律で義務付けられているからです

そしてマッチングアプリの運営は
「インターネット異性紹介事業」にあたり

インターネット異性紹介事業者には
18歳未満の児童の利用を確実に阻止するための
厳格な年齢確認の義務が課されています

運転免許証や国民健康保険被保険者証など
生年月日と年齢が記載された
公的な本人確認書類を受け取る、か

クレジットカードなど一般的に18歳未満の児童が
利用できない方法でのみ支払いを可能にする

という対策をしないといけないようです。



マッチングアプリを開発・運営するなら

インターネット異性紹介事業者の
登録を行わないといけない

公的な本人確認書類をユーザーから
受け取って確認しないといけない

売春防止法違反の幇助の疑いでも逮捕される

セキュリティー面や法律面の問題を
全てクリアしながら開発しないといけないので
かなりハードルが高い!!!!!!
(非出会い系アプリでも判断されるとアウト)


いやーー婚活したいので
マッチングアプリでも使ってみるかーとか
思っていたらこの事件ですよーー

くーーー
二の足を踏んでしまいますねえ
 
安心安全を求めるなら
自分たちで作るしかないのか
マッチングアプリ!!!


今回はこれまでです
それでは

本日はみなさんがいつも使っている
マッチングアプリの戦略について
考えてみました。

解説動画はこちら



さてどんな戦略を取れば良いかと言うと
その昔、数学者の秋山仁先生が
考え出したものです。

まずルールとしては
・全部で20人の相手とお見合いをする。
・断った相手とは2度と会えない。
・会う順番はランダムに与えられる。
・二股はかけられない。

事後的に順位を付けることができた場合
順位が3番目以上の相手と
結婚するための戦略を考えよ

最初の5人は無条件で見過ごす。
10人目までは、それまでで1番だと思ったら結婚する。
13人目までは、それまでで2番め以上だと思ったら結婚する。
15人目までは、それまでで3番め以上だと思ったら結婚する。
16人目の相手が、それまでで4番め以上だと思ったら結婚する。
17人目の相手が、それまでで5番め以上だと思ったら結婚する。
18人目の相手が、それまでで7番め以上だと思ったら結婚する。
19人目の相手が、それまでで10番め以上だと思ったら結婚する。
20人目の相手とは、ルール上どんな相手でも結婚する。

引用:秋山仁先生「皆殺しの数学」

さてこれを実装して
試してみることにしましょう。




import random
import numpy as np

F = [i+1 for i in range(20)]
random.shuffle(F)

res = []
for j in range(1000):
    F = [i+1 for i in range(20)]
    random.shuffle(F)
    target,num = 0,0
    tmp = []
    for N in range(20):
        if N>=5 and N<10:
            if F[N]<sorted(tmp)[0]:
                target,num = F[N],N+1
                break
        elif N>=10 and N<13:
            if F[N]<sorted(tmp)[1]:
                target,num = F[N],N+1
                break
        elif N>=13 and N<15:
            if F[N]<sorted(tmp)[2]:
                target,num = F[N],N+1
                break
        elif N>=15 and N<16:
            if F[N]<sorted(tmp)[3]:
                target,num = F[N],N+1
                break
        elif N>=16 and N<17:
            if F[N]<sorted(tmp)[4]:
                target,num = F[N],N+1
                break
        elif N>=17 and N<18:
            if F[N]<sorted(tmp)[6]:
                target,num = F[N],N+1
                break
        elif N>=18 and N<19:
            if F[N]<sorted(tmp)[9]:
                target,num = F[N],N+1
                break
        elif N==19:
            target,num = F[N],N+1
        tmp.append(F[N])
    res.append((target,num))

すこーし雑ですが
こんな感じかなーと思います。
間違っていたらすいません。

結果としては
res[0:5]
[(3, 7), (1, 14), (3, 13), (2, 10), (3, 15)]

こんな感じでマッチングした順位と
マッチングした時の番目が計算されます。

さてこれで
どんな感じになったのかを見てみましょう。

ランダム計算しているので
試行するたびに結果は変わりますが

順位の平均は
3位くらいになりました!!!

内訳としては1000回試行した場合

順位01 : 回数286 : 割合28.6%
順位02 : 回数244 : 割合24.4%
順位03 : 回数193 : 割合19.3%
順位04 : 回数112 : 割合11.2%
順位05 : 回数061 : 割合6.1%
順位06 : 回数033 : 割合3.3%
順位07 : 回数033 : 割合3.3%
順位08 : 回数012 : 割合1.2%
順位09 : 回数007 : 割合0.7%
順位10 : 回数004 : 割合0.4%
順位11 : 回数007 : 割合0.7%
順位13 : 回数001 : 割合0.1%
順位14 : 回数001 : 割合0.1%
順位15 : 回数001 : 割合0.1%
順位16 : 回数002 : 割合0.2%
順位17 : 回数001 : 割合0.1%
順位18 : 回数001 : 割合0.1%
順位19 : 回数001 : 割合0.1%

このような順位の人と出会えて
マッチングできたことになりました。

何人目の人で出会えたかの平均は
10 - 11 人くらいに落ち着きました。

と言うことで戦略としては
秋山先生の戦略をそのまま用いて

最初の5人は無条件で見過ごす
10人目まではそれまでで1番ならマッチング
13人目まではそれまでで2番目以上ならマッチング

と言う感じですね。
候補が20人いるとして
ランダムに出会うとしたら
大体13人目までで良い人には
出会えていそうな感じです。

ただし、ここには大きな落とし穴があり
数学的に順位が高めの人と出会えて
無条件で結婚できるとされているので

出会えてもマッチングできるかどうか
と言う部分が抜けています。

まあ
イケメンか金持ちに限る

と言うのがネックでしょうねーー

まあ、より良い相手を見つけるには
良い戦略ではあると思います。

皆様も是非使ってみて下さい
それでは。


このページのトップヘ