平文のTCP/IPにおいて転送されたデータの信頼性を期待してはいけない

TL;DR 平文のTCP/IPの通信では送信したデータの完全性は期待できないので、経路にはSSL/TLSを使いましょう

 

TCP/IPは信頼性のある通信を実現するためのプロトコルという説明がよくされる。
なのでTCP/IPでやり取りしたデータは1bitの狂いもなく転送先に届くと思われがちだ。

TCP/IPが信頼性のある通信を確保してると言われているのは下記の理由による。

 

1. データが届かなかった場合に再送処理がプロトコルに入っている
2. TCPパケットにペイロードチェックサムがあり、検知されると修正もしくは再送される(ただし16bit)
3. IP層の更に下の層にチェックサムがあり、検知されると修正もしくは再送される(イーサの場合32bit)

 

しかしチェックサムはそれぞれ16/32bitのため、昨今の超大量データを取り扱うにはかなり心もとない。

 

1. ざっくり1600万〜100億パケットに1回の確率で検知できないエラー(データ化け)が起き得る

When the CRC and TCP checksum disagree


2.  数百ギガバイトのインターネット経由の転送でデータ化け

2005-01-30 - 登 大遊@筑波大学大学院コンピュータサイエンス専攻の SoftEther VPN 日記

 

10年ほど前はIPより下の層は技術向上によりどんどん信頼性が増すものだと思っていたけど、技術革新が故にモバイルや衛星間通信など今まで信頼性を確保できなかった領域に物理層が拡充するようになってきて大分怪しくなってきたと思う。

 

というわけで平文のTCP/IPにおいて転送されたデータの信頼性を期待してはいけないことは理解してもらえたと思う。ではどうすればいいか?その答えはSSLを噛ませば良い。


SSLは暗号化の技術なのに「なんでデータの信頼性に関係あるの?」と思うかもしれない。SSLには暗号化を行って第三者からデータを秘匿する機能の他に第三者によるデータ改ざんを防止する機能もある。

データ改ざんの防止

→データが改ざんされることなく届く

→データの信頼性の確保ができる

 というわけだ。TCP/IPの上位にさらに改ざん防止がつくためTCP/IPとは比べ物にならない信頼性を確保できる。

 

# SSLの改ざんに対する強度についてはちょっと力尽きました。誰か教えて。。

 

今回職場でストリーミング処理基盤の話をしている際、違うチームで同じ話になったり、いくつかのストリーミング処理基板の初期実装で転送部分がSSL非対応だったりしたので、もしかしたらこれは一般的に知られてる話ではないのかもしれない。

 

 「インターネット越しの通信は盗聴がやばいからSSLにしとこう」ということでSSLにしといたので意図せずデータが救われてるケースもあるが、データセンター間の専用線の場合「秘匿の必要がないから平文で大丈夫」と考えるのはとても危険な考え方だと思う。

 

莫大なデータをやり取りするようになった昨今、TCP/IPは信頼できると無邪気にインターネット越しにデータ転送してたら実はデータが壊れてたみたいな話は今後ありそうなので、気をつけていきたい。

(おしまい)

ビビりなエンジニアが大企業を辞めて起業した話

この記事は

Supership株式会社 Advent Calendar 2016 - Qiita

の1日目の記事になります。遅くなりました。

Supership CTO室室長 @yamaz です。

ビビりなエンジニアが大企業を辞めて起業した話を書きます。

 

スケールアウトを立ち上げる前、私はヤフージャパンに務めていた。

当時私は結構な給与をもらっており、かつそこそこの立場におり、かつ仕事も面白く、普通なら辞めないような立場だった。

 

だけど思うところがあり、会社を辞めその後会社を作ることになった。今回はそのあたりの話をしようと思う。今から10年ほど前の話だ。

 

きっかけ

きっかけは上司からの命令だった。

Adsense作って。2人で」

