2016年1月26日火曜日

ログイン手段再考: OAuthよりもメールアドレス認証がいいんじゃない?

最近は色んなウェブサイトでOAuthを使った登録やログインが用意されるようになってきました。

それに伴い、OAuthを使ったサイトでID/パスワードとは違う別の不便さを感じるようになってきました。


確かにID/パスワードは、認証方法としてはセキュリティ的にあまり望ましいものではありません。なぜならパスワード使い回しによって、セキュリティが弱いウェブサイトでパスワードが露呈すると、全てのウェブサイトへのアクセスが破られてしまうという恐れがあるからです。

もちろんこれはパスワードを使い回すユーザが悪いのですが、しかしユーザがどのようなパスワードを設定するかを制限しなければ、使い回したり、異常に簡単なパスワードを設定されてしまうことは防げません。

そうした問題や、またユーザ登録の面倒くささなどを防ぐためにOAuthを使ったサイトが増えているのだとは思います。


しかしOAuthにも別の問題があります。

多くのウェブサイトではOAuthのサービスプロバイダとしてGoogle, Facebook, Twitterなどをサポートしていますが、こうしたウェブサイトは単なるID認証のためにOAuthを提供しているのではなく、API連携をするためにOAuthを提供しています。

そのためOAuthでログインしたユーザは、自分が単に認証するためだけのつもりが、不用意に個人情報をウェブサイトに渡してしまうことになりかねません。

また、私が個人的に困っていることとして、ログイン手段としてGoogle, Facebook, Twitter, メールアドレスなどが用意されていると、どれで登録したかを忘れてしまう場合があることです。この場合、アカウントへのログインはほぼ絶望的になります。

私としては、もしOAuthを認証手段として使うのであれば、思い切ってサービスプロバイダの種類を一種類に限定してしまい、ログイン手段を忘れないようにすることをお勧めしたいところです。

(それでもGoogleだとAppsのアカウントとgmailのアカウントの二種類があったりするので、どちらを使ったのか忘れてしまう危険はありますが)

ちなみにこれまで使ったOAuth対応サイトの中で最悪だなと思ったのはpixivです。OAuthを使って登録を促しているのに、実際に登録しようとするとIDやパスワードなどの登録フォームが出てくるという意味不明な作りです。こんなことをするくらいなら最初からメールアドレスを入れるようにすればいいのではないでしょうか?

マーケティング上の理由などで、メールアドレス確認の手順をなくして登録途中での離脱を減らしたいなどあるのかもしれませんが、ユーザにとってプライバシーを失うだけでメリットのないようなOAuthの使い方は避けるべきではないでしょうか。


私が最近思うのは、どうせメールアドレスという情報は必要であり、かつメールアドレスにパスワードの再発行などを送るようになっているのだから、メールアドレスに認証を委ねてしまえば良いのではないかということです。

ID/パスワードなどをユーザに管理させるのではなく、ログインするときにもしパスワードが分からなければメールアドレスにメールを送って、そこのリンクからログインしてもらえば良いと。

弊社では、いまはユーザが登録したときにパスワードをこちらで自動生成して送って、それをそのまま使ってもらうようにしています。ユーザがパスワードを設定しないほうがずっと安全であると思っています。

これまでは、メールで送信すると、どうしても平文で送られることになるので、セキュリティ上の問題があるという意識を持つプログラマは多かったでしょう。しかしどっちにしろ多くのウェブサイトではメールアドレスを最終的なアカウントの確認手段として使っているので、それが脆弱であると見なして仕様を決めるのは難しいです。

さらにインターネットのメールサーバ同士の通信が盗聴されるということは現実的にはかなり低いリスクでしょう。そう考えると実質的に脆弱なのは、ユーザが危険な通信路(公衆Wifiとか)を使って、暗号化していないPOPでメールを取得するような場合だけです。しかし、いまどき大多数のユーザは、ウェブメールかPOP over SSLを使っているのではないですかね?

