ハッシュ

1997 年頃だったか、マイクロソフトが 「ActiveX」 というインターネットの新しい技術を発表した。今我々が使っているインターネットエクスプローラーという名前のブラウザも、この頃初期のバージョンが発表された。

我々技術者は、その新しい技術を使ってソフトを開発しなければならなくなった。マイクロソフトのずさんなセキュリティのために、全世界のウィンドウズを使うユーザーは現在、ウィルス付きメールや月に 1度のパッチを充てなければならないという煩わしさに悩まされ続けているが、すべてはここから始まった。

この頃、マイクロソフトはそれぞれのソフトウェアに世界で一意(=ユニークな)番号を与えるから、それを使え、と言い出した。

世界中のプログラマは、個人や企業に関わらず、ウィンドウズのプログラムを作ったら、そのプログラムを識別するために番号を付けるのだ。

ちょっとパソコンに詳しい人なら、ウィンドウズの 「レジストリ」 というコトバを聞いたことがあるだろう?実は、そこにソフトの番号がたくさん貯められているのだ。

しかしすぐにこんな質問が思いつく。

「いったい誰がどうやって他のプログラムとバッティングしないように番号を振るのか?」

まず自分で勝手に振ったら、世界で無数にあるウィンドウズのソフトの番号とバッティングしそうだ。それは容易に想像できる。

では、マイクロソフトにいちいち申請をして番号を振ってもらうのか?オンラインですべて自動で行われたとしても、ちょっと面倒だ。マイクロソフト自身もそんな番号を管理するのはコストがかかって仕方ないだろう。

実はマイクロソフトは、自社のソフトウェア開発のためのソフト(ソフトを作るソフト)が、自動的に番号を振るから、それを使え、といっていた。

そんなことが可能なのだろうか?世界で、本当に自分しか所有しない番号、、しかも誰ともその番号を調整しないで・・・

このとき、ウィンドウズのソフト開発に非常に詳しい同僚に質問してみたが、実は上の説明をされただけで、どうしてそうなるのかまでは説明してもらえなかった。しかし、今ならその仕組みを説明できる。ヒントは、件名にある「ハッシュ」だ。まずはググってみよう。

上では、マイクロソフトが「世界で唯一の番号を各人が作ったソフトに自動的に割り振る」という話をした。

実際にそんなことは可能なのだろうか?答えは、「事実上」 可能なのである。事実上と、枕詞がつく理由は、「十分に実用的に耐えうる」からである。

それには、このメールのタイトルのハッシュというものを使う。

中高で 「関数」 を習ったが、ハッシュとは関数の一種だ。

この関数は特殊で、A というものを入れると B というものが出てくるが、一度 A を B に変換してしまうと、元のAには絶対に戻せない、というものだ。戻せないというより、元のAは何だったかわからない、といった方が正しい。

たとえば 1234 を入力すると 7890 が出てくるような感じである。7890 から 1234 を復元する方法はこの世に存在しない。1234 を入力すると必ず決まった値である 7890 が出てくるもので、1234 を入力したときの 7890 という値は、この世の中で(おそらく)あなたの他に誰も 7890 という値を持っていないものである。

では 1234 から 7890 どうやって計算するのか?というと、複雑な計算手順が必要らしく、実は私にもわからない。ひとつ言えるのは世界で唯一の数字はどんなものか?と少し考えると、「時刻」 があると思う。その計算をした瞬間の時刻をそのまま数値化すれば、あなたとまったく同じ計算をした人はおそらくいないだろうから、時刻は唯一であると言える、というものだ。

しかしやはり本当にその瞬間に全世界で同じ計算をした人が存在しないかと言われたら、ひょっとしたらいるかも知れない。だから、時刻という値はハッシュであることの最有力候補であるけれども、もっともっとバラバラな数字が必要だ。だからハッシュを計算する関数、つまりハッシュ関数はもっと複雑な計算を行い、その出力が世界で唯一であることを数学的に保証する、というものなのだ。

ハッシュは、乱数(ランダムな、バラバラな数字)に見えて、実はインプットが同じなら出力も常に同じ、という性質を持っている。

ではハッシュは日常生活でどんなところに使われているのだろう?

  • プログラムを世界中でたった1つに特定する。→マイクロソフトのソフトウェア ─── Excel や Word、IE でさえも ─── 世界中で一意の番号が振られている。
  • メールのメッセージ ID。メールには、 d2384969b8419d7a8273c53a0c51d819@twinkle.cc などという番号が振られている。もし同一時刻に同一者から同一内容が送られれば この ID は同じである。1 秒でも遅れて同一内容のメールを送ってもこの値はまったく違ったものになる。
  • 本人確認の手段。社員番号が 12435700 で、誕生日が 19700101、名前が「アオイヤスヒコ」というデータからハッシュ値を求める。この 3 つの要素を持っているのが世界中でただ 1 人だったとすると (実際には 1 人に特定するためにもっとたくさんの要素を 組み合わせる必要があるのだが)、ここから生成されたハッシュ値、たとえば 2a2c110bfc7f4875f0ab7a5393b7a7bf という文字列は、アオイヤスヒコが持っている 個人情報からしか生成されない。そのため、この値は本人確認に使用できる。この文字列を伝えられた側は、この文字列からアオイヤスヒコであることは確認できるが、元の個人情報を復元できないのだ。
  • 医療分野では、上を応用すると、本人の身元を明かさないまま、統計データを処理できる。統計データを処理するにあたって、多くの場合はその本人の「本名」はいらないからである。本名自体から求めたハッシュ値を使えば良いのである。
  • パスワードの保存。実は、このことが書きたくてハッシュのことをつらつら書いてきた。 ウェブサイトではユーザー名とパスワードを入力させられるケースが多々ある。このとき、ユーザー名は誰に知られてもいいが、パスワードは本人のみ知っているものである。素人がシステムを作ると、パスワードを生のままサイト側に保存してしまう。もう少し気の利いたエンジニアだと、パスワードを暗号化して入れる。しかしパスワードを暗号化すると、パスワードが漏れてしまったとき、復元方法もバレると結局もとのパスワードもバレてしまう。そこでハッシュの登場である。システムには、ユーザーが入力したパスワードのハッシュ値を記録・保存しておく。ユーザーがサイトにアクセスしてパスワードを入力したときには、常にハッシュ値を計算してシステム内に保存されているものと 等しいか比較するのである。こうすれば、パスワードとして保存していた 「つもり」 のハッシュ値が万が一漏れたとしても、誰もその文字列からは元のパスワードを復元 することはできない。この方式は拙作のサイト i-Services でも使っている。

    実はもっといろいろな応用があるが、ちょっと難しかったと思うので今回はここまで。

すごいぞイチロー

自ら挑んだ大リーグでの新記録樹立という偉業を成し遂げた
イチロー。本当にすごいと思う。

2004/10/03 asahi.com より抜粋

年間最多安打を記録した試合後、日本の報道陣とのやりとりは約40分続いた。
普段は口数の少ないイチロー選手が、晴れやかな笑顔で、自らの偉業や今後の
目標について語った。記者会見などでの一問一答は次の通り。

――「257」という数字をとんでもないところと話していたが

今思うのは、小さいことを重ねることが、とんでもないところに行くただ一つの道だと感じている。

すごいなイチロー。小さな努力が大きな成功につながる…か、平易な言葉も偉業を成し遂げた彼が言うからこそ本当に重みがある。

――届いた実感は?

(今季)やっている間は常にそこを越していくわけだから実感はないが、こういう数字は、時間がたってとんでもないことだと気づくんだと思う。

本人は、コツコツ仕事をしていたのだから、確かにそうなんだろうと思う。

――周囲に期待されて苦しかったのでは

やっている間にプレッシャーから解き放たれるのは不可能。背負ってプレーするしかない。でも、ドキドキ、ワクワクとかプレッシャーが僕にとってはたまらない。これが勝負の世界にいる者のだいご味。それがない選手ではつまらない。

オリンピックの選手とかもそうだけど、よく思うのはプロというのは、「プレッシャー込み」 でプロなんだと思う。それは、松井を観ているとこれは言葉に表されなくてもひしひしと伝わってくるものがある。
同じプロのイチローもそうだったんだな。

 ――257安打を意識し始めたのはいつか

周囲が教えてくれた。具体的にイメージするようになったのは200本を超えてから。普通にやっていけばできるかもしれない、と考えた。

この「普通にやっていれば」というのが素晴らしい。

――この記録はもう破られないと思うか

84年間なかったのだから簡単ではないと思う。10年間はやめてね、という気持ちはある。でも、破られることもあるでしょう。願わくは(更新する打者は)自分でありたいと思います。

イチロー、カッコイイ、最高にカッコ良すぎる。

――新記録の原動力は

野球が好きだということですね。それと、今季に限って言えば、チームが勝てない状況が続き、そこに身を委ねることができなかった。プロとして勝つだけが目的ではない。プロとして何を見せなくてはいけないか、を> 忘れずにプレーした。

プロは、「プロとして何を見せなくてはいけないか」という気持ちは忘れてはいけないらしい。それがプロなんだ。。

――打率4割への挑戦はどうか

打率はコントロールできてしまう。「野球が好きでグラウンドに立ちたい」というのがぼくの原点。打率を目標にしたら、打席に立ちたくなくなる可能性がある。それは本意ではないから、目標にはできない。

なるほど・・・あくまでもホンモノを目指すということか。
妥協はない。

――自分にとって、満足できるための基準は

少なくとも誰かに勝った時ではない。自分が定めたものを達成した時に出てくるものです。

(10/03 08:57)

記録を達成したイチローの、自身の言葉も記録的な重さ!

2004/10/02 asahi.com より。

「こちらに来て強く思ったのは、体が大きいことに、そんなに意味はない。僕は大リーグに入ってしまえば一番小さい部類です。でも、こういう記録を作ることもできた。大きさや強さに対するあこがれが大きすぎて、自分自身の可能性をつぶさないで欲しい。自分自身の持っている能力を生かせれば、可能性はすごく広がると思う」
(10/02 21:26)

シリコンバレーに来てからは、アメリカという国は、「世界選手権」 だと思った。もちろん、白人としてのアメリカ人もいるのだが、シリコンバレーでは、それこそ国を捨てて来ているような中国人やインド人は、とても優秀な人ばかりだ。鎖国を 300 年以上も続けて来た日本と違って、その国の自体も移民によって建国されたアメリカは、もともと移民に対して寛容な国だ。

そのアメリカで日本人であるイチローが、アメリカを象徴するベタベタな文化=野球で、記録を作ったことは、日本人社会に非常に大きなインパクトがあったと思う。

2004/10/02 asahi.com にはこうもある。

日本の首位打者が海を渡ったのは01年。「どんなに実績があろうとも、『なめんじゃねえぞメジャーを』『なんぼのもんじゃい』という雰囲気をすごく感じた」

こっちに来て働くようになり、これは私も強く感じた。

「お前が日本でどんなことをしてきたか俺たちは知る由もないが、お前の実力は実績で示すことだな」

チームで仕事を行い、責任が分散される仕組みが確立されている日本と違って、個人主義が徹底して仕事まで個人の能力が要求される (特に私の場合は研究する仕事だから) 周りは本当にそう言ってるみたいだった。

さらに自身の記録を塗り替えたイチローはこう話す。

2004/10/04 asahi.com より抜粋

3年ぶりに首位打者を獲得した。感慨をこう話す。「自分がどれだけできても、それ以上にやった人がいたら一番(首位打者)にはなれない。改めて奪い取った。そんな感じです」
他人の記録を追うのは簡単。でも自分の記録を追うことは大変なこと。だってそれが自分の限界だから」

