backstage

合唱音源の新着情報の舞台裏

ニンジャスレイヤーと2038年問題

f:id:s2terminal:20160615013707p:plain

ニンジャスレイヤー第3部最終章の予告が行われました。 それまでのエピソードからも日付を示唆する文言が度々含まれていましたが、最終章が 2038年1月18日 という日付になることが明言されました。

ninjaheads.hatenablog.jp

アガメムノンは2038年1月18日深夜に月面メガトリイ基地でアルゴス・システムのリブートを行う。インターネット再定義のためにアルゴスのタイピング速度が一時的に減じるこの夜だけが、ハッキングで攻撃しうる唯一のチャンスである。アマクダリが再定義を完了させれば、Y2K規模の災厄が再び地表を覆うだろう。その後、アマクダリが全てを支配するのだ。

2038年1月18日深夜にY2Kと同等の災厄が起きる とあります。

これは、「Y2K(2000年問題)」と「2038年問題」という、現実に起こりうる2つの年問題が元ネタになっています。

2000年問題

西暦の下2桁を使って年月を判定するシステムを組んでいると、1999年から2000年になった瞬間に、コンピュータは2000年を1900年を勘違いしてしまい、誤動作してしまうのではないか?という問題です。Y2Kとも呼ばれます。

実際の年月 データ コンピュータの認識
1999年11月 9911 1999年11月
1999年12月 9912 1999年12月
2000年1月 0001 1900年01月

くわしくは:2000年問題 - Wikipedia

ニンジャスレイヤーにおける2000年問題

西暦二千年を迎えた瞬間、世界中でUNIXが多数爆発し、優秀なUNIX技術者が大勢死んだ

(ニンジャスレイヤー第3部「ダークサイド・オブ・ザ・ムーン」より)

限られたIPと違法プロキシサーバ基地を巡り、暗黒メガコーポ群主導による論理物理両面での電子戦争が勃発した

(ニンジャスレイヤー第2部「キョート・ヘル・オン・アース」より)

ニンジャスレイヤーは近未来の日本を舞台としており、Y2Kは過去の出来事として語られます。 しかし、現実の世界とは異なる点があります。

  • ニンジャスレイヤーの世界では、2000年時点でIPv4枯渇問題が解決されていないようで、 固定IPを持つプロキシサーバ等は貴重な資源である
  • ニンジャスレイヤーにおけるコンピュータは、バッファオーバーフロー等の不具合が起きると 物理的に爆発する

そのため、以下のように現実世界における2000年問題とは大きく異なる結末を迎えます。

  1. 2000年問題世界中のUNIXが爆発
  2. 爆発の影響でUNIX技術者が多数犠牲となる
  3. 技術者が足りず、IPアドレス枯渇が深刻になる
  4. 残されたIP資源を巡って 戦争が勃発

この戦争の影響で日本は電子的に鎖国、独自の発展を遂げることになります。

何度読んでもこの設定を考えた作者は天才だと思います。

2038年問題

2000年問題と似たような問題なのですが、エンジニア以外には理解しづらく、影響範囲が大きいのが、この2038年問題です。

UNIXでは、UNIXTIMEというデータが広く使われています。 UNIXTIMEとは 1970年1月1日からの経過秒数で時刻を表したもの です。

たとえば、2016年6月14日23時30分10秒のUNIXTIMEは、「1465914610」となります。

$ ruby -e 'require "time";puts Time.parse("2016-06-14 23:30:10").to_i'
1465914610

現代のコンピュータは性能が良いので、とても大きな値を取り扱うことができます。 しかし過去のコンピュータでは、このUNIXTIMEを 符号付き32bit整数 で取り扱っていました。

この「符号付き32bit整数」というのは、約21億5千万が最大値となります。 21億5千万というのは大きな数字に見えますが、21億5千万秒は 約68年 です。

そのため、1970年1月1日から約21億5千万秒後、 2038年1月19日3時14分8秒以降、コンピュータが時刻を正しく扱うことができなくなる というのが、2038年問題です。

実際に、先ほどのUNIXTIMEを31桁2進数(符号付き32bit整数の仮数部)で表すと、以下のようになります。

$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2016-06-14 23:30:10").to_i)'
1010111011000000001010011110010

$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2038-01-19 12:14:06").to_i)'
1111111111111111111111111111110
$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2038-01-19 12:14:07").to_i)'
1111111111111111111111111111111
$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2038-01-19 12:14:08").to_i)'
10000000000000000000000000000000
$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2038-01-19 12:14:09").to_i)'
10000000000000000000000000000001
$ ruby -e 'require "time";puts sprintf("%31b", Time.parse("2038-01-19 12:14:10").to_i)'
10000000000000000000000000000010

12時14分8秒に桁があふれたのがわかると思います。 (グリニッジ標準時で午前3時14分8秒なので、日本時間では12時となる)

2038年問題自体は、現実世界でも待ち受けている、私たちが立ち向かわなければならない問題です。

くわしくは:2038年問題 - Wikipedia

ニンジャスレイヤーにおける2038年問題

世界中のUNIXはオーバーフローを起こし、Y2Kにも比肩する爆発と災厄を引き起こすはずです

(ニンジャスレイヤー第3部「スルー・ザ・ゴールデン・レーン」より)

すでに 2038年問題の起きるまさにそのタイミングで、Y2K規模の爆発が起こる であろう事が劇中で指摘されています。

しかしこれが2038年問題による脆弱性なのか、敵組織による何らかの策略により故意に引き起こされる物であるのかはハッキリしていません。

確実なのは UNIXが爆発する ということです。

ルートDNSサーバ

2038年問題について語られると同時に、以下の様なセリフも見られます。

ヒエラルキー最上位に位置する神秘的なUNIXサーバがかつて地球全土に13個存在し、幾つかが滅びたという。その残されたひとつがジグラットなのだ

(ニンジャスレイヤー第3部「スルー・ザ・ゴールデン・レーン」より)

この「ヒエラルキー最上位に位置する神秘的なUNIXサーバ」とは、現実における ルートDNSサーバ が元ネタと思われます。 (ジグラットとはカスミガセキ・ジグラットのこと。ネオサイタマ市役所等を取り込んだ巨大建造物)

実際にルートDNSサーバというのは世界に13個のみ存在し、それを構成するうちのひとつは霞ヶ関から数kmの地点である東京大学にあるそうです。(※実際には地理冗長されているので、サーバ13個=13箇所ではないそうです)

ニンジャスレイヤー第3部の敵組織は、世界中のインターネットを支配するカギを握る何らかのサーバを持っており、2038年問題のタイミングを狙ってなんかするようです。

備えよう。

まとめ

  • IPv6移行は大切
  • 64bit整数は偉大
  • UNIXは爆発する