なんとなくそれっぽいものを作ったものの、エンジニアとしての自分に疑問を持つ結果となった。

AdSenseのすばらしさとのギャップ

AdSenseはすごいプロダクトだ。「各URLでそのページの情報に即した広告を出す」と簡単に言うけれど、インターネット全ページのメタ情報を持ち、それに沿った広告案件を選択するというのは、Googleの設備があって初めて成立する話だ。

 

実装を想像すればするほどすごいプロダクトで、「今後はこれ相当を作れる感じじゃないとダメなの?」と絶望的な気持ちになった。

ヤフーテクノロジーのすばらしさとのギャップ

当時ヤフージャパンはアメリカのYahoo! Incからソフトウェアを供給してもらい、それを日本向けに改造してビジネスを行っていた。Yahoo! Incから提供されるソフトウェアはWorld Wideで十分に鍛えられたソフトウェアで、市場的に2,3年遅れてる日本に投入するだけでまさに未来からやってきた謎兵器のように機能し、苦労という苦労をすることなく市場を席巻できた。いわゆる「タイムマシン経営」と言うやつだ。

 

ただ「市場を席巻できた」といいつつも、実際はヤフーテクノロジーに大きく下駄を履かせてもらった上でビジネスをしていたので、自分の実力がどの程度なのかよくわかってなかったという問題があった。

2006年当時日本で一番HTTPアクセスをさばいていた企業は実はヤフージャパンではなく、おそらくガラケー版「怪盗ロワイヤル」を提供していたDeNAだったと思う。彼らはYahoo! Incのような外部に頼ることなく、0から超トラフィックをさばく体制を構築してわけで、彼らと比較して「あれ?自分ってヤフーテクノロジーに大きく下駄を履かせてもらってるだけで、全然大したことないんじゃね?」と、これまた自分の実力に疑問を持つことになった。

(2016/12/6 注  怪盗ロワイヤルは2009年10月のリリースなので、時系列的な勘違いがあるようです。DeNAの中の人に怪盗ロワイヤル込みの全体数値を聞いて「あ、ヤフー超えてるな」と思ったのは確かです)

早くえらくなりすぎてしまった問題

 私がいわゆるWeb業界に入ったのは1998年で当時25歳、辞めたのは2006年で8年ほどやった勘定になる。その時25人位のチームメンバーを仕切っててやってることはほとんどExcelパワポの仕事だった。

その時私が考えたのは

 

「今まで8年やって34歳。65まで働くとしてこのあと31年。今までと同じような業界の伸びがあとざっと4セットあるとして、パワポExcel仕事なんかしていて人生もつのか?」

 

ということだった。1998年当時はアメリカから出来上がったプログラムを持ってきて、perl4でcgi-lite.pl(古い!)でちょっと気の利いたCGIプログラムを書くだけで神扱いされたのが、8年経った時点でAdSenseっぽいものを作れてもなんだか役に立たない状態になっていた。この急激な伸びがあと4セットもあるのにExcelをいじる仕事をするだけで会社人生がまっとうできるとは到底思えなかった。

 

私はもともとそこまで凄腕のエンジニアというわけではなく単なるビビリのエンジニアで、当時の普通のメーカーに就職し、退職金をもらって定年退職できればいいやと思っていたんだけど、この業界のこのスピード感と自分の実力を鑑みるに、「こんな状況じゃ、普通の定年退職すらやばいのでは!?」と怖くなって退職することにした。

退職と起業

勢い良く退職したはいいものの退職後なにかプランがあったわけではなく、

プラプラしながらいろんな勉強をしていた。そんなときにとある企業の社長から

 

「いいのできたら採用してあげるから広告システム作ってよ」

 

と言われて本気印の広告システムを0から作ることにした。当時特に目的がなかった私にとって、この提案は願ったり叶ったりで、

 

「超本気でシステムを作ったら仮に採用されなくても、できあがったプロダクトを名刺代わりに求職活動すれば、どっかの会社が拾ってくれるだろう」

 

