元@ITの編集者としてセキュリティ分野を担当。現在はフリーライターとして、ITやエンターテインメント情報を追いかけている。アイティメディアのONETOPIでは「ディズニー」や「博物館/美術館」などのキュレーターをこなしつつ、自分の生活を変える新しいデジタルガジェットを求め日々試行錯誤中。
ある晩、誠編集部から「個人用VPNサービスに興味ありますよね? あるはずですよね!」という電話がかかってきて、あれよあれよという間に、AnchorFree社が提供する「Hotspot Shield」を試用することになりました。筆者も注目していたサービスです。
Hotspot ShieldはiPhoneでも利用可能。接続に成功するとアンテナピクトの隣に「VPN」の文字が出る
VPNをざっくり言うと、通信の内容をすべて暗号化する仕組みだと考えてください。最近では、自宅や社外から社内ネットワークにつなぐために、VPNを用意しているという企業も多いでしょう。
インターネットはみんなが使う道路のようなもので、そこを走っているクルマが何を乗せているのかは簡単に監視できます。VPNは、スモークガラスで中を見えなくした専用のクルマのようなものです。この方法であれば、安価な共有道路を使いつつ、秘密の情報を目的地に届けられます。
では、個人でVPNを使わなきゃいけない状況とは? Hotspot Shieldを使ってみて分かった一番の利点は「暗号化されていない無線LANを安全に使える」ことでした。
以前、このコラムでも街中のカフェでWi-Fi接続サービスを使いながら、無線LANの安全策について考えました。無料だけど暗号化がされていない無線LANは危険ですよ、という内容です。ちなみに、“ドヤリング”とは、スターバックスでスタイリッシュにMacbook Airを広げ、ドヤ顔でお仕事(もしくはネットサーフィン)することを指すのだとか。
カフェ以外でも、例えば大きな空港などさまざまなところで無料の無線LANが普及しており、とても便利になりました。しかし、簡単に接続できるように暗号化が施されていない状態でサービスが提供されているところがほとんどです。こんな場合には、自分の通信内容を守るために、個人用VPNサービスを用意しておけば安心ですね。
Hotspot Shieldの使い方は簡単で、専用アプリ(Windows/Macに対応)をインストールしたあと、サービスにログインするだけでVPNに常時接続された状態になります。むしろ、まだアプリが荒削りでほとんど設定できる項目がなく、細かい制御ができないのが気になりますが、きっと改善されていくでしょう。
Hotspot ShieldのVPNサービスはiPhoneやAndroidでも利用できます。普段のネットサーフィンならばそこまでしなくてもいいかもしれませんが、お仕事のメールやDropbox、OneDrive、Googleドキュメントなどクラウドツールを利用する場合、VPNを使って安全に作業するべきでしょう。
VPNをオフにしたときは日本のIPアドレスだが(左)、VPNをオンにして、USAを選ぶとIPアドレスが米国のものに変化した(右)
日本ではまだあまりなじみのない個人向けVPNサービスですが、セキュリティに対する感度の高い人は徐々に使い始めてきたように思えます。ウイルス対策ソフトの次はパスワード管理ソフトが普及するはずだと個人的には考えていて、その次にはこのVPNサービスが注目されるのではないかと期待しています。
先日、筆者が体験した飛行機内でのインターネット接続サービス「JAL Sky Wi-Fi」でも、説明書でVPN利用を推奨していたことがとても印象的でした。「暗号化されていない無線LANは危険」という認識は広く浸透しましたが、これを「暗号化されていない通信ではVPN利用が必須」と変えなくてはいけないと思っています。
JAL Sky Wi-FiでもVPN接続が可能。安全は自分で確保する時代に
Copyright © ITmedia, Inc. All Rights Reserved.
PREVIEW ';
}else{
mask.innerHTML = '
';
}
if((_preview && location.hash.indexOf('maskoff') !== -1) || (typeof itmIdLogin !== 'undefined' && itmIdLogin == 1)){
img.style.visibility = 'visible';
}else{
nxt.parentNode.insertBefore(mask,nxt);
}
}
}
};
/**
* mask_leadin : subscrion マスクの実行
* @param {Object} マスク用パラメータ(sc,lc,ac,bc)と記事の状態(subscription_exist,subscription_objects,preview)を持った Object
*/
function mask_leadin(_p){
if(!_p.subscription_exist) return false;
addCSS('/css/spv/cmsInput.niche.css?date=202407081140');
let d = document;
let button = {};
if(_p.preview){
button.link = 'javascript:void(0)';
button.text = '続きを読む(TestMode)';
button.func = 'if(window.confirm(¥'マスクを解除しますか?¥')){location.href = ¥'#maskoff¥';location.reload();}else{return false;}';
} else {
button.link = 'https://id.itmedia.co.jp/isentry/contents?sc=' + _p.sc + '&lc=' + _p.lc + '&ac=' + _p.ac + '&cr=' + _p.cr + '&bc=' + _p.bc + '&return_url=' + encodeURIComponent(d.URL) + '&pnp=1&encoding=shiftjis';
button.text = '続きを読む';
button.func = 'cx_itm_mask_button();';
}
button.elem = createElementWithAttribute('div',{"class":"colBoxButton"},function(div){
div.appendChild(createElementWithAttribute('a',{"href":button.link,"onclick":button.func},function(a){
a.innerText = button.text;
}));
});
let mask = createElementWithAttribute('div',{"class":"mask_leadin"},function(div){
div.innerHTML = '
';
});
mask.querySelector('.colBoxIndex').appendChild(button.elem);
let subscription = _p.subscription_objects[0];
if((_p.preview && location.hash.indexOf('maskoff') !== -1) || (typeof itmIdLogin !== 'undefined' && itmIdLogin == 1)){
subscription.style.display = 'block';
}else{
subscription.parentNode.insertBefore(mask,subscription);
}
};
/*IMAGE MASK & Lead-in*/
(function(d){
let membersControl = searchMembersControl(); // %メンバー用マスクの存在チェックと対象要素取得
let imageMask = searchImageMask(); // 画像マスクの存在チェックと対象要素取得
let subscription = searchSubscription(); // subscription マスクの存在チェックと対象要素取得
let isPreview = d.domain.match(/(preview|broom|localhost)/);
let param ={
isLoginURL:'//status.itmedia.co.jp/isLoginIBO.cgi',
sc:getSc(),
lc:getLc(),
ac:'1a599d548ac1cb9a50f16ce3ba121520c8ab7e05d54e097bfa5b82cb5a328a0f',
bc:1,
members_control_exist:membersControl.exist,
image_mask_exist:imageMask.exist,
image_mask_objects:imageMask.Objects,
subscription_exist:subscription.exist,
subscription_objects:subscription.Objects,
preview:isPreview
};
let setExtraMask = function(){
if (d.getElementById('isLogin') || isPreview) {
// isLogin 呼び出し済みであれば各マスク処理を実行
if (imageMask.exist) {
param.cr = '2c93f81754142e105c8bca17824745d14c8c4d69e9d7ede513e5530546e97641';
mask_images(param);
}
if (subscription.exist) {
param.cr = '90cfa6d666682f8b5dc3c798020e432fc294ef430deb069008d4f8bceeb02418';
mask_leadin(param);
}
} else {
// isLogin がなければ、呼び出した後で再実行
let js = mask_images.setISLOGIN(param.isLoginURL,param.sc);
js.addEventListener('load',function(){
setExtraMask();
});
}
};
if (imageMask.exist || subscription.exist) {
setExtraMask();
}
})(document);
';
w.removeEventListener('scroll',arguments.callee,false);
htmlRequest(_xhrfile,_idname);
elem.setAttribute('data-status','true');
console.log('finished : ' + _idname);
}else{
// console.log('retry : ' + _idname);
}
}else{
e_loader.innerHTML = '
';
w.removeEventListener('scroll',arguments.callee,false);
htmlRequest(_xhrfile,_idname);
elem.setAttribute('data-status','true');
console.log('finished : ' + _idname);
}
}
};
w.addEventListener('scroll',scrolling,false); // スクロールイベント
scrolling(); // スクロールイベント(閲覧位置が半端な場合のために 1 回実行させる)
};
w.addEventListener('load',loading,false); // LOAD 後に実装
};