今後、開発するウェブシステムに関して言えば、もうパスワードなどというものを全廃してしまい、メールのリンクからのログインだけに絞りたいくらいの気持ちです。実際にはモバイルやAPIのアクセスなどもあるので、単純なログインリンクだけでは駄目ですが、そこは工夫して乗り越えたいところです。

もしセキュリティを高めるのであれば、二因子認証(スマホやSMSを使うone-time password等)を併用する方がベターでしょう。

また、むやみにセッションを失効させるウェブサイトも考え物です。ユーザにログインを促せば、それだけ利便性が下がり、離脱率が上がってしまうわけですから、セッションはデータベースの能力が許す限り長期間保持するべきでしょう。

ログイン手段については旧態依然とした考え方がまかり通るこの業界ですが、そろそろ全面的な再考が必要ではないでしょうか。色々とご意見などもらえればありがたいです。

2016年1月17日日曜日

twitter始めました。そしてブログの名前も変えました。

こんにちは、新井です。

いまさらながらtwitterを始めましたので、こちらのアカウントをもし良かったら気軽にフォローして頂けると嬉しいです。いまならたぶん全員フォロー返します。

そしてこちらのブログの名前を「日に以て親しむ-新井俊一ブログ」という名前に変更して、今後はもっと気軽な記事を増やしていこうと思います。


主要な狙いとしては、今年はもっとネット上の知人を増やしていきたいと考えています。

この10年くらい、自分の会社の仕事ばかりして、仕事していないときはひたすら海外旅行をしていたので、だいぶ社会との接点を失ってしまっていたことに気付きました。

私の最も好きな漢詩の一文に「去る者は日に以て疎く 来る者は日に以て親しむ」という言葉があります。まだまだ元気に生きているのだから、もっと多くの人と交流していこうという意気込みをもってタイトルを付けました。

仕事が忙しく、なかなか人と飲みに行ったりする時間が取れないので、ネットを活用して交流していこうと考えています。いまさらtwitterやブログを始めたからと言って、多くの人が読んでくれるかはわかりませんが、とりあえず今年一年は頑張りたいですね。


また気軽な記事を増やす理由としては、本ブログの開始時には「良質な記事だけを書いて、固定読者を増やそう」と思っていたのですが、RSSリーダーというものの衰退に伴い、ブログの固定読者というものを獲得するのが難しくなった現在では時流に合わないと思いました。

(たまに数万ページビューを稼ぐような記事を書いたとしても、それを読んでくれた人が固定読者にならない。昔だったらなったと思うのだけど。)

そこでtwitterなどを活用して気軽に思ったことを書いていく方式に改めることにしました。ただ、自分の考えを垂れ流すことになるので、あまり妄言やデタラメばかりにならないようには気をつけたいと思っています。

今後とも宜しくお願いします。

2016年1月4日月曜日

今話題のブロックチェーンとは何なんだ? 部外者の技術者として考察してみる。

一行でまとめ: 暗号通貨は面白いけど、ブロックチェーンはそれ以外には使い道がないだろうと僕は思ってるよ。暗号通貨はダメでブロックチェーンは有用という奴らは何も分かってない。


最近、IT業界を取り巻くメディア(日経BPとTechCrunch等)ではブロックチェーンなる技術が話題です。

ブロックチェーンとは、bitcoinを構成する技術であり、それ自体が金融システムを変革するものなどと言われています。しかしメディアではブロックチェーンの本質について説明しない記事が目立ちます。

現状の大きな問題として、ブロックチェーンやbitcoinについて解説する記事の多くは、bitcoin関連の仕事をしている起業家や研究者などの利害関係者による記事が多いというバイアスがあります。また技術者ではないジャーナリストが書いた記事も、技術的な本質に突っ込めていないものが目立ちます。

