AI時代、スマホアプリのAPIはどこまで見えてしまうのか

スマホアプリを使っていると、画面の裏側でどんなAPIが呼ばれているのか気になることがある。Androidでは、配布されるAPKに実行用のDEXコードや設定、リソースが含まれる。これはアプリを動かすために必要なものなので、公開後のAPKを調べれば、通信先やリクエストの形といった手掛かりを得られる場合がある。

ここで誤解しやすいのは、APKの解析が「署名を破る」ことではない点だ。APK署名は改変を検出し、正規の更新であることを確認する仕組みである。秘密鍵を解読しなくても、配布されたアプリに含まれるコードや設定は調べられる。もっとも、改変したAPKは正規アプリとして更新・配布できない。

AIは何を変えるのか

AIが暗号を魔法のように破るわけではない。変わるのは、コード中の文字列、通信先、データ形式、複数バージョンの差分から「どこを確認すべきか」を探すコストである。これまで専門知識と時間を要した調査の入口は、AIによって低くなっていく。

ただし、APIの存在や呼び出し方が分かっただけで、利用者のデータにアクセスできるわけではない。OAuthやJWTなどの認証方式がアプリ内から読み取れても、サーバーが署名、有効期限、利用者の権限、アクセス対象を正しく検証していれば、それだけで突破にはならない。

「隠すこと」は防御にならない

認証なしのAPIがすべて危険というわけでもない。公開コンテンツやアプリ初期設定など、誰でも取得してよい情報を返すAPIは普通にある。問題は、本来は利用者ごとの確認が必要な情報や操作まで、アプリの中にしかURLがないことを前提に守ろうとする設計である。

アプリからAPIが見えることを前提に、サーバー側で認証・認可・入力検証を完結させる。

守るべきなのはAPIのURLそのものではなく、誰が、どのデータを、どこまで扱えるのかというサーバー側の判定だ。AI時代には、アプリを難読化して「見つかりにくくする」努力だけでは足りない。アプリが解析されても成立する設計になっているかを、開発側は改めて問われることになる。

なお、アプリ解析や通信検証は、自分が管理するアプリ、または明確な許諾を得た対象で行うべきである。

参考

AIは学習したことを超えられるのか――相対性理論の再発見テストが示した現在地

少し前に以前の記事で、AIはできないことまで「できる」と言い張るため、最後は人が設計と検証をしなければならない、と書いた。

その根っこには、もっと単純な考えがある。現在の生成AIは、学習した情報やパターンを材料に答えを作る。だから、学習も観測もしていない世界の真実を、自力で保証付きに取り出せるわけではない。

最近、この点をかなり分かりやすく試した検証が報じられていた。テーマは「1900年以前の資料だけを与えた言語モデルは、アインシュタインの相対性理論を再発見できるのか」である。

1900年以前の知識だけで、相対性理論にたどり着けるのか

科学誌Natureは2026年9月、この種の検証を「Einstein test」として紹介している。独立研究者が、1900年以前に書かれたテキストに限定してモデルを学習させ、量子論や特殊相対性理論、一般相対性理論に相当する説明を作れるか試したものだ。

結果は、少なくとも「AIが自力でアインシュタイン級の発見を再現した」と言えるものではなかった。Natureの記事によれば、モデルは多くのケースで失敗し、ときには世界についての強い内部表現を持たないまま、もっともらしい単語を並べているように見えたという。

これは重要なテストだと思う。相対性理論は1905年以後の知識である。現代のAIに相対性理論を説明させても、それが理解や発見によるものなのか、膨大な学習データからの再構成なのかは区別しにくい。そこで学習資料の時代を切り、後世の答えが混じらないようにする。初めて「すでに正解を見ていたAI」と「未知の問題を解いたAI」を分けて確かめられる。

もちろん、この一件だけで「AIは絶対に新発見をできない」と証明されたわけではない。学習データから後世の記述を完全に取り除く難しさ、モデルの規模、与えた問題設定、外部ツールの有無など、検証には条件がある。実際、実験の公開者自身も、データへの後世の情報混入を避けるために、年による選別だけでなく、Einsteinやrelativityなどの語を含む文書を除外したと説明している。

「学習した以上のことはできない」は、少しだけ言い換えるべき

以前の自分の言い方を、より正確に直すならこうなる。

現在の生成AIは、学習済みの知識や規則の組み合わせを超えて、未知の世界について正しい答えを自力で保証することはできない。

