SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

伏石ちゃんは意図に反したい

20年周期でやってくる「GPS週数ロールオーバー」って何?【伏石ちゃんは意図に反したい】

FILE 0x06 GPSロールオーバー

解説:教えて那々子先生

先生
面白いもの見つけたな。旧工業高校時代の遺物か。GPSの週数ロールオーバーのことは聞いたんだな?
充希
はい。GPSは週番号と週初からの秒数で時刻を表現していて、週番号は10ビット整数だから、その最大値が1023。だから1024週目で0に戻るんですよね
GPSの週数ロールオーバー
週初の日付 週番号(10進数) 週番号(2進数)
1980/01/06 0 0000000000
1980/01/13 1 0000000001
1980/01/20 2 0000000010
   
1999/08/08 1022 1111111110
1999/08/15 1023 1111111111
1999/08/22 0 0000000000
   
2019/03/31 1023 1111111111
2019/04/07 0 0000000000
   
2038/11/14 1023 1111111111
2038/11/21 0 0000000000
   
2058/06/30 1023 1111111111
2058/07/07 0 0000000000
   
2078/02/13 1023 1111111111
2078/02/20 0 0000000000
先生
その通りだ
充希
でもそれなら64ビット整数にしておけば良かったのでは?
先生
それもそうだが、送信データが小さいに越したことはない。それに、まあ、週番号はほとんどおまけみたいなもんだからな。位置情報を取得するだけなら、週を跨いだことさえ識別できれば良いので、極論1ビットもあれば充分なんだ

 GPSの仕組みは、簡単に言うと4機以上のGPS衛星から受信したデータから現在位置を算出することによって実現されています。

 GPS受信機がGPS衛星に電波を発信して、衛星が位置を特定しているというイメージを抱く人も多いようですが、それは誤解です。

 しかし、衛星から一方的に受信したデータだけを用いて、どのように位置情報を算出するのでしょうか。

 その算出に用いられるのが、GPS衛星が発信するデータに含まれる以下の情報です。

  • 衛星の軌道上の位置
  • 発信時刻

 その中でも、発信時刻は、電波伝播時間からGPS衛星との距離を求めるために用いられるのです。

参考文献

充希
でんぱでんぱじかん?
先生
電波が伝わる時間のことだぞ
充希
なるほど

 したがって、位置情報を算出することだけを考えるなら、週の最終日の23時59分59秒と翌週初日の0時0分0秒の境界さえ正しく判定すれば良いということになります。極端な話、それを実現するためには、1ビットの情報(奇数週目か、偶数数目か)で充分です。毎週ロールオーバーの処理を行なえば機能上問題ないからです。

 しかし、現在の日付を知るためには、やはり週番号が必要となります。そして、その週番号はロールオーバー後、約20年間は増え続けます。

 そのため、週番号がいつまでも増え続けるという前提で組まれてしまっているソフトウェアが存在します。そのような実装では、週番号が0に戻るケースを正常に処理できません。その結果として、位置情報を正常に取得できなくなったり日付がおかしくなったりするのです。最悪の場合、データが壊れたり、人命に関わる誤動作を引き起こすリスクも想定されます。したがって、これは情報セキュリティや物理的なセキュリティ・セーフティにも関わる問題ともいえるのです。

 対策としては、まず、位置情報の算出の際にはロールオーバーを正しく検出するように実装することです。また、日付に関しては、製造年月日の週番号を記録しておき、それ未満の週番号の場合は、1024を足して処理するという方法が考えられます。そうすることで、製造年月日から最大1023週間は正常に動作できます。

先生
しかし、この方法だと、2回目以降のロールオーバーには対応できない。それに対応するには、GPS受信機に日付を記憶する機能と、各ロールオーバーにつき最低1回の起動が必要だ
充希
そうしないと、目を覚ましたときに、今自分が何周目か分からないということなんですね
先生
その通りだ。ちなみに、もう一つの対策方法として、今はL5信号のCNAVメッセージという新しい情報が使えるんだ。その週番号は13ビットに拡張されている。だから、8192週までいけるんだ。OKコンピューター、次のロールオーバーは、いつだっけ
コンピューター
2137年01月06日です
先生
その次は?
コンピューター
2294年01月07日です
先生
ってことだ
充希
60年以上も後で、その次は200年以上も後ですか。それなら安心ですね!

――2294年01月07日

???
Mi ne povas ricevi informojn pri loko!(位置情報を受信できない!)
???
Ankaux mi! (私も!)

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
伏石ちゃんは意図に反したい連載記事一覧

もっと読む

この記事の著者

井二 かける(イブタ カケル)

 情報処理安全確保支援士、プログラマー、作家。「物語の力でIT・セキュリティをもっと面白く」をモットーに、作家活動、セキュリティ啓発活動を行う。主な作品はアニメ「こうしす!」、小説「こうしす!社内SE祝園アカネの情報セキュリティ事件簿」(翔泳社)、マンガ「伏石ちゃんは意図に反したい ~ハッキングから始まる高校生活~」(京姫鉄道出版)など。 Twitter:@k_ibuta@kyoki_railway

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山口 しずか(ヤマグチ シズカ)

 やりたいことはなんでもやる精神で急成長中の漫画家。2019年よりマンガアプリにて商業連載デビュー。連載の傍ら企業のPR漫画や漫画動画など媒体・ジャンルにとらわれず時代に合わせた漫画を制作中。趣味はお酒と旅行。 Twitter:@shizuckey

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15436 2022/02/04 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー