フレームワークの責務とセキュリティ - MugeSoの日記についての感想文です。 世の中にはたくさんの通信プロトコルが存在し、中には、特定の条件でパスワードを含む文字列をハッシュ化した値を検証しなければならないものも含まれています。 例えば、HTTP Digest認証の場合は、MD5("realm:user:password")を保存しておく必要がありますし、APOPの場合は生のパスワードを、CRAM-MD5の場合はMD5("password")を保存しておく必要があったはず。 で、こういった様々なプロトコルに対応可能な認証データベースを準備しようとすると、パスワードを復号可能な方式で保存しておく必要があります*1。 ただ、パスワードを復号可能な方式で保存するとか、開発者あるいは管理者としてやりたくないというのはもちろんそうなので。で、長期的には世の中どこへ向かってるかというと: 選択肢a
お久しぶりです。 夜中にモツ煮込み作りながら書いてます。 さて、今回はフレームワークの責務とセキュリティについて思うところがあって久しぶりにエントリを書くことにしました。 背景 まず、背景としてBEAR.Sundayの一部であるBEAR.PackageにサンプルとしてBasic認証の実装を追加するPullRequest#90でのやり取りがあります。このPRはzukimochiさんが作ったものに僕が修正を加えて出した物です。この中では、Basic認証用のパスワードをハッシュとして扱うように実装されています。 多くの人が斜め読みしているのは背景説明が長すぎるからだと思ったので削除しました。詳しく知りたい方はPRをご覧ください。 本題 いよいよ本題です。 PRの最後にkoriymさんが発言している次の言葉はフレームワーク開発に於いてとても重要です。 より関心のある問題に集中するために、特に専門と
ヒロ @cz75hiro こことか http://t.co/seUXLH74yb こことか http://t.co/8t7hso6TP1 見てるけど、ハッシュコードの生成時に、「各値のXORを取って素数をかけた値を元に計算」って書いている理由がいまだにわからない。 2013-10-16 16:16:09 ヒロ @cz75hiro 例えばboolなプロパティ2つのみ持ってる同クラスのインスタンスのハッシュ値は、真・真と偽・偽の場合、XORとったら同じハッシュ値になるんじゃないかと思ったんだけど、何か勘違いしてるのか・・・? 2013-10-16 16:18:27
昨日の記事で、抽象的なまま書きまくった反省もあるのだけど、それと同時に残念な気持ちになったので、すごく当たり前のことを書く。 オンラインゲームでクライアントに状態を持ったらメモリ操作されて危険っていうブコメが多かった。それは正直、古典的なウェブアーキテクチャから脱却できない残念な感じだと思ってる。 原則 クライアントはサーバーのキャッシュを作って、サーバーと同じロジックを持って、計算し、次の行動を決定する。 が、サーバーはクライアントから送られてくる情報を信用しない。 大事なことなのでもう一度言う。サーバーは、クライアントから送られてくる情報を信用しない。 対応 モデルの状態を受け取るのではなく、モデルのトランザクションを受け取る。 実装例 AからBに攻撃したい。この時にattackEnemyというAPIを作るとする。 ここでのクライアント目的では、手元のデータで対象に攻撃可能かどうかを判
おおむねこんな感じを想定。 ベースになるのは /dev/urandom なので。「環境ノイズが以下略」的な話は、きっとなんとかなるだろうしてくれるだろうだからある程度暗号的に安全な擬似乱数であろう、ことを、期待(笑 shaが1ぢゃなくて512なのは、おおむね、おいちゃんの癖。長いほうが推測しにくいっしょ? で、ハッシュにはどうしても「ハッシュのbit数よりもでかいのを渡しておきたい」ほうなので、少し大きめに。 「処理にかかるCPUコスト」は、比較的軽視の方向で。 というような思考回路を経て作った、超ざっくりなトークン生成。 $token = hash('sha512', file_get_contents('/dev/urandom', false, NULL, 0, 128), false); var_dump($token); でもまぁ、ワンタイムトークン用で、かつ「ンなに長い寿命を持
フリーソフトやアプリケーションのアップデートファイルなどをWebサイトからダウンロードした際に、ダウンロードが正常に終了したかどうかを確認するのは、実はあまり簡単な作業ではない。ダウンロードしたファイルを実行してみたら正常にインストールプログラムが起動できず、はじめてファイルが正常にダウンロードできなかったとわかることが多い。一見正常にダウンロードできているように見えても、たとえば通信経路上で悪意のある改ざんが行われていないかを確認するのも非常に難しい。つまり、ダウンロードしたファイル(データ)の「完全性」を確認するのは、何らかのツールや証明手段を使う必要がある。 ハッシュ値が一致すればオリジナルと同じと証明 こうしたファイルの完全性を確保する有効な手段の1つがハッシュ値(あるいは単に「ハッシュ」)である。これは、ハッシュ・アルゴリズムに基づいた「ハッシュ関数」を使用してファイル(データ)
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く