AIは学習データにそのまま存在しない文章、コード、デザイン案を出せる。そこは「丸暗記しかできない」という意味ではない。既知の部品を組み合わせ、類似性を見つけ、候補を大量に出すことは非常に得意である。

しかし、それは「未知の事実を知っている」こととは別だ。米国国立標準技術研究所(NIST)は、生成AIが次の単語を予測する事前学習を基にしているため、もっともらしく、しかも自信ありげに誤った内容を出す「confabulation(作話)」が起き得ると整理している。知らないことを「知らない」と止まる仕組みではなく、文脈に続きそうな答えを生成する仕組みだからだ。

研究でも、学習時と異なる条件への一般化は弱点として繰り返し確認されている。Transformerを用いた検証では、学習した範囲内で正答しても、より長い未経験の問題では性能が大きく落ちた。別の基礎的な研究でも、モデルの能力は訓練分布への過度な適合によって、分布外ではうまく一般化しない可能性が指摘されている。

AIは発明の「代わり」ではなく、発明を速くする道具になる

これはAIを否定する話ではない。むしろ逆で、AIは人間の調査、設計、実験を圧倒的に速くできる。論文を横断して仮説の候補を出す。コードを書いてシミュレーションを回す。膨大な観測データから、人間が見逃していた規則性を拾う。ここには大きな価値がある。

ただし、候補を出すことと、それが現実に正しいと確かめることは違う。後者には、新しい観測、実験、反証、そして責任を持つ人間の判断が要る。AIに外部検索、計算機、実験装置をつなげればできる範囲は広がるが、その場合も新しい情報を得ているのは、AI単体の学習済みモデルではなく、道具と世界からのフィードバックを含んだ仕組み全体である。

相対性理論の再発見テストは、AIが便利かどうかを測るためのものではない。「それらしい答え」を出す能力と、「世界の新しい原理」を発見する能力は別物だと、きれいに可視化した点に意味がある。

AIに仕事を任せるほど、この区別は大事になる。AIが出した答えは、優秀な下書きや仮説として扱う。未知の部分ほど、根拠を確認し、実際に動かし、必要なら捨てる。その手間を省いてはいけない。

参考

約660万件の個人情報漏えい。タイムズカーの事件から考える、日本のITが抱える深刻な問題

見た目は最新でも、中身は20年前。AI時代になっても変われない日本企業

2026年9月、カーシェアリングサービス「タイムズカー」で大規模な個人情報漏えい事件が発生した。

運営元のパーク24が公表した情報によると、不正アクセスによって約660万件ものアカウント情報が第三者に取得されたという。

漏えいした情報には、氏名、住所、電話番号、メールアドレスだけでなく、運転免許証情報や本人確認書類の画像なども含まれていた。

クレジットカード情報の漏えいは確認されていないものの、非常に深刻な事件である。Park24

そして、この事件をきっかけに、IT技術者の間であることが話題になった。

タイムズカーのWebシステムに、約20年前の技術が使われている可能性が指摘されたのだ。

個人的には、この話を聞いて驚いたというよりも、「やはり日本の大規模システムには、こういう問題が残っているのか」と感じた。

もちろん、古い技術が使われていることと、今回の不正アクセスの原因は別問題だ。

しかし、これだけAIが進化した時代になっても、古いシステムを刷新できない日本企業の体質については、考える必要があると思う。

Webサイトには、利用者から見える部分と見えない部分がある

そもそもWebシステムは、大きく「フロントエンド」と「バックエンド」に分かれている。

フロントエンドとは、私たちが普段ブラウザで見ている画面のことだ。

例えば、ログイン画面、予約画面、ボタン、メニュー、画像などが該当する。

HTML、CSS、JavaScriptといった技術で構成されており、ブラウザに配信されたソースコードは誰でも確認できる。

一方、バックエンドは、その裏側で動作しているプログラムだ。

会員情報の管理、ログイン認証、予約処理、データベースへのアクセスなど、サービスの中核となる処理を担当している。

こちらは通常、利用者からソースコードを見ることができない。

普段からWebサイトの内部構造を気にしている人など、IT技術者でもなければほとんどいないだろう。

大半の人は、画面のデザインや操作性を見る程度だ。

だからこそ、仮にバックエンドが20年前に開発されたものであっても、フロントエンドだけを新しくすれば、利用者には最新のWebシステムに見えてしまう。

見た目が新しいことと、システムの中身が新しいことは、まったく別の話なのである。

タイムズカーで見つかった古いJavaフレームワークの痕跡

今回、タイムズカーのWebサイトについて、技術者から興味深い指摘があった。

