利用規約を読んだことのある人間は、どれくらいいるだろう。
ソフトウェアをインストールするとき。アプリに初回ログインするとき。画面に表示される長大な文章。「同意する」のボタンを押すまで先に進めない。だが誰もが読まずにスクロールして、ボタンを押す。同意する。何に同意したのか分からないまま。
おれだって読んでなかった。オムニバースの利用規約。三百四十七条、全八万六千字。異能サブスクリプションに加入したとき、一秒で「同意する」を押した。
その規約が今、物理的な壁としておれたちの前に立っている。
「第一条。本サービスの利用者は、以下の条項に同意したものとみなす——」
通路を塞ぐ壁の表面に、条文が刻まれていた。白い文字が黒い壁面に浮かんでいる。AR上の構造体。ファイアウォールとは違う質感。光ではなく、文字そのものが物理的な硬度を持って空間に実体化している。
おれは壁に触れた。冷たい。指先がはじかれる。
「硬い。物理的に突破するのは無理だ」
「異能は?」
おれは右耳の後ろのインターフェースに触れた。異能を起動して、壁に干渉しようとした。不正アクセス——壁の構造にハッキングを試みる。
弾かれた。壁の表面に赤い文字が浮かぶ。
アクセス拒否。利用規約への不正干渉は、第二百十二条に基づきアカウント停止の対象となります
「規約自体がセキュリティシステムになってる。規約に書かれた条項が、そのまま防御ルールとして機能している」
リサが壁に近づいて、条文を読み始めた。目が左右に動いている。速い。元エンタープライズの人間は、こういうとき強い。大量の文書を読み込む訓練を受けている。
「クロヤ。この壁、規約の条文で構成されてるけど——条文同士の論理的整合性が壁の強度になってるみたい」
「どういうことだ」
「規約の条文が矛盾なく成立している限り、壁は完全な強度を保つ。でもこの規約には三百四十七条もある。八万六千字。これだけの分量を完全に矛盾なく書くのは——人間には不可能なはず」
おれの目が見開かれた。
「論理矛盾を見つけて指摘すれば、壁にヒビが入る」
「そう。矛盾する条文を同時に指摘すると、その部分の構造が崩壊する。規約の壁を突破するには——規約を読んで、矛盾を見つけて、声に出して指摘するしかない」
なんというセキュリティだ。誰も読まない利用規約を、読まなければ突破できない壁にした。Rootの悪趣味もここまで来ると芸術だ。
「リサ。お前、規約を読んだことあるか」
「エンタープライズ時代に、全文読んだ。二回」
「二回。さすがだな。覚えてるか」
「大まかには。でも、版が変わってる可能性がある。Root直轄エリアの規約は、外部に公開されてるものと違う条項が追加されてるかもしれない」
おれは壁の条文をスクロールした。AR上のインタラクションで、壁面の文字列を上下にスライドできる。膨大な量の条文が流れていく。
「全部読んでたら何時間かかる」
「この分量なら——最低でも十二時間」
「そんな時間はない。DDoSの効果が持つのはせいぜい数時間だ。地上のモデレーターが片付いたら、こっちに来る」
「なら、当たりをつけるしかない。矛盾が生じやすいのは——関連する条項が離れた場所に書かれているケース。たとえば、ユーザーの権利を定めた条項と、サービス提供者の免責を定めた条項は、往々にして整合性が取れていない」
リサの目が動いた。条文をスキャンしている。おれには真似できない読み方だ。おれはコードを読む人間だ。自然言語の法律文書は管轄が違う。
「——あった」
リサの声が鋭くなった。壁の中腹を指差す。
「第二十三条第七項。『ユーザーは自己の異能データに関する完全なるコントロール権を有する』。これ」
「それがどう矛盾してる」
「第百五十六条第三項と矛盾してる。『サービス提供者はサービス改善の目的で、ユーザーの異能データを制限なく収集・分析・利用する権利を有する』。ユーザーが完全なコントロール権を持っているなら、サービス提供者が制限なく利用する権利を持つことはできない。完全なコントロール権と制限なき利用権は論理的に両立しない」
おれは笑った。利用規約の矛盾。どんなサービスにも存在する、ユーザーへの建前と運営の本音の隙間。
「声に出して指摘するんだな」
「やってみる」
リサが壁に向かって立った。息を吸った。
「第二十三条第七項と第百五十六条第三項は矛盾している。ユーザーの完全なコントロール権と、サービス提供者の制限なき利用権は、論理的に両立しない」
壁が震えた。
リサの声が反響した。AR空間に波紋が広がる。壁の表面に亀裂が走った——第二十三条第七項の文字列と、第百五十六条第三項の文字列が同時に赤く発光し、その間の壁面にヒビが入った。
だが——崩れなかった。
ヒビは入ったが、壁は耐えている。周囲の条文が構造を補強して、崩壊を食い止めている。
「一箇所じゃ足りないのか」
「足りない。三百四十七条もある規約の二箇所が矛盾しても、残りの三百四十五条が壁を支えてる。もっと多くの矛盾を——連鎖的に指摘しないと」
おれは壁を見上げた。ヒビの入った部分から、隣接する条文が見えている。第二十四条。第百五十七条。関連する条項がヒビの周囲に集まっている。
「リサ。この近くの条文にも矛盾はないか」
「探してる。第二十四条第二項——『ユーザーの個人情報は、ユーザーの明示的な同意なく第三者に提供されない』。これと——第百八十九条第一項——『サービス提供者は、法令に基づく場合および業務提携先への情報共有において、ユーザーの個人情報を提供できる』。業務提携先への共有はユーザーの明示的同意を要件としていない。矛盾」
「言え」
「第二十四条第二項と第百八十九条第一項は矛盾している。明示的同意の要件と、業務提携先への無条件共有は両立しない」
壁が再び震えた。新しいヒビが走る。最初のヒビと繋がった。亀裂の網が広がっている。
「もう一つ。もう一つ見つければ——」
リサが目を走らせた。だが、条文の量が膨大すぎる。関連する矛盾を瞬時に見つけるには処理能力が足りない。
「おれがやる」
おれは右耳の後ろのインターフェースに触れた。異能を起動した。壁への直接干渉は弾かれる。だが——壁の表面に浮かぶ条文を「読む」ことは禁止されていない。読むのは閲覧だ。不正アクセスではなく正規の閲覧行為。
異能を使って条文をスキャンした。通常の読解速度の百倍で。文字列をパターンマッチングにかけて、論理的矛盾のある組み合わせを検出する。
「——見つけた。第三十一条第五項、『サービスの中断なき提供を保証する』と、第二百二十二条第一項、『サービス提供者は事前通知なくサービスを中断できる』。保証と中断権の矛盾」
「第三十一条第五項と第二百二十二条第一項は矛盾している。中断なき提供の保証と、事前通知なき中断の権利は両立しない」
リサの声がおれの解析結果を即座に読み上げた。
壁が——崩れた。
三つの矛盾が連鎖した。亀裂が壁全体に広がり、条文の文字がバラバラに崩壊して、光の粒子になって消えた。
人一人が通れる穴が壁に開いた。
「突破した」
「第一の壁を、ね」
リサが通路の奥を見据えた。穴の向こうに——もう一枚の壁が見えている。さらに奥にも。条文の壁は一枚ではなかった。何枚も重なっている。
「規約の多層防御か。ファイアウォールの次はWAFとIDSの組み合わせみたいだな」
「でも突破方法は分かった。矛盾を見つけて指摘する。私が規約を読んで、あなたがパターンマッチングする。二人なら——」
「ああ。できる」
おれたちは最初の穴をくぐった。次の壁が目の前に迫る。条文の密度が上がっている。奥に行くほど複雑になるのだろう。
だが、おれたちは二人だ。規約を読む人間と、矛盾を検出する人間。最高のバグハンティングチーム。
次の壁に向かって、おれは異能を起動した。