本記事では、bitcoinに関して利害関係を持たない一技術者として、ブロックチェーンに関して考察を試みようと思います。私はbitcoinの専門家でもなんでもないので、認識等は間違っているところも多々あるかもしれませんので、ご指摘頂ければ幸いです。

ブロックチェーンとは何を実現する技術なのか


さて、まずブロックチェーンとは何なのかですが、bitcoinを構成する技術であり、具体的にはbitcoinの取引履歴を記録した巨大な台帳ファイルのことを指します。

しかし、一般記事ではブロックチェーンという名称で、bitcoinを可能にしている分散P2Pトランザクションなどの幅広い技術を指すことが多いようですので、以下、本記事でもブロックチェーンという場合は、幅広くbitcoinの技術全般を指すことにします。

さて、そもそもブロックチェーンとは、科学的に見て何が新しいのでしょうか?

ブロックチェーンは、中央の特権サーバが決済履歴を管理することなく、さらに特殊な電子機器を用いることなく、決済(トランザクション)の二重実行防止を実現した点で画期的な技術と言えます。

電子マネーというのは、通常、支払を行うのに中央のサーバと通信して支払を指示する必要があります。なぜなら電子マネーを持っている人が、直接に他の人に支払を行った場合、その裏付けとなる電子マネーを二重に支払いに使っていないかどうか確かめる手段がないからです。(電子データは複製が自由に可能なので、二重支払が自由にできてしまう)

通常の場合は、サーバが決済データを一元管理して、同じマネーが二回支払われていれば拒否するようになっています。これが通常の電子マネーの実現方法です。要するに銀行振込と同じですね。

場合によっては、電子マネーは特殊な電子チップに格納され、支払を行うと、電子チップの中の電子マネー情報が消去されることにより、二重支払を防止する場合もあります。この場合は、電子チップが正しく製造され、第三者が改竄出来ないことを前提にしています。

この二重支払の防止を、中央サーバも特殊な電子機器もなく実現したのがブロックチェーン技術です。

(ちなみに単なる電子契約を行うのにブロックチェーンは不要です。契約書は裏付けとなる資産を保証するものではありませんから、公開鍵暗号方式を使えば普通に実現出来ます)

ブロックチェーンはどうやって二重支払防止を実現するのか


ブロックチェーンの二重支払防止技術は、基本的に多数決による認定に頼っています。多くのbitcoin参加者が取引を監視し、その結果として、二重支払がもし行われた場合であっても、取引を監視している人の採択結果により、どちらが正しい決済として認められるかが決まります。

そのさいbitcoinでは不特定多数の人が市場に参加出来ますので、多数決をする場合の投票権を持つ母集団が定められません。そのためbitcoinでは、コンピュータによる計算量を投票権として採用し、採決をした人に報酬を支払うというルールにより、多くの人が監視して正しい採決が行われるような仕組みにしています。

(IPアドレスごとに票を持たせるような仕組みでは、IPアドレスを多数持つ人が有利になってしまうので、特定の人に投票権が偏らない仕組みとして計算量を採用している)

この「計算量」により投票権が決まるという仕組みがブロックチェーンの肝といえる技術です。これは暗号学やP2P分野の研究において大きな新発明と言えるでしょう。

但しブロックチェーンの大きな弱点として、計算量によって投票する仕組みなので取引ごとに膨大な計算量が無駄にされるという点と、採決が複数回繰り返されることによって決済が確定するので、決済が確定するまでに10分以上の時間を要してしまうという点があります。

この計算量が無駄にされるという性質はかなり致命的なものです。なぜなら計算を行うにはサーバ機器代と電気代がかかるのであり、貴重なエネルギーやサーバなどの資源を無駄に浪費していることになります。これは非常に困った性質です。

ではP2Pのメリットとは何なのか


bitcoinはそれほどまでに特殊な技術を用いて、中央サーバが存在しないP2Pトランザクションを実現していますが、そのメリットはなんなのでしょうか?

