ページ

2014年1月22日

bcryptのラウンド回数と実行時間

「sha? md5? じじい!」って会社の@kirisに罵倒された気がして、「ナウでヤングな若者はbcryptだよ」と蔑んだ目で見られたので、bcryptでround回数を変更すると実行時間はどうなるんだろう?って言うことで、計測してみました。bcryptが何なのか、ってのは、自分で調べてね。
py-bcrypt使って計測していますが、計算処理はCのコードで書かれているっぽいです。

コードは、

import timeit
for i in range(1,20):
    print timeit.timeit("bcrypt.hashpw('password', bcrypt.gensalt(" + str(i) + "))", setup="import bcrypt", number=1)

です。計測結果ですが、

ラウンド数時間(sec)
1 0.002
2 0.002
3 0.002
4 0.002
5 0.004
6 0.004
7 0.007
8 0.015
9 0.031
10 0.063
11 0.125
12 0.256
13 0.516
14 1.0121
15 1.9985
16 4.0332
17 8.0246
18 16.1026
19 32.1371
20 64.3373

グラフにするとこんな感じ。
いい感じに計算時間が伸びていきます。でも、デフォルトでは12回でそれが256m secはちょっと遅いですね。計測したスペックのマシンだと10回か11回が限界ですね。100m secには収めたい。

2014年1月17日

OpenAMとか

最近、OpenAMを使ったので、その時のメモ。
セットアップの仕方とか、エージェントの設定の仕方は井上大先生のコラムを読めばいいです。OpenAMはOpenSSOからフォークしたものです。なので、名前が多少違いますが、セットアップの仕方とか、ほとんど同じです。それから、OpenAM ver. 10はtomcat 8.0 RC1とかじゃ起動しなかったので、tomcat 7などの安定したバージョンを使いましょう。

さて、OpenAMへの経緯ですが、要求として次のものがありました。

  • 複数のシステムでSSO
  • 認証基盤の統一
  • 認証強度をプラグイン的に変更可能
ごく一般的な要求ですね。

複数システムでのSSOは、OpenAMの前進のOpenSSOの名前が示す通り、シングルサインオンするものです。毎回、ログイン画面がでるのは嫌で、一度どこかで認証を済ませておけば、他のシステムへログインせずに入って行きたい、ってことですね。
OpenAMじゃなくっても、Windowsの世界であればWindows統合認証でSSOが可能です。AD FSをセットアップすれば、SAML認証が使えるようになるので、Google AppsなどでもSSOが可能になります。でも、会社によってはADを管理しているところがガチガチだと、ADにお触りするのは結構ハードルが高かったりします。反対に、ADが名前だけになっていて、まずADはあるけど意味がない状態のところもあったりで、なんとも悩ましいところです。

認証基盤の統一と言うか、 自前で認証をするのはそろそろやめるべきじゃなかろうか、と思い始めているからです。これは次の認証強度をプラグイン的に変更可能、っていうのもあるんですが、今後、認証まわりは強化される方向に行くんじゃないかな、って。最初はインターネットにさらされているものだけが、認証を強化する必要があると考えていましたが、イントラネット内でも同じ程度にセキュリティを意識しなければいけなくなりつつあると。
認証を次第に強化していく時に、プラグイン的に(設定で)強度を変更できるようにしておきたいです。例えば、フォーム認証から、2要素認証に変更したいとか、ログインを試行したロケーションによって制御したいとか。アリエルの製品はSpring FrameworkをベースにしていてSpring Securityを使えば、ある程度これらのことは実現可能ですが、これらの認証をもっと粗結合にして外部に切り出したいですね。これらを切り出せれば、他のシステムも少しの対応で認証が強化されます。

ということでOpenAMや、商用のSSOの製品を今後ちゃんと検討する必要があると感じています。

でも、SSOなので、最初の認証さえ突破されればおぞましい世界が待ち受けていますね。

おっとポリシーエージェントの動きとか説明しようと思っていたけど、そっちはまた、気が向いたら。