こういうことを言うのは誰でも簡単に言える。でもその言っているのが記録を達成したイチローだからこそ、この言葉に意味が出てくるのだと思う。日本人は、自分の子どもにイチローのすごさを彼の言葉を引用しながらなんで彼はすごいのかを徹底的に教えて行くべきだな (自戒を込めて)!!。 それが次のイチローにつながると思う。

アメリカの運動会

 子どもが通う小学校の運動会、競技種目はなんと・・・1 種目のみ!!

 その名は 「Walk-A-Thron」 というらしい。すごい…俺も驚いた。

 校庭(ほとんど芝生)の脇のトラックを、ただひたすら周る。走らないで、歩く。ウォーキングってやつだろうか? 1 周終わると、各人、自分のもってる紙に(昔の駅の改札よろしく)、パンチしてもらって、一定周回走るごとにアイスキャンディー(4周)とかジュース(8 周)とか水筒(14 周)とか…(最高 60 週くらい)がもらえるしくみ。とりあえず開始は朝 8 時半からだったけど、開会式とかはないから少々遅れてもいいし、てか、自由参加だから(でも人はいっぱい来てる、それなりに事前に寄付させられてるから)、自由に歩いて(いや、俺は子どもが歩いてるの観てるだけど)、ずっと同じところを歩いてるのは飽きるから子どもも疲れたら適当に休んで、また歩いて・・・って感じで、1 周 1 マイル=1.6km あったのか?うちの子らは、10 周目くらいからダレてきたけど、尻を叩いて 3 つめのプレゼントである水筒がもらえる 14 周まで歩かせた!w

 トラックはコースができてるから、うちの子のように目を離してもコースからはずれることはまずなさそう。ところどころにはボランティアの父兄が「スプレー(霧吹き←暑いから)」 を持って 「ロシアンルーレットー♪」 なんて言いながら子どもにかけたりして監視してるので、まぁ親も安心して観てられる。

 で、その頃にはお昼だったので終わりにしてその場を後にしたんだけど、閉会式もないからそのまま帰りたいときに帰れちゃう・・・日本みたく、「運動会の日は深夜から並んで場所取りして・・・」 とかはありえないし(ひたすら歩くだけだから。まぁ、親もたまには一緒に)、「徒競走で順位はどうする」 とか 「手をつないでゴールだ」 とか 「リレーの選手はどうする?」 とか悩まなくてとてもいいシステムだと思った。

 すごくアメリカ的!!!

映画 『ペイ・フォワード (Pay It Forward) 』 (2000)

そおか、私のしたかったこと (してきたこと) は 「ペイ・フォワード (Pay ItForward)」 だったのか、と、遅ればせながら最近気がついた(今回も、相変わらず独り言です)。

 

たとえば、2kids.net で懲りずに双子関連のメーリングリストを動かしてたり、https://twinkle.cc/i/ でケータイ向けの超マジメサイトを(かれこれ 4 年以上になるなぁ)やってたりするけど、これら無償奉仕は、自分としては、何となく、というよりは、

「ネットにアクセスすればすごく有用な情報をウェブなんかで公開している人がいて、その本人が誰とは特定できないけどたくさん利用させてもらって、今までずいぶんお世話になってきた。だから自分もネットを通じて自分のできることを誰かに還元したらいいんじゃないか?」

…みたいな感じでやってきた。実は、今まで自分の中では 「(自分が)恩恵を受けたその人が特定できるんだったら、その人に恩返しすればいいじゃん」 というモヤモヤがあった。それは、至極まっとうな考えだとも思っていた。それでもなぜか自分はその人に恩返しすることなく、別の方法で、しかも別の人に少しでも自分のできることが役に立ったらいいな、と思っていた。この理屈は自分で発想しておきながら、今まで自分自身の中で説明が付かなかった。しかしそのモヤモヤは解決したので以下に説明する。

