iPhoneのキーボードは実際にどこまでのデータを見られるのか
キーボード拡張が読めるのは、自分が接続されている入力欄と、その周辺のごく限られた情報だけです。境界がどこにあるのか、そして「読めること」と「送れること」がなぜ別の問題なのかを整理します。
キーボード拡張は、自分が接続されているテキスト入力欄を読むことができます。この一文はまったく正しいのですが、多くの人がこの文から想像する範囲より、実際の権限はかなり狭いところで止まっています。
拡張に渡されているもの
入力欄をタップしたとき、iOSがキーボードに渡すのは、そのアプリではありません。渡されるのは、その一つの入力欄に対する狭い窓口だけです。テキストドキュメントプロキシと呼ばれるもので、そこから得られるのは、カーソルの直前にある文字、直後にある文字、現在選択されている範囲、そして入力欄自身の属性をあらわす少数の情報です。
この属性は普段ほとんど意識されませんが、キーボードが場面に合った見た目になるのは、これのおかげです。
- 入力欄が要求しているキーボードの種類。メールアドレス、URL、数字、電話番号など。別の欄をタップするとレイアウトが変わるのはこのためです。
- 入力欄が指定した自動大文字化や自動修正の挙動。
- 確定キーに表示すべきラベル。移動、検索、送信、完了など。
- 入力欄が現在空かどうか、そしてアプリが明るい外観と暗い外観のどちらを想定しているか。
キーボードがこれらを使って行うのは、文の区切りのあとで大文字にする、変換候補を出す、次の語の前に空白が要るかを判断するといった、入力の当たり前の処理です。受け取る文字列も文書全体ではなくカーソル周辺の文脈で、しかもアプリ側が要求より少ない量しか渡さないこともあります。特に長い文書では、近くの一定範囲だけが渡されるのが普通です。
さらに、この関係は入力欄ごと、入力の回ごとに区切られています。カーソルを別の欄へ移せば、キーボードが話している相手は別のプロキシに変わり、前の欄の記憶は引き継がれません。
見えないもの
境界の外側にあるものの一覧は、内側の一覧よりかなり長く、しかもキーボード側の行儀ではなくシステムによって強制されています。
- ほかのアプリの中身。拡張は入力中のアプリで画面に出ているあいだだけ存在し、フォーカスされた入力欄より先は見えません。下書きの上に並んだメッセージも、背後のページも、画面そのものも対象外です。
- セキュアなテキスト入力欄。パスワード欄や決済シートなどは自身をセキュアとして扱い、そこにカーソルがあるあいだiOSは純正キーボードに切り替えます。その文字にサードパーティ製のコードが立ち会うことはありません。
- クリップボード。初期状態のサンドボックスではシステムのペーストボードに手が届きません。キーボードの貼り付けボタンだけがフルアクセスなしで動かないのはこのためです。
- ネットワーク。初期状態では端末の外へ出る経路そのものがありません。リクエストもソケットも、送り先も存在しません。
- 一般的なプライベートデータ。連絡先、写真、位置情報、カレンダー、ヘルスケアはそれぞれ個別の許可が必要で、キーボード拡張はそれらを保持していません。
- 別のキーボードで打った内容。地球儀キーで切り替えれば、前の拡張が背後で見ているということはありません。そもそも動いていません。
「読めること」と「送れること」は別の問題
キーボードにまつわる不安の大半は、この区別に集約されます。入力中の欄を読むことはキーボードであることそのものに含まれていて、純正キーボードも自動修正や予測のために同じ文字を同じ理由で読んでいます。実際にリスクを伴う問いは、その文字が端末の外へ出られるかどうかで、そちらは別のスイッチが管理しています。
フルアクセスが切れていれば、拡張にネットワークアクセスはなく、送り先が存在しません。有効にすると、この制限が個別の権限のメニューではなく一つのスイッチとしてまとめて外れます。iOSの確認文があれほど強い調子なのはそのためです。能力が生まれたことは伝えられても、そのキーボードが実際に使うかどうかまでは伝えられないからです。
結果として、信じるか信じないかではなく、二つの実務的な確認が残ります。
- フルアクセスを切ったままで普通に入力できるか。文字入力にはいかなる権限も要らないので、権限を与えるまで動かないキーボードは、入力に不要なものを求めていることになります。
- 要求してくる場合、理由が具体的か。「すべての機能を使うために必要」では何も説明していません。「貼り付けボタンに必要」なら、スイッチを切ってそのボタンだけが止まることを自分で確かめられます。
キーボードは、端末上のほとんどのものより近い距離であなたの文章に接していますが、見えている範囲はブラウザのタブより狭いとも言えます。読むこと自体は仕事のうちで、確認する価値があるのは、その周りのサンドボックスが開いているかどうかのほうです。
よくある質問
サードパーティ製キーボードは、ほかのアプリで打った内容も見られますか。
見られません。拡張は入力中のアプリで画面に表示されているあいだだけ読み込まれ、渡されるのはフォーカスされている一つの入力欄への接続だけです。ほかのアプリを覗く手段はなく、入力していないあいだはそもそも動作していません。
キーボードにパスワードを読まれることはありますか。
セキュアな入力欄からは読まれません。パスワード欄や決済シートは自身をセキュアとして扱い、どのキーボードを追加していても、どんな権限を持っていても、iOSがその欄では純正キーボードに切り替えます。
入力欄を読めるのなら、フルアクセスの有無に意味はあるのですか。
読むことと送ることが別だからこそ意味があります。フルアクセスがなければ拡張にネットワークアクセスはなく、読んだ内容が端末の外へ出る経路がありません。その制限をまとめて外すのがフルアクセスで、警告文が指しているのはその点です。
自分のキーボードで試す
Kiboは、本物のメカニカルキー音とテーマ、RGBバックライト効果を備えたiPhone向けの無料カスタムキーボードです。アカウント登録も広告もなく、フルアクセスをオフにしたままでも使えます。