発売日

会社で向かいの席に座っている先輩が本を書いたので紹介します。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

仕事でWeb系の開発をしているのにHTTPとか基本的なことをちゃんと理解していない人は読むと良いですよ。ネット上に散在している基礎知識がよくまとまってます。

私はレビュー*1に参加させてもらったので、本の形になって届いてからはサインをもらうとき以外開いてすらいないですけどw

レビューしているときは「普段言っていることをまとめただけだな」と思っていたのですが*2、発売前になってネット上での反応が見られるようになるにつれて、その「普段言っていること」をいつも聞ける状態がすごく恵まれているのだなと感じるようになりました。

昔はAmasonのリンクにがんばってアフィリエイトID入れたりしたけどもう面倒になってしまったよ…

*1:といいつつ私がやっていたのはほとんど校正ですが。

*2:と言っても飲み屋でULCODC$SSとか話しているわけではありません

サーバとかクライアントの証明書

今仕事で必要になってるんだけど、職場にいまいち理解していない人がいるようなので酔った勢いで書いてみる。

とりあえず暗号について

今回使う暗号は、大きく二つ。共通鍵暗号公開鍵暗号
ただし、共通鍵暗号の方はhttpsの裏側で勝手に使われているので、本当に理解しておかなくてはいけないのは公開鍵暗号のほうで、証明書とか出てくるときには必須の概念です。

というわけで、共通鍵暗号のほうはggrks。

公開鍵暗号秘密鍵と公開鍵の二つを使う暗号の方式で、例えばxという数に公開鍵を使ってとある演算を施した答えであるyは、秘密鍵を用いると元のxに戻せ、また逆にxに秘密鍵を使ってとある演算を施した答えであるzは、公開鍵を用いると元のxに戻せるという性質を活用している。

上記のとある演算は、素因数分解を使う方式とか楕円関数を使う方式とかいろいろあります。大学時代に数学の授業で素因数分解を使う方式を習ったときには完全に理解したつもりだったけど、いまや完全に忘れた。でもそのときの教授の「暗号理論という秘密の花園にコンピュータの技術者が踏み込んでくる」という怒りの台詞は記憶に残り続ける。

この性質を使うと、「暗号化」と「署名」という二つの機能が実現できます。

暗号化と署名

以下では暗号化と署名について説明します。

まずは登場人物まとめ。

アリス
秘密鍵Aと、それに対応する公開鍵aを持っている。
ボブ
アリスさんのストーカー。公開鍵aをどうにかして入手している。
チャーリー
アリスさんの恋人。名前だけしか出てきません。
シナリオ1:ボブの恋文がアリスに届くまで

ボブさんはぜひともアリスさんに恋文を届けたい。しかし、アリスさん以外には読まれるとタイーホの恐れがあるのでアリスさんにしか読めないようにしたいのです。

そこで、アリスさんに恋文を暗号化して届けることにしました。

まず、ボブさんは恋文を何bitかずつ数値にし、それに対して公開鍵aを使ってとある演算を施します。そしてその結果の数値を並べた「暗号化済み恋文」をアリスさんの郵便受けに投函します。

アリスさんは郵便受けにあった「暗号化済み恋文」をチャーリーからのものだと勘違いし、「まぁ、チャーリーったら。間違いなく私だけを愛しているっていうためにわざわざ私にしか読めないようにしてくれたのね」なんてお気楽な考えとともに並んだ数値に対してそれぞれ秘密鍵Aを使ってとある演算を施して復号化し、並べなおして恋文を復元します。

すると、なんということでしょう。その恋文はチャーリーからのものではなくボブからのものではないですか。

アリスは気持ち悪くなってその恋文を読まずに食べてしまいます。

シナリオ2:アリスの苦情の手紙がボブに届くまで

アリスは、吐き気を抑えつつもボブが二度と恋文を送ってこないように苦情の手紙を出そうと考えます。

そこで、恨みをこめて「さっきの手紙の御用はなぁに? アリス」としたためた後、これが間違いなくアリスから送られたものであるという証拠を残すため、アリスという署名の部分を何bitかずつ数値化して、それに対して秘密鍵Aを使ってとある演算を施し、手紙の最後に付加します。

その手紙を受け取ったボブは「ヤフー! アリスから返事が来たぜ!」と思いつつも、チャーリーがいたずらでアリスの名を騙って送ってきた可能性を捨てきれないために署名の確認をしようと思います。

そこで、手紙の最後の数値に対して順番に公開鍵aを使ってとある演算を施し、その結果を並べます。すると、なんということでしょう。そこにはまごう事なき「アリス」という署名が浮き出てきたではありませんか。

よろこびにあふれたボブはその手紙を読まずに食べてしまいます。

以下エンドレスです。

証明書について

今までの説明で公開鍵暗号についてはなんとなく雰囲気を感じ取ってもらえたかと思います。わき道にそれまくってるのでわかりにくいかもしれませんが。

