けんぼうは留年生

ノンジャンルで何か書きたくなった時に書く感じ

僕の考えた最強のパスワード

パスワードに欲しい要件を考えた。

  1. 無意味な文字列であること。
  2. 十分長い。
  3. サービスによって違うものを使い分ける。
  4. 特に重要な物については定期的に変更する

これらをすべて満たしたパスワードをサービスの数だけ作り覚えていく……無理だろ。
勿論世の中にはパスワードを保存して管理してくれるソフトなんかもあるようだが、

  • いつでも自分の環境というわけではない。
  • 保存したパスワードが流出、あるいは破損するリスク。

ということを考えるとイマイチ安心して使えない。
パスワードを保存せず、そして沢山覚えなくて良い方法は無いものか。
最初に思いついたのは「同じパスワード+サービス名」という方法だが、
普通に考えてパスワードが流出したら他の物も類推出来てしまうので意味が無い。

そして僕は思いついた。
ハッシュ値をパスワードにすれば良いじゃん。

ハッシュ値とはハッシュ関数によって得られる値だ。
例えばあるハッシュ関数にAという値を入れてBというハッシュ値が得られたとする。
AからBを計算することは容易だが、BからAを逆算することは非常に困難。
これがハッシュの性質だ。
「同じキーワード+サービス名」からハッシュ値を取ってそれをパスワードにすれば

  • 無意味な文字列
  • 長い
  • サービスによって違う

の全てを満たすことが出来る。
ついでに2014とか付加すれば毎年違うパスワードだって可能だ。
そして、もしパソコンのデータが全て吹っ飛ぶみたいな不幸な事故が起こっても
この方法ならキーワードとパスワードの計算方法を覚えている限りいつでもパスワードを復元できる。
ちょっと特異な環境でもちゃちゃっとパスワードを計算するスクリプトを書けば
いつでもどこでもパスワード生成器が作れる。
例えばjavascriptとかで実装すればブラウザでアクセスするだけで実行可能だ。*1

もちろんハッシュ値と言えど完全に逆算が出来ないわけではなくて、
例えば総当りすれば答えは出るし時間をかければ特定することは可能だ。
だが、パッと見はランダムな文字列と変わらないし、
わざわざ一手間かける人はいないと期待したい。
仮にいたとしても同じハッシュ値が得られる候補は複数存在する。
入力するキーワードが長ければ長いほど攻撃者は面倒を強いられる。

というわけで実際にHSPでサクッと作ってみた。*2
http://www.kembo.org/password_generator.zip

ハッシュ関数にはMD5を使ってみた。理由は特に無い。
安全性がどうのと言われるが、それは大体衝突性の問題なので
逆算が困難なのは多分どのハッシュ関数でも同じはず……だよね?

返ってくるハッシュ値は16進数だったので
それを2^n種類ではない記号列に集約するのにすごろくみたいな方式にした。
例えばa1,a2,a3,……という値をn種類の記号列に変換する時は
(a1)%n, (a1+a2)%n, (a1+a2+a3)%n, ……
と言った具合に。
これでまぁ大体の文字の偏りも軽減されてると思う。多分。



で、ここまでやっといて気が付いたんだけど
普通パスワードって平文じゃなくハッシュで保存してるんだよなぁ。
ハッシュがただ二重になっただけだなぁ。
普通に暗号化したパスワードをクラウドに保管してるのでも
大して変わらないんじゃないだろうか……。

もう寝よう。


追記

この方法同じキーワードを何度も入力するから
ショルダーハッキングのリスクは大きいなと思った。

追記2

↑じゃあキーワード入力BOXを複数用意して、
片方の入力値は一度入力したら終了するまで保管するようにすればええやん。
パスワードの作り方の問題とは関係無かった。

*1:尤もその場合はページが改竄されているリスクに注意を払うべきだ。

*2:僕としてはこれをそのまま使うのではなく、各自がこれを参考に適当に実装して使うことを想定している。

投票なんて行きたくなきゃ行かなくても良いじゃんよ

センセーショナルなタイトル付ければ読まれやすいってばっちゃが言ってた

 という冗談は置いといてさくさく本題へ入りましょうね。さて、現在日本を含め主要な国々では間接民主制を取り入れていることが多いですね。市民は投票等によって代表者を選出し、その代表者が政治を行う、というものです。間接民主制は皆が投票へ行くことで始めて成り立つ制度なのですが、その投票率が最近下がっていることが問題になっているそうです。

 じゃあそもそも何で民主制なんて始めたんだってところからざっくりお話しましょう。社会には大体リーダーが必要です。色んな社会制度があるけど昔はやっぱり王様とかそれに類する物が多かったようですね。貴族とか宗教とか何かその辺に安定した権力ピラミッド作ってその天辺に誰かを据えるわけです。でもって天辺を決めるのはピラミッドの上位にいる人たちだけで大半の人たちはそこに関わることすら出来なかったわけです。

 しかし、時代が進むに連れて世界が進歩して豊かになってくると今まで黙ってた最下層の愚民共が段々生活に余裕出て来て増長してきて王たちにやいのやいのと文句を言うようになってくるわけです。他にも産業革命とか思想的に色々あったり資本主義だのなんだので「適当に世襲や一部の人の意見だけでリーダーを決める」って方法じゃ収まりがつかなくなってきたわけです。そこで登場したのが民主制です。