と考え、半年ほど部屋にこもりっきりでコードを書き続けた。

残念ながら最初に声をかけて貰った企業さんには採用されなかったが、

別の企業さんに採用され、それがスケールアウトの起業のきっかけになった。

 

その後いろんな仲間との出会いやラッキーがあり、買収、合併などを経て今も順調に業績を伸ばしているが、この経験を通じてヤフーテクノロジーに履かせてもらっていた下駄に近いものを0から構築することができ、今後も闘っていく自信を得ることができた。

最後に

本ブログは「最速配信研究会」などという偉そうな名前だけど、 なんだか普通のビビりな1エンジニアがみなさんと同様に悩みながらもエンジニア人生を全うすべく模索している記録でもあります。

 

私は今44歳で大抵のWebエンジニアのみなさんよりも少しだけ年配だと思います。

年配としていろいろ見てきていて多少偉そうなことを言えるとするなら

 

「エンジニアとして全うしたいならおそらくは手を動かし続けられる環境に居続ける必要がありそう」

ということです。

あなたがちょっとばかりやり手の35歳技術マネージャーだったとしましょう。25年前~現在以上の業界進化がこれから定年までの25年間で起きるとして、全く手を動かさない仕事をしていて逃げ切る自信はありますか?私はその賭に勝つ自信が全くなかったので、会社を辞めて起業をしました。

— 最速配信研究会(スケールアウト山崎大輔) (@yamaz) 2012年2月28日

弊社はエンジニアがエンジニアとして全うできる環境を作るべく日々努力してますので、興味があるかたは是非。

 

採用情報 | Supership Recruit

 

(おしまい)

 

P.S 起業は本当に大変だったので、手を動かし続けられる環境を作る目的で起業するのは全くおすすめしませんw。が、自分とは全く関係ない海の向こうの話というわけでもありません。このあたりの話もニーズがあるようだったら書きます。

 

きたるIOT社会の何かを見た

Philips hueはスマートフォンタブレットからインターネットを経由して操作できる照明システム。1600万色を超える色彩でどんな色でも再現できる。ワイヤレス電球システムです。」

 

ということで先日HUEを自宅に導入し、日々快適に使っていたわけです。

ところが今日普通の電球ならスイッチ一発で電気がつくのに、

アプリが入ったタブレットがたまたま別の部屋にあるので、PCで操作しようと思って
ブラウザ開いて「HUE」で検索して、幾つかのクリックを経てMyHUEにたどり着き、
SignIn画面でGoogleアカウント使ってログインしようとしたらちょうど二段階認証が切れてて、別の部屋にある携帯を取りに行って、「仕事してたんじゃないの?」と奥さんに睨まれつつ、なんとか携帯をゲットして認証番号を入れてやっとログインできたと思ったら、選択したGoogleアカウントが個人じゃなくて会社アカウントでHUEに紐ついてなかったので、何回もログインしなおそうとしたら変な認証用Cookieかなにかでアカウントが切り替えられず、しょうがないので別ブラウザを立ち上げてまた「HUE」で検索して、幾つかのクリックを経てMyHUEにたどり着き、SignIn画面で今度こそ個人用Googleアカウント使ってログインしてやっとこさMyHUEにたどり着いたら、部屋にあるHUEが認識できてなくて電気がつけられず、予備にあったHUEに切り替えて認識させてオンにして。。。

という過程を経て、やっと電気がついてこの記事を書いてるわけですが、きたるIOT社会の何かを見た気がしたのでした。

ちなみに毎日寝落ちしても特定の時間になったら電気をオフにしてくれる機能は便利です。

 

(おしまい)

 



P.S その後、壊れたと思ってたHUEは壊れてなく接続しなおしてスイッチ側で電源をオフ/オンすることで電気はついたんだけど、非常に納得いかない。。