冒頭に書いたように恥ずかしながら最近、「Pay It Forward」 という言葉を知った。ググってみると、https://www.awaji-net.com/pay-forward/ なんかには

「人から受けた厚意(親切)を、その相手に返すこと・・・ペイ・バック」

「受けた相手に返すのではなく、『次へ渡す』 こと・・・ペイ・フォワード」

と書いてある。その後このページには、なんか新興宗教じみたことが書いてあって、、、

ワーナー・ブラザーズ配給: 『ペイ・フォワード』 可能性の王国
原題 『Pay it Forward』: 西暦 2000 年度作品

11 才の少年トレバーは、社会科の授業 「今日から世界を変えてみよう」 という課題を出されます。トレバーが考え付いた奇想天外なアイデアは、人から受けた厚意をその相手に対して恩返し = "ペイ・バック" するのではなく、他の誰かに違う形で先贈りして善意を広げていく = "ペイ・フォワード" 映画の中では 「次へ渡せ」 という言葉で翻訳されています。

とたどり着く。なんだ、映画のタイトルだったのか。最近全然映画観てないので、知らん。。。

その後に、目から鱗の説明がある。

「システムとしては、非常に単純明解なものです。つまり、人は他人から厚意を受けた場合、その相手にお返しをしようとしますね。そうすると、その厚意は当事者間のみで完結して終わってしまいます。しかし、この "厚意" を受けた相手に返すのではなくて、次の人に別な形で 『渡して』 みたら、どうなるでしょう?それを、 1人の人が別の新たな 3 人に 『渡して』 いったとしたら・・・」

そうか、「Pay back」 は、自己完結してしまうのか! (←ココがポイント!!) 「Pay Forward」 は、ねずみ講のように、厚意を次に渡して行けば・・・という発想なのか ─── そうか、私は数年前からコレを志向していたんだなーと、私の心の中のモヤモヤは解き放たれた。

私がどうして 「(Winny などを用いた)違法ファイル交換」 に同意できないかの理由も Pay It Forward の思想で説明できる。つまり、違法ファイル交換は一見 Pay It Forward の仕組みを利用していながら、「世の中にとって決してプラスにならないこと」 を次へ渡す方法なのだ。負の連鎖だ、と言えば簡単だけど、私は妙に自分で納得できた。

しかし上に挙げたウェブサイト、なんか最初あやしいな、と思ったら、結局は T シャツ販売?いや・・・そうでもなさそうだけどよくわからん。でもコレって思想であって運動じゃないんじゃないかなぁ…?こう、親から子へ教えていくべきこと、みたいな。

まぁ、とにかくコレは 「築城 3 年、落城 1 日」 と共に、うちの家訓にしよう。

循環呼吸奏法

  Kenny G とは、世界的に有名な SAX 奏者であり、Smooth Jazz という新しい分野を切り開いたのは彼だといっていい。

  その昔私は、来日した Kenny G のコンサートを代々木体育館に観に行った(というか聴きに行ったというべきか)ことがある。彼はエンターテイナーで、非常にサービス心旺盛なコンサートであった。彼の音楽は pure そのものだが、彼の人柄などが伝わってくるものであった。

  彼は、これまでクリスマスシーズンになるとホリデーアルバムを出しているのだが、単に売れるから、という理由の他にも、敬虔なクリスチャンであることがうかがえると思う。その真面目さが彼の創る音楽に表れていると思う。

  さて、コンサート中で、おそらく彼は(感覚的には)5分以上は同じ音を出し続けた記憶がある。そんなことが可能なのか?と思うが、実際に耳で確かめたし、彼の CD で Kenny G Live! というにロングトーンをしている曲が入っていたと思う。事実であることは確かだ。しかし自分が管楽器を吹くときに、同じ音をそんなに長く出せるものだろうか?

  ずっと頭の片隅に疑問に思っていたところ、そのやり方が書いてある HP を偶然見つけたので記しておくことにする。