というわけでFOSTEXのAP05を通販で買おうと思ったんだけど、調べてたらLepaiという中華メーカーがアレゲな小型アンプを出してるのを知り、気がついたらLP-V3SをAmazonでポチってた。巷での評判はピンキリだけど、まぁハズレでもいいやくらいのノリで。だって、ついでに一緒にポチったCDよりも安いし。

スピーカーは親父から15年くらい前にもらったDIATONE DS-107V。引っ越しの時にそのまま段ボール箱に放り込んだりしても全然へっちゃらなタフなやつ。初代(?)J Soul Brothersの1stシングルのオマケだったステッカーがすっかりくすんでる。ついでにタブレットは、これまた親父からもらったAcer ICONIA TAB A500。OSが古くてもう正直使い物にならないので、いまや完全に音楽再生専用。もらいもんだらけ。
昔はこのスピーカーを鳴らすために、1000円くらいのやっすいアクティブスピーカーの基盤からケーブル引っぱり出してアンプ代わりにしたりしてたなぁ。電気計算とかガン無視で。懐かしい。最近はホームセンターで買ったやっすいスピーカーセットのサブウーファーをアンプ代わりにしてたんだけどこれがまたノイジーで、替えたいなぁと常々思ってた次第。
でLP-V3Sですよ。これがなかなか、上から下までちゃんと鳴る。ノブ回すと少しチリチリするけど、それ以外では全くと言っていいほどノイズが聞こえない。前モデルでは目立ってたという噂のポップノイズもほとんどない。まぁ音源・スピーカー・再生環境から聴く耳まで含めて音質云々を語れるレベルではないので、そのあたりのレビューはその筋のエンスーな皆様に任せます。少なくとも自分的には十分満足できるクオリティ。
ACアダプタは部屋を探したらいくつか出て来たので本体だけ買ったんだけど、古いLCDディスプレイについてた12V/3.4A出力のが普通に使えた。5A出せるのもあるにはあるんだけど、めんどくさいので音質の比較とかはしてない。本体には2Aと表記されてる一方で箱には3Aがベストと書いてあったりするけど、そのへんは謎。
機能面での印象は予想(覚悟?)してたよりも全然良いんだけど、モノとしての作りは正直ひどい。ボリュームノブは偏心してて12時過ぎの位置で下側がこすれてたので、上方向に少しだけ、ジワッと力を掛けたら直った。フレームは歪んでて置くとガタつくので、気が向いたら足をつけようかなぁと思ってるところ。あと御多分に洩れずうちのも入出力チャンネルがひっくり返ってるので、入力側のRCA端子を左右逆に繋いでごまかした。ちなみにミニピンプラグ入力の方は使う予定がないので未チェック。
このいかにも安っぽくて、実際ひどい作りなんだけど、なかなかどうして満足に動くというあたり、一時期ハマってたソビエトカメラに通ずるものがあってとても微笑ましい。で、ソビカメと一緒で使ってるうちにボロが出てきたりもするかもしれないけど、そしたらまた追記するかも。ひとまず第一印象としては、十分使えるやつでした、ということで。
BitTorrent Syncは、チョー大まかに言うと
- デバイス
A で、共有したいフォルダ f の シークレットキー を生成する
- デバイス
B で、 f と同期したいローカルのフォルダ f' と、先ほど生成した シークレットキー を設定する
というたったの2ステップで、デバイス A ・ B の f ・ f' を同期させることができる。
実際使ってみるとチョーお手軽。
で、「この仕組みって本当に安全なの?」という素朴な疑問が生まれる。
だってたった一つの、高々数十Byteの文字列を知ってさえいれば、他人のデータだろうが難なく読み取ることができちゃうわけで。
狙って攻撃できたり、そうでなくてもうっかり衝突しちゃったりとかしないの?
やっぱり皆おっかなびっくりらしく、フォーラムでも疑問の声は上がってたりする。
そうだよねぇ。
で、自分でもちょっと調べてみた。
適当なこと言ってるかもしれないので、デベロッパ向けのドキュメントやユーザガイドも是非読んでみてください。
で、間違いとかあれば指摘していただけると‥‥。
シークレットキーの実際
シークレットキーの長さは仕様上、20 byte (160 bit) もしくはそれ以上と決まってる。
自動生成すると33文字の英数字から成る文字列ができるけど、頭1文字はどうやら便宜上権限を示すらしく、実際のキーは残りの32文字。この文字列、可読性を上げるためにBase32エンコードされたものなので、 32 byte / 8 byte * 40 bit で確かに20 byte (160 bit) ある。
試しに自動生成してみたシークレットキーがこれ。
12345678901234567890123456789012
+--------+---------+---------+--
シークレットキー ACGT66NJPIFGVY6YI3GWCWJRYOBOK6XYN
読込専用シークレットキー BJFMTOC234PX35OZYG4FZP7IMJVJ5KWXM
読込専用 シークレットキーは、シークレットキーからさらに一方向なロジック (じゃなきゃ意味ないし) で自動生成されたもの。
これを知ってるとそのフォルダを読むことだけはできる。
あと ワンタイム シークレットキーというのもあるらしいけど、興味のある人は自分で調べてください。
シークレットキーは門外不出
プロトコル上、シークレットキーが生でネットワーク上を流れることはない。
その代わりに SHA1(Secret):ip:port みたいなシークレットキーのハッシュ値を含んだ情報を各ピアが発信して、P2Pネットワークの中で同じシークレットキーを持ってるピアを探し出してる。
さらにピア同士は、お互いが知っているシークレットキーから生成したAES暗号鍵を使ってデータをやり取りするので、シークレットキーを知らないピアが相手をだまくらかしてデータを盗むことは理論上不可能。
ピア同士のネットワーク構成によっては第三者ピア (リレーサーバ) を経由したりすることもあるらしいけど、基本はやっぱり一緒。
シークレットキーは十分長い
たとえば「地球上のすべての砂粒にIPアドレスを振ってもまだ余る」(大学の講義で某エラい人が言ってた) と評されるIPv6のアドレス空間は128bit。これはつまり、
2^128 =
340282366920938463463374607431768211456 (約340潤) 個
のアドレスが存在し得るということ。
一方でBitTorrent Syncのシークレットキーは前述の通り (最小) 160bit。つまり、
2^160 =
1461501637330902918203684832716283019655932542976 (約1.5極) 個
のシークレットキーが存在し得るということ。ちなみに極 は10^48で、恒河沙の一つ下。ごうがしゃて。
さぁクラックしましょう。
地球上のすべての砂粒の4294967296倍よりもさらに多い砂粒の中からお目当ての一粒を探し出すには、仮に人手をかき集めて一秒に千粒チェックできたとして、果たして何年かかるでしょうか?
2^160 / 1000 / (60 * 60 * 24 * 365) =
46343912903694283301740386628497051612 年
ざっと46澗年かければ見つかりますね。半分くらいでヒットすると期待しても23澗年くらい。
余裕で人類滅ぶ、というか地球が太陽に呑まれてるわ。
次に、仮に全世界で十億個のフォルダが既に共有されているとして、ランダムで自動生成した一個のシークレットキーがうっかり他のフォルダのシークレットキー (読込専用も含む) に一致しちゃう確率は、
2 / 2^160 * 1000000000 =
約 0.0000000000000000000000000000000000001 %
730潤回くらい生成してると、少なくとも一つはヒットしちゃう計算ですね。
730かんかいて。
まとめ
乱数生成器が高品質な乱数を生成していて、BitTorrent Syncの実装にバグがない限り、シークレットキーは十分な計算量的安全性を持ってるはず。
ただし所詮は確率計算上の話なので、世界のどこかで誰かが今頃うっかり俺のシークレットキーの一つを生成しちゃってて、身に覚えもなく落ちてきた大量の写真を見てしきりに首を傾げてるかもしれない。
そして俺は逆に、あまりのラッキーさに感激して失禁しちゃうはず。
まぁマジメな話、シークレットキーはデバイス本体と同じくらい本気で守りましょう。
平文でネットワークに流さないとか、物理的な紛失に注意するとか、そういう基本的なことだけど。
あと、できるだけ小分けしたり読込専用キーを上手く使って、必要なデバイスに必要なキーだけ入れるよう心がけると、万一の際に被害を最小限に抑えられるかと。
「もしや、キーが漏れたかも」と不安に駆られた時は、落ち着いて全部のデバイスのシークレットキーを変更して回りましょう。
少なくとも変更し終わった瞬間からは、再び1.5極の砂粒に潜ることができます。
というわけでうっかりポチったHP ProLiant MicroServer N54L、とりあえずFreeNAS入れてZFSと戯れてみたけど、想像してた以上にメモリ喰らいなのがよくわかった。
パターン少ないけど、fioで適当にベンチってみた結果、データサイズが小さいとアホみたいな性能出てウケる。
で、 replace とか expand とかの確認も終わったので、ちゃんとNASとしてセットアップしましょうと。
OS
ZFS使いたいけど、たとえばFreeBSDでイチから構築するのは面倒だし、ストレージ領域用以外にHDDを積む気もないし、USBスティック向けにいろいろ気を配るのも地味に大変そうなので、やっぱり安直にFreeNAS一択。まぁ実際使ってみるとFreeNASが俺の中で至上かと言えば決してそうではないんだけど (特にプラグインjailまわりは未だにすごく気持ち悪い)、どうせ安定稼働始めちゃえば意識しなくなるんだし、と自己暗示。
8GBのUSBメモリにイメージ書き込んでWebからぽちぽちしてセットアップ完了。
ディスク構成
先代のReadyNAS Duoは
- 2 x 1TB HDD … X-RAIDミラー
- 1 x 1TB USB HDD … 定期バックアップ
といういわば時間差三方向ミラー構成で、実効容量と実容量の比率で見れば贅沢な構成だった。
これは万一筐体が故障したときにX-RAIDの手復旧が難しそうなので、その保険を掛けてたつもり。
ストレージ容量はそんなに必要ないし、わざわざRAID-Z組んでいざってときにディスク2本から復旧ってのもトラブりそうなので、結局FreeNASでも普通に2本ミラーでスタート。
将来的にもし容量が欲しくなったら expand するかミラー足すことにする。
その場合、難を言えば、ディスク4本構成でRAID10相当とか耐障害性の観点で至極残念だけど、今の段階でRAID-Z2を組んどくモチベーションも特にない。
ハードウェア依存から晴れて脱却した (はず) ので、スナップショットとかバックアップとかは気が向いたら考える。
ファイル共有
Dropbox (使ったことないけど) いいなぁ、と前々から思ってたので、プライベートクラウド()的な感じを目指すことにする。
- ローカルストレージと随時、勝手に同期してほしい。
- MacとAndroidのクロスプラットホームは必須。無理ならもうCIFSでいい。
- LANならともかくインターネットに出るなら暗号化必須。無理ならもうAFPでいい。
この条件であーだこーだと検討した結果、 BitTorrent Syncを採用することにした。
FreeNASのプラグインもあるし。
他にownCloudも候補ではあったけど、機能がゴテゴテしてるしクライアントアプリの評判も芳しくないので今回は見送り。
如何せんプロプライエタリなのでBitTorrent Inc. がいつまでサポートしてくれるんだろう、という不安はうっすらあるものの、まぁその時はその時。あと、少なくともBtsyncプラグインの1.3.94では何をどう頑張っても umask が効かない。ソースから裏取ることもできないのでもんにょりしつつ、同期対象のフォルダはAFPとか別の手段では触らないことにした。
そういった細かい不満はあるものの、実際使った感じはすごく快適。
ビールを奢りたい。
1000BASE-TなLANだと30MB/s程度は出るけど、そもそもそんなに速度が必要なものでもなかった。
VPSのバックアップ
地味に一番悩んだのがこれ。
Ready NAS DuoではBaculaプラグインを入れて DirectorとStorage Daemonを動かし、VPS (要はこの鯖) のFile DaemonからTLS通信でデータを吸い出してた。
FreeNASにもBaculaプラグインはあるけどStorage Daemonのみで、しかもWeb UIからはTLS絡みの設定ができない。
Web UIがあるものは極力そっちから触りたい (齟齬が起きたら嫌) ので手でガシガシ設定するのも受け入れ難く、そうなるとBaculaは使えない。
で、結論としては必要なディレクトリだけ cpio なりでアーカイブして、rsync over SSHで吸い出すことにする。
まだ設定してないけど。
Bacula使ってた頃は「鯖吹っ飛んでもベアメタルリストアできるぜフハハ」とか思ってたけど、VPSのベアメタルリストア手法を確立してるわけでもないし、実際はどうせ手で再構築するんだろう?と自己暗示。
まとめ
そんなこんなで妥協と自己暗示を積み重ねながらも無事にFreeNASが稼働を開始し、2010年の2月から頑張ってくれてた先代ReadyNAS Duo v1は (念のため) ディスク1本を残して箱に帰って行きましたとさ。
妙なこだわりを捨て去れば生き易いのかもしれない、としみじみ感じる今日この頃。