じつはbitcoinは匿名性を実現するためにP2Pにしているわけではありません。取引の履歴は全て公開されており、誰でも取引の履歴を追っていくことが可能なのです。これは通常の中央サーバを用いても実現可能です。

中央サーバがないことによるメリットは、主に規制に従う義務を負わなくなるということの一点に尽きると思います。

中央サーバがある場合、その運用者は、電子マネーの運用主体であると見なされ、様々な法的義務を負うことになります。すなわち規制にがんじがらめにされ、もし何か政府とトラブルになった場合には、最悪サーバが差し押さえられる危険があるということです。

しかし中央サーバがなく、さらにソフトウェアの開発もバザール方式で行われていれば、電子マネーの運用主体が存在しないということになりますので、法的規制を受けなくなります。事実、日本でもbitcoinビジネスを行うことは2016年1月現在では法的に自由のようです。

ここがbitcoinのとても面白い点ですね。開発者は無政府主義的な思想を持っていることが伺われます。実際にTorという暗号化インターネットの中では、bitcoinを使ったアングラ通販サイトが存在し、ヘロインの塊1kgなどを通販で売っているのを目にしました。

で、ブロックチェーンは金融機関などの一般社会で使えるの?


最近では、ブロックチェーンが金融機関や一般社会での取引に使えるという説を唱える評論家が数多くいます。しかし私はそうした説に極めて懐疑的です。

まず金融機関や一般社会での取引には、中央サーバがあってはいけない、P2Pが望ましい利用場面というのが全く存在しないというのが最大の理由です。

中央サーバによる決済は、ブロックチェーンを使った決済よりも圧倒的に速く安く確実かつ簡単に実現できます。

ブロックチェーンにより、決済システムがより安く高速に実現出来るという論を唱える評論家がいますが、そういう人が技術的根拠を提示しているのを一切みたことがありません。

そもそも、単純に通貨の価値を他に移転するだけのトランザクションなど極めて低コストであり、最近のサーバ費用を考えれば、わざわざコストを下げるような必要など一切ありません。

銀行のシステムが高額なのは、極めて複雑なビジネスロジックを実現しているからであり、bitcoinのような単純な価値移転とは比べものになりません。

P2Pや分散技術というのは、基本的に極めて高度な技術を必要とするものであり、それによる性能へのオーバーヘッドも多くあります。どうしてもP2Pや分散が必要となるやむをえない理由がなければ、単一のサーバで処理するほうがずっと楽に行うことができます。

とくにP2P技術(多数の信頼出来ないコンピュータが協調するもの)は、ほぼ現実社会で使い物になる技術ではないと私は考えます。あまりに複雑すぎて構築も運用も極めて難しいだけでなく、性能へのオーバーヘッドが大きすぎるからです。

一時期はWinnyなどのP2P技術が持てはやされましたが、今でも実際に使われているものはBittorrentくらいではないでしょうか?

残念なことに大学や研究所などの研究者にとっては、複雑で実現困難な技術であるほど、自分たちの研究論文を書きやすいので、往々にしてこういう「筋の悪い」技術をあえて推奨する研究者が多くいるのです。筋が良くて簡単に実現出来る技術はいくら優れていても彼らの飯の種にはならないのですね。

でもブロックチェーンはbitcoin形式だけじゃないのでは?


※本章で主に批判している対象はこちら → ブロックチェーンの正体 | TechCrunch Japan

ブロックチェーンの本質は「分散型台帳」であり、bitcoinとは違う使い方が出来るなどという人が最近増えていますが、それは全く計算機科学について知らない素人の妄言に過ぎません。

まず第一に分散型のデータベースに関して言えば、計算機科学においてこれまでもずっと研究されてきています。

分散型トランザクションにおいても、参加者が信頼できるのであれば、quorumなどという多数決による投票のアルゴリズムが昔から存在します。AmazonのDynamoDB分散データベースのようにquorum的な多重化で故障を防ぎ性能を向上しているシステムは既に存在します。[論文]