「全員で話し合って決める。その代わり全員で決めたんだから文句は言わせん。」

ということにしたのですよ。つまり、民主制ってのは

文句を言わせないためのシステムであって、賢い意思決定をするためのシステムではない

のですよ。責任の問題であって結果には何の配慮もされてないわけです。

 さて、ここから今の民主制disりタイムに突入しましょうか。そもそも選挙って言うのは学校で言うところの定期テストみたいな物で、普段の政治活動があって、それで支持勢力の力関係が変わり、それを選挙と言う名のテストで数値化して政治に反映させるというのが本来のあり方です。つまり、個人の意思決定はあんまり関係無いというのは事実なんです。それにほとんどの人は日々の生活で既に忙しいです。毎日仕事をしてその上で家族がいたり趣味があったり。政治についてリソースを割く余裕なんてそんなに無いのが本音です。そもそも全員が同じこと考えなければならないなんてナンセンスじゃないですか。

まとめましょう。

  • 民主主義は"正しい選択"をすることは目的でない。
  • 市民には市民各々の生活があるため"正しい選択"についてじっくり考えている時間は無い。
  • 仮にじっくり考えた人がいてもじっくり考えない人が多ければ意味が無い。
  • 従って今の民主制は"正しい選択"からは離れやすい。

 そこで本日ご紹介する方法がこちら。
議員を選ぶ投票に行く人を、くじ引きで選ぶ
具体的にはこんな感じ。

  1. 投票権を持つ人の中から無作為に選ばれた何人かだけに手紙を送る。
  2. 手紙には今配られている物よりもっと詳細な候補者についての資料を添付する。
  3. 選ばれた人は仕事等を一日休ませる。そのための金銭の補填や予備日の設定は十分に。
  4. その選ばれた人たちに熟考させた上で投票させる。

 従来の方法では市民全員のリソースを要求しましたが、これを少人数に集約させることで効率化を図ります。一万人がそれぞれ1分考えるより、百人が100分考えた方が冷静な結論を下せるという考え方です。選ぶ人自体は偏りの無い方法で選ばれますから、統計的には『皆の意見を聞いた』ということになります。他にも明確に"役割"を与えられるため権利を放棄する人の割合が減るみたいなメリットも想定できますね。

 まぁこの方法で万事うまくいくほど世の中甘かないだろうってことは百も承知なんだけど、僕が一番言いたかったのは

民主主義なんて信奉するほど偉い絶対正義なんかじゃなくて、クソみたいなシステムだけど他に選択肢がないから仕方なくクソに甘んじてるんだ

ってことです。

 ちなみにこの仕組僕のアイディアではなくだいぶ前にどこかのサイトで見かけた欧米の学者さんが考えた方法だったと思うんだけど、このアイディアだけ覚えてて制度の名前とか周りの情報を忘れてしまったため元ネタにたどり着けなくなってしまった。誰か分かる人がいたら教えて欲しい。


ところでスペース☆ダンディ、良いよね。

"愛"と"金"の話

お金は好きですか?私は好きです。

 好きな人も嫌いな人も色々信念なり哲学なりがあるんでしょうが、まぁお金無いと生きるのに困るという点では大体一致すると思います。それはそうと世の中にはお金を嫌う価値観が確かに存在します。例えばお金を沢山稼いで上流階級と肩を並べるようになった人を「成金」と呼びます。大抵は悪いニュアンスです。それに金貸しは歴史上最も嫌われている職業の1つと言えるでしょう。プレゼントに現金を渡す人ってのもあまり無い。

 じゃあどうしてそんなにお金が嫌われるんでしょうね?という話を今日はしたいと思います。

続きを読む

今日から毎日brainをf*ckしよう

※脳姦の話ではありません。

brainf*ckってのはプログラミング言語の名前です。所謂「難解プログラミング言語」と呼ばれるプログラミング言語の一種で「コンパイルが楽な言語」として開発されたらしいです。その代わり「分かりやすさ」という部分はバッサリ切り捨ててあります、


まぁググれば出て来るんですが、とりあえず言語仕様から解説していきましょう。

続きを読む

【メモ】screenコマンド

 screenコマンドというものがあってだな、仮想画面を作ってその上で作業できるんだ。仮想画面はshellを終了させても裏で動き続けていていつでもどこでも以前作った仮想画面に戻れる。作業している机の上をそのままの状態で4次元ポケットにしまえて、そのままの状態でまた取り出せるみたいな感じだ。
 例えば不慮の事故でネットが切断されたり、めちゃくちゃ時間のかかるプロセスを動かしてる間に他の作業がしたいと場合にこのscreenコマンドを使えば超便利ってわけだ。

 でもって物覚えの悪い僕は使い方をよく忘れるからメモ代わりにここにサクッとまとめてみた。細かいところすごく省いてるので詳しくはググれ。

続きを読む

DentooLTの反省(2週間も経ってしまった……)

先々週DentooLTというイベントがあったんですよね。

DentooLTについては以下参照。

http://atnd.org/events/49806

http://togetter.com/li/660790

http://togetter.com/li/660811

http://togetter.com/li/660859

要は下らないLT(短くて軽いプレゼン)を各自それぞれ好き勝手やるというイベントです。

自分も登壇したわけですが、ここで恥を忍んでスライドぶち撒けてLTの反省をやろうと思います。

続きを読む