最近のスマホは「みちびき(QZSS)対応」を謳います。では スマホ単体で、みちびきの信号認証(QZNMA)まで検証できるのか? ── 専用受信機を作っている立場で一番気になる問いを実機で測りました。最初は「受信はするが認証用の電文は読んでいない」に見えたのに、生ログまで掘ったら結論がひっくり返りました。その誤診から真相までの記録です。
何を確かめたいか
QZNMA は、衛星が送る航法電文に電子署名を付け、受信側が内閣府配布の公開鍵で検証する仕組みです。検証には生の航法電文ビットが要ります。スマホが「QZSS を測位に使う」ことと、「QZSS の電文を1ビットも違わず取り出す」ことは別物。どこまでやっているかを adb と GnssLogger で実機の中を直接見て切り分けます。
1. チップの能力(GNSS HAL)
- 対応信号:GPS L1+L5、QZSS L1、Galileo E1/E5a、GLONASS L1、BeiDou B1I/B1C/B2a、NavIC L5
- NAVIGATION_MESSAGES 能力あり = 生の航法電文を出せる API(
GnssNavigationMessage)に対応 - L6帯(1278MHz)はゼロ
2. 誤診 ── 速報(GPSTest・深夜・室内寄り)
天空が開けた状態で GPSTest の Status を見ると、QZSS(日の丸フラグ)はこう出ていました:
| PRN | 帯域 | C/N0 | フラグ | 仰角 |
|---|---|---|---|---|
| 195 | L1 | 39〜40 | A | 13° |
| 199 | L1/L5 | 39.6/42.9 | A | 66° |
C/N0 は強いのにフラグが全部 “A”(Almanac=暦の概略のみ)。E(エフェメリス)も U(測位に使用)も無い。ここで一度「受信はするが、認証用の電文は読んでいないのでは」と結論しかけました。── これが早とちりでした。
3. 真相 ── 確定(GnssLogger の生ログ)
時間をおいて屋外で GnssLogger に Navigation messages を生ログさせ、中身を解析すると、絵が一変します。
(a) QZSS はエフェメリスを復号し、測位に使っていた
QZSS Svid 194: Cn0=44.0 UsedInFix=1 Almanac=0 Ephemeris=1
QZSS Svid 199: Cn0=38.8 UsedInFix=1 Almanac=0 Ephemeris=1
深夜の “A どまり” はコールド状態(取得直後)だっただけ。条件が整えばエフェメリスを航法電文から復号し、QZSS を測位に使用していました。
(b) QZSS の生航法電文が、実バイトで降っている
302件の Nav(航法電文)レコードのうち、QZSS 系が多数:
QZSS_L1CA25件、QZSS L1 系 36件、QZSS L1 拡張(type 0x0401)15件- Svid 194 / 199 から、
-1埋めではない中身の入った生バイトが連続
(c) 決定打 ── 「SV60」ページが降っていた
QZSS の自己認証署名は、L1 C/A の中の SV ID = 60 のページに乗ります。生ログにそのものが居ました:
Nav,194,1025,1,60,5, -35,63,85,126,-80,-3,-27,35,-49,33,-104,...,127,-1,-1,115
↑MessageId=60 ↑実データ(空ページではない)
QZSS(Svid 194)から MessageId=60 の生バイトがアプリ層に届いていました。QZNMA 署名が乗る “SV60” ページが、GnssNavigationMessage 経由で取れているということです。
4. 「スマホ単体で QZNMA」への答え(改訂)
| 機能 | スマホ単体 | 根拠 |
|---|---|---|
| QZSS で測位 | ○ する(条件次第で used-in-fix) | Ephemeris=1, UsedInFix=1 |
| QZSS自己認証(L1)の素材取得 | ○ 届いている(SV60 ページまで生バイト) | Nav レコードに MessageId=60 |
| L6E QZNMA(GPS等も認証) | ✕ 不可 | L6帯を受信できない |
| CLAS(cm級補正) | ✕ 不可 | 同上 |
| 真方位(GNSSヘディング) | ✕ 不可 | 単一アンテナ |
訂正します。「電文を読んでいない」は誤りでした。Pixel 10 は QZSS L1 の生航法電文を、QZNMA 署名の乗る SV60 ページまで含めてアプリに渡しています。つまり「スマホ単体での QZSS 自己認証」は原理的に不可能ではなく、検証に必要な”原本”はすでにアプリ層に届いている。
ただし、これは「素材が取れる」ところまで。実際に署名検証を成立させるには、3分割される署名の全セグメントと、署名対象の RNAV を該当エポックで取り切る必要があり、スマホのデューティサイクル下でそれが安定するかは別問題です(次回そこを詰めます)。
まとめ
- Pixel 10 は QZSS を L1+L5 で受信し、エフェメリスを復号して測位に使う(”almanac どまり” はコールド時の一時状態)
- QZSS の生航法電文が
GnssNavigationMessageで降っており、QZNMA 署名の乗る “SV60” ページまで実バイトで取れている - よって 「スマホ単体で QZSS 自己認証」は素材レベルでは到達可能(フル検証の安定性は要追試)
- 一方 L6帯ゼロ=CLAS も L6E QZNMA(GPS等のクロス認証)も不可、真方位も単一アンテナで不可。これらは専用受信機の領域
教訓:衛星の「使用フラグ」だけ見て “電文を読んでいない” と判断したのは早とちりでした。生ログまで降りて初めて、SV60 まで手元に届いているという本当の姿が見えました。スペック表の「QZSS対応」の遥か奥に、認証の入口は静かに開いていた、という話です。

コメントを残す