ブロックチェーンがこうした技術について新たに付け加える点は何一つありません。


で、参加者を中途半端に信頼して、弱い計算量のブロックチェーンを導入するということを提案する人もいますが、それはセキュリティの観点から見れば愚の骨頂です。

計算量を投票に使う方法は、あくまで不特定多数の参加者が、報酬につられて膨大な計算量を投入しているからできる方法なのです。特定少数のノードが中途半端な計算量を投じても、何の保証にもなりません。誰かが不正をする気になれば、そんな計算量など一瞬で破ることが可能でしょう。

もしどうしても特定多数の100%信頼出来ないノードで投票を行うのであれば、一人一票方式の方がずっとマシなのではないでしょうか。中途半端な計算量ならその気になればいくらでも投入可能ですが、特定のちゃんと身元が割れた参加者であれば一人一票以上を手にすることはできないのですから。わざわざ計算量を投票権に使う意味は全くありません。

(それでも不正のインセンティブがあれば、LIBOR不正事件のように結託して不正を行う場合もあるでしょうから、きちんと管理された中央サーバを使う方がずっと安心だと思いますが・・・)

ブロックチェーンというのは計算機科学における一つの基礎技術を指すのであり、それを専門外の評論家や弁護士などが表面上の点だけを捉えて、間違った情報を流布するのは良くない傾向だと思います。

ITについて専門外の人が論考する自体は良いことだと私は思いますが、計算機科学について知識のない人が、科学技術上の観点について憶測で論考するのは望ましくないですね。

とくにセキュリティに関わる場合は、致命的な事故を招く場合もあるので危険です。

IT技術者が立場にとらわれずに技術的な論考を表明をすることがもっと求められているかもしれませんね。


参考リンク:
  1. ブロックチェーンをもう一段深く理解する
  2. Busting 7 Blockchain & Bitcoin Myths - Crowdfund Insider 
  3. BitCoinとBlockChainにまつわる誤解ーそんなことはできない - Qiita (2016/1/10追加)
  4. なんでもかんでもブロックチェーン?何をもってブロックチェーン?ブロックチェーンの用語の混乱を整理してみる(議論たたき台) | ビットコイン&ブロックチェーン研究所 (2016/2/15追加、大変優れた整理なのでお勧めします。私はこの整理でいうとフルコンボのブロックチェーンは面白いと捉えますが、他のものには極めて懐疑的です)
  5. ブロックチェーンという言葉に騙されないために - いもす研 (imos laboratory)  (2016/12/10追加)

この記事が広まったので補足: (2016/1/7 15:45 バンコク時間)

私はブロックチェーンやbitcoin自体を否定するつもりでこの記事を書いたわけではありません。世の中で、技術的裏付けを全く提示せずにブロックチェーンが「ゼロダウンタイムのトランザクションを低コスト」で実現する技術だとか言うようなジャーナリストなどが目立つので、それに対して疑問を呈する意味で書きました。

一般的な(bitcoinに詳しいわけではない)技術者として見ると、bitcoinやそれに関連する技術が「ゼロダウンタイムのトランザクションを低コスト」で提供するような技術とは、そもそも目的からして全くかけ離れており、そうした紹介がされることには強い違和感があります。しかし世の中の記事では、その違和感を埋めてくれるような技術的説明が全くありません。それに一石を投じたかったということです。

ただし、現時点で技術的に説明されてないとしても、ベンチャー企業などがその技術を開発中であり開発成功する可能性はありますし、そうした可能性を否定する意図は全くありません。

ましてやbitcoin関連技術やブロックチェーンが単なる分散データベース以外のもっと新しい用途で使われることを否定する意図はありませんし、そのような記述をしたつもりもありません。私の筆の滑りもあるでしょうが、その点については、慎重に読んでいただければ理解していただけると思いたいところです。