文春オンライン

ご存知ですか? 1月11日は「2038年問題」に起因するATMトラブルが発生した日です

なぜ34年も早い2004年にトラブルが起こったのか?

2018/01/11

 かつて1999年から2000年へと年が変わるにあたり、コンピュータが誤作動を起こすという、いわゆる「2000年問題」が取り沙汰されたことがあった。結果的にこのときは大きな混乱はなかったとはいえ、同様の問題は、じつは将来的にもいくつか予想されている。20年後の2038年1月19日に発生が懸念される「2038年問題」はその一つだ。いまから14年前のきょう、2004年1月11日には、この2038年問題に起因するプログラムの不具合から、日本国内の20行以上の銀行でATMが正常に利用できなくなるトラブルが発生した。

トラブルが発生した銀行は20行以上 ©iStock.com

「2038年問題」とは、UNIX(ユニックス)系のOS(オペレーションシステム)を用いたコンピュータが、協定世界時(UTC)の2038年1月19日午前3時14分8秒(日本時間では午後0時14分8秒)をすぎると、正しく時刻を認識できなくなることから生じる不具合を指す。UNIXの管理する日付時刻は、1970年1月1日午前0時0分0秒(UTC)からの経過秒数で保持されている。だが、ここで用いられている32ビットの符号付き整数では、先頭の1ビットは正負の符号を表すために使われており、2の31乗までの秒数(約21億秒)しか認識できないため、それを上回るとプログラムに不具合が生じてしまう。その秒数を超えるのが、2038年1月19日というわけである。

 この問題に起因する不具合が、34年も早い2004年に発生した。先述の銀行ATMのトラブル以外にも、KDDIが国内電話サービスの料金を一部で誤って請求していたことが後日判明する。誤請求は、1970年1月1日と2038年1月19日の中間にあたる2004年1月10日をすぎたとき、料金算出に使う時刻が過去の日時になったことが原因だった。このほかにもいくつかの企業でトラブルが報告されている。その背景としては、プログラミング時に、経過秒数の最大桁数を間違えて設定するなどの人為ミスと、それを発見できなかったチェック漏れが指摘された(『日経コンピュータ』2004年3月22日号)。

ADVERTISEMENT

 2038年問題とあわせて、2036年2月6日午前6時28分15秒(UTC)を過ぎると、NTP(インターネットを介して時刻調整に利用されるプロトコル)がオーバーフローを起こし、不具合が生じるという「2036年問題」も懸念されている。この場合は、経過秒数を32桁の2進数で計測しているため、秒数が32桁を超えると正しい時刻を認識できなくなることから生じる。2038年問題と同様、用いられているビット数に起因することから、問題を回避するために、64ビットOSへ切り替えるなどの対策が講じられている。

©iStock.com
ご存知ですか? 1月11日は「2038年問題」に起因するATMトラブルが発生した日です

X(旧Twitter)をフォローして最新記事をいち早く読もう

文春オンラインをフォロー