これからが本題の証明書です。

今回扱う証明書には2種類あって、サーバ証明書とクライアント証明書です。

前者は、サーバが間違いなくそのサーバであること、後者はクライアントが間違いなくそのクライアントであることを証明します。そのまんまですね。

どうやって証明するかというと、ここで「認証局」という第3者が出てきます。証明書にはその人の持っているはずの公開鍵が記載されているのですが、それに加えて認証局が署名付で「この公開鍵を持っている人は間違いなくこの人ですよ」と証明書に記載してくれるのです。

なので、サーバの証明書に記載された公開鍵を使って送りたい情報を暗号化すれば、通信を傍受されたり、DNSを差し替えられて別のサーバに送られてしまったとしても、本来送りたいサーバ以外では復号化できないため、送りたい情報が漏洩しないのです。

また、クライアントの証明書に記載された公開鍵を使った場合も同様に、そのクライアント以外には受信しても無意味な情報になるのです。

ここで重要になるのが、「認証局」なる第3者の存在です。その認証局が信頼できない場合、上の前提はまったく成り立ちません。そこで、IEFirefoxなどのブラウザははじめから「信頼できる認証局」リストを持っていて、ベリサインなどの有名な認証局ははじめから「信頼できる」扱いされているのです。そして、新興の認証局はブラウザにはその証明書が「信頼できる」ものとしてリストされていないので、別の認証局に「信頼できるよ」とお墨付きをもらって認証局業務をやっています。その辺の詳しい話はググレ。

この辺まで書いたところで酔いが醒めてきたし、アリスたちを再登場させる元気もないのでのでそろそろ終わりにします。

間違ってたらコメントで突っ込んでください。酔っ払った状態で何も資料を見ずに書き殴っているのであまり自信ないです。

しかし図もなく文字ばっかりだから読む気が起きませんね。

イースオリジン

今日帰りにメイン☆ストリートをゲットするために新横浜のビックカメラに寄ったんですよ。
で、9階で買ってエスカレータで降りてたら途中で「新生活応援セール 日本ファルコム」の文字が。
はっきり言って意味不明だったので近寄ってみたら
空の軌跡 the 3rd とか イースオリジン とか ザナドゥ Nextとか全部700〜900円くらいで売ってるわけですよ。
「なんじゃこりゃ〜!!」と思って奥のゲーム売り場に行ったら普通に定価近い値段で同じ商品が陳列されてるわけですよ。

いやぁ、空の軌跡ザナドゥはすでに持ってて良かった。さもなければ3つとも買っちゃってるところでしたよ。

夢の民

Flavia(所属してる楽団)の池袋付近での練習機会が減ってから、レトルトカレーは炒伽哩の店舗ではなく夢民の通販でゲットしてる。
今までに20袋を2回買って、最近また無くなったので30袋買った。
そうしたらサービスでタマネギをつけてくれた。
すてき。

薄切りにしたら水にさらさないでも食べられちゃう不思議なタマネギ。
芽が出かかっている程「新タマネギ」とはかけ離れているのに辛くない不思議なタマネギ。

今日もカレーに満載して食べた。
そして食べ終わる頃になって、カレーより先にご飯にのせておくべきと気づいたorz

9th Live

10/12にFCB ファミコンバンドの9回目の演奏会を開催します。

詳しくはオフィシャルを見るといいさ。

告知が直前過ぎるって話だよね。ごめんなさい。
会社の知り合いには告知してたけど、それ以外のマイミクに告知してないことを思い出して書いてみた。バンド系は俺以外から聞いてるだろうからどうでもいいっす。

連絡くれればチケット手配できるよ。

今回は顔のわかるキャラはないけど、ロボット作ったり黒子やったりそれなりに活躍してるんだぜ。

酔っぱらって日記を書くと口調の統一すらできないんだぜ。

IT系の技術者は会社でやってるブログも見てくれな。とくにはてなのAtomPubの実装にげんなりしてる人やchromeを認証付きproxyの下でインストールできなくて困ってる人は見るといいんだぜ。ricollabでググれ。何でここに宣伝を入れたのかは俺もよくわかってないんだぜ。

ニコニコメソッドプレゼンツール改良

id:ZOETROPEさんがWPF版のツールを改良してトラバを送ってくれたので触発された。

設定を外に出したのでairパッケージで配布できるようになりました。
パッケージの情報はバージョンを0.1あげた以外id:nitoyonさんの使っていたもののままなので、もし苦情がきたら修正します。
(私としては敬意を表しているつもりだけど、nitoyonさんの方で改良しようとしたときに情報がかち合うとかいろいろありますから)

設定ファイルは利用者の設定のしやすさ(書きやすさ)よりも私のコーディングのしやすさを優先してjson形式にしちゃいました。

パッケージにしたものはこちらです。

インストール後、インストールしたディレクトリにあるniconico.jsonのserverの値を書き換えてください。
ソースはこちら