公開されているHTMLの中に、次のようなJavaScriptの読み込み記述が残っていたという。

<script src="/view/teedaExtension/org/seasar/teeda/ajax/js/ajax.js?20201217"></script>

ここに登場する「Seasar」と「Teeda」は、かつて日本の業務システム開発で利用されていたJavaのフレームワークだ。

Seasar2は2000年代に普及した国産のオープンソースフレームワークで、2016年にサポートが終了している。

Teedaは、そのSeasar2を利用したWebアプリケーションフレームワークである。System Design Works

つまり、少なくとも公開されているWebページには、現在ではサポートされていない古い技術の痕跡が残っていたことになる。

ただし、この記述だけでバックエンド全体がSeasar2で動いていると断定することはできない。

また、今回の不正アクセスがSeasar2やTeedaの脆弱性によって発生したという証拠もない。

それでも、もし現在もサポート終了済みのフレームワークが本番システムの中核で使われているとしたら、セキュリティ面で大きな懸念がある。

なぜなら、サポートが終了したソフトウェアでは、新たな脆弱性が発見されても、公式の修正プログラムが提供されない可能性が高いからだ。

JavaのStrutsやSpringでも重大な脆弱性が発見されてきた

JavaによるWebシステム開発では、Seasar2以外にもさまざまなフレームワークが利用されてきた。

代表的なものが「Apache Struts」と「Spring Framework」だ。

これらは、Webシステムを効率的に開発するための仕組みを提供している。

ただし、どれほど広く使われているフレームワークであっても、セキュリティ上の問題が発見されることはある。

例えば、Apache Struts 2では2017年に「CVE-2017-5638」という重大な脆弱性が発見された。

特定の条件下で、外部から不正なリクエストを送ることにより、サーバー上で任意のコードを実行できてしまうというものだ。

また、Spring Frameworkでも2022年に「Spring4Shell」と呼ばれる脆弱性(CVE-2022-22965)が公表された。

こちらも特定の環境や構成において、リモートからコードを実行される危険性があった。

いずれも、攻撃者に悪用されれば、サーバーの乗っ取りや情報漏えいにつながりかねない重大な問題である。

もちろん、StrutsやSpringを使っているだけで危険というわけではない。

重要なのは、使用しているバージョンと、適切なセキュリティ対策が行われているかどうかだ。

新しい脆弱性が発見されれば、開発元から修正版が提供される。

しかし、古いシステムでは、その修正版を適用すること自体が難しい場合がある。

例えば、フレームワークを更新すると既存のプログラムが動かなくなる。

Javaのバージョンを上げる必要がある。

Javaを更新すると、今度は別のライブラリが対応していない。

このように、古いシステムほど依存関係が複雑になり、簡単には更新できなくなってしまう。

結果として、脆弱性が存在する可能性を認識しながらも、システムを変更できないという状況が生まれる。

セキュリティ上の問題が見つかっても、修正できない。これこそが古いシステムを維持し続ける大きなリスクなのだ。

なぜ古いシステムを使い続けるのか

では、なぜ企業は古いシステムを使い続けるのだろうか。

理由の一つは、システムを刷新するためのコストだ。

大規模なWebシステムでは、何十万行、場合によっては何百万行ものプログラムが存在する。

それらをすべて解析し、新しい環境に移行するには、膨大な費用と時間が必要になる。

さらに厄介なのが、長年の改修によって複雑化したプログラムだ。

当初の開発者はすでに退職し、設計資料も十分に残っていない。

なぜその処理が必要なのか、どの機能と関連しているのか、誰も正確に把握していない。

いわゆる「ブラックボックス化」である。

こうなると、システムを変更すること自体が大きなリスクになる。

結果として、企業は既存システムを延命させるという選択を取りやすくなる。

しかし、ここで考えてほしい。

その判断は、AIが登場する前の常識に基づいていないだろうか。

AIの登場によって、古いシステムの刷新は現実的になった

以前であれば、古いプログラムを解析するには、技術者が一つずつソースコードを読み解く必要があった。

しかし、現在は状況が大きく変わっている。

生成AIの進化によって、ソフトウェア開発の効率は飛躍的に向上した。

例えば、AIを使えば、次のような作業を支援できる。

  • 古いJavaプログラムの構造解析
  • StrutsやSeasar2から新しいフレームワークへの移行
  • 複雑なプログラムの処理内容の説明
  • 既存コードからの設計書の生成
  • セキュリティ上の問題点の洗い出し
  • 自動テストの作成
  • 新旧システムの動作比較

これらは、従来であれば多くの技術者が膨大な時間をかけて実施していた作業だ。

もちろん、AIがすべてを完璧に処理できるわけではない。

業務上の細かなルールや、特殊な例外処理などは、人間による確認が必要になる。

それでも、AIを使うことで、これまで費用や時間の問題から手を付けられなかったシステムの刷新が、現実的な選択肢になりつつある。

特に、古いプログラムの解析や、新しい言語・フレームワークへの移植といった作業は、AIの能力を活用しやすい分野だ。

ただし、セキュリティが重要なシステムでは、AIによるコード生成だけでなく、テストや第三者による検証も欠かせない。

重要なのは、AIにすべてを任せることではなく、AIによって人間の開発能力を大きく拡張することなのである。

日本はAI活用でも世界に遅れを取るのか

個人的に最も気になるのは、日本企業のAIに対する姿勢だ。

AIが登場しても、情報漏えいが心配、生成したコードが正しいか分からない、社内ルールが整っていないといった理由で、導入に慎重な企業は少なくない。

もちろん、企業がセキュリティや品質を重視するのは当然だ。

しかし、それを理由にAIの活用そのものを避けていては、何も変わらない。

例えば、機密性の高いプログラムであれば、外部にソースコードを送信しないローカル環境でAIを動かすという選択肢もある。

AIが生成したコードの品質が心配なら、人間がレビューし、自動テストで検証すればよい。

実際、従来のソフトウェア開発でも、人間が書いたコードが必ず正しいわけではない。

人間が作ったプログラムにもバグは存在するし、セキュリティ上の問題も発生する。

AIだけに完璧さを求めるのは、少し違うのではないだろうか。

むしろ重要なのは、AIをどのように使い、どのように品質を保証するかという仕組みを作ることだ。

世界中でAIを活用したソフトウェア開発が進む中、日本企業が従来の開発手法に固執していれば、開発速度やコスト面で競争力を失っていく可能性がある。

日本は平和ボケしているのだろうか

少し厳しい言い方になるが、こうした状況を見ると、日本は平和ボケしているのではないかと感じる。

今のシステムが動いているから問題ない。

大きな障害が発生していないから、わざわざ作り直す必要はない。

システム刷新にはお金がかかるから、もう少し先送りしよう。

そうした判断を繰り返しているうちに、技術はどんどん古くなっていく。

そして、いざ問題が発生したときには、システムの構造を理解できる技術者もいなければ、簡単に修正する方法もない。

今回のタイムズカーの事件について、古いフレームワークが直接の原因だったかどうかは、現時点では分からない。

しかし、もしサポートが終了した技術を使い続けていたのであれば、そのリスクをどのように管理していたのかは気になるところだ。

特に、数百万人もの個人情報を扱うシステムであれば、なおさらである。

企業にとって、システムを変更しないことは、一見すると安全な選択に見えるかもしれない。

しかし、変更しないことによって、セキュリティ上のリスクが積み重なっていく場合もある。

これまでの日本企業は、安定性や品質を重視することで、高い信頼を築いてきた。

それ自体は素晴らしいことだと思う。

ただ、その慎重さが、新しい技術を取り入れない理由になってしまっては本末転倒だ。

AIの進化によって、ソフトウェア開発の常識は大きく変わろうとしている。

今までのやり方が正しかったからといって、これからも正しいとは限らない。

最後に

タイムズカーの約660万件の個人情報漏えい事件は、単なる一企業のセキュリティ問題として片付けるべきではないと思う。

日本には、長年にわたって使われ続けているWebシステムが数多く存在する。

その中には、すでにサポートが終了したフレームワークやライブラリを使用しているものもあるだろう。

もちろん、古いシステムだからといって、必ずしも危険とは限らない。

適切な保守やセキュリティ対策が行われていれば、長期間にわたって安全に運用できる場合もある。

しかし、問題は、そうした対策が十分に行われているかどうかだ。

そして、今はAIという強力な技術がある。

これまで難しかった古いプログラムの解析やシステムの刷新も、AIを活用することで、以前より効率的に進められる可能性がある。

それなのに、従来のやり方を変えようとしないのであれば、非常にもったいない話だ。

20年前のプログラムを使っていることが問題なのではない。20年前の考え方のまま、システムを運用し続けることが問題なのだ。

そして、AIがこれだけ進化した今、その考え方を変える絶好の機会が訪れているのではないだろうか。


参考資料