Tetsu=TaLowの雑記(はてブロ版)

しがない大学教員が琵琶湖のほとりから呟きます

税抜きでも税込みでも素数になる価格

これでちょっと気になったので逃避を兼ねた小ネタ。

消費税素数の検索

京大の素数ものさしが税込み売価が577円で、税抜きだと素数にならないことに端を発して、税抜きでも税込みでも素数になる価格を探すことにしました。またJavaScript書こうかと思ったらOrionがまた重くて役に立たないので、手元のPython3でざっと。素数判定はsympyパッケージに頼りました。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math
import sympy
for i in range(1,1000000):
    fi=math.floor(i*1.08)
    ci=math.ceil(i*1.08)
    if(sympy.isprime(i) and sympy.isprime(fi)):
        print(i,fi,end=" ")
        if(i*1.08-fi<0.5):
            print("切り捨て・四捨五入")
        else:
            print("切り捨て")
    if(sympy.isprime(i) and sympy.isprime(ci)):
        print(i,ci,end=" ")
        if(ci-i*1.08<=0.5):
            print("切り上げ・四捨五入")
        else:
            print("切り上げ")

税抜き価格100万円までの間には、税抜き税込みとも素数になる組合せは10901通りあるらしいです。

1223は素数だけど20161223は素数じゃなかった~素数秒の提案~

この記事はkmc-id tetsu(id:tetsutalow)によるKMC Advent Calender 2016の23日目の記事です。

www.adventar.org
昨日はkmc-id base64(id:basemusi)さんの記事「いい感じのメドレーを自動生成したい」でした。素晴らしい。きっと自作で特定のアニメの主題歌挿入歌などなどメドレー、なんてのを気軽に作ってカラオケとかできますね。

basemusi.hatenablog.com

ごあいさつ

あらためましてこんにちは、京大マイコンクラブ(KMC)部員のtetsuです。KMC的には10期生です。30回生です*1。OBではないのかと思われるかもしれませんが、今でも部費を払い続けているので*2身分は部員なのです*3。京大で教員してた頃は顧問をしていた気がしますが、今は京大を離れたのでまたヒラ部員をしています。ヒラ部員らしく、たまにはAdvent Calendarにも参加してみようかなと思い立ってエントリを立てた次第です。

そのKMC Advent Calender 2016もあと残すところ3日、これまで他の部員たちによる楽しいエントリが並んでおり、とても役に立ったり勉強になったりするものも少なくないのですが、私は全く役にも立たず毒にも薬にもならないエントリで参加しようと思います。よろしくお願いします。

今年の素数素数日あれこれ

年も押し迫ってテレビ等で10大ニュースなども流れるようになりましたが、今年初めの大きなニュースといえばなんといっても、現時点で最大のメルセンヌ素数が見つかったことでしょう。新聞などでも数学に関する記事にしては大きく取り上げられましたね。

wired.jp

www.asahi.com

本当は発見されたのは去年の9月だったんですけどね。

それに比べれば小さなニュースですが、今年は北米での素数蝉(17年ゼミ)の大発生*4も話題になりましたね。

www.tenki.jp

米国のセミはちゃんと数学がわかるようで羨ましいですね。日本のセミは個別には7年とか地中にいるようですが、我々にとっては毎年鳴くので節操がなく思えます。それとももしかして、日本のセミは1を素数に復活させよと主張しているのでしょうか。

さて、素数愛好家界隈でメジャーな遊びに「素数日」を探したり愛でたりすることがありますよね。素数日の定義は本来いろいろ考えられますが、最も一般的な定義は西暦表記の年月日を8桁の数字で表したときに素数になる日のことを言うようです。例えば今日の日付である1223は素数ですが、これを素数日と呼ぶ人はあまりいないんじゃないでしょうか。一方20161223は残念ながら素数日ではないのですね。思わずテンション下がりますね。

そもそも2015年は例年になく素数日が少なく、13日しかありませんでした。その余波か、今年のはじめ頃には2ヶ月ほど素数日がないという日々を過ごさねばなりませんでした。そして、12月にも素数日がないのですよね。まとめると2016年の素数日はこんな感じでした。

tetsutalow.hateblo.jp

2016年は19日と、年あたりの素数日としては平均的日数が確保できた年でした(しかも19も素数)が、1月2月12月になると素数日がなくなるという、寒さと素数欠乏症のダブルパンチに耐えねばならない年でした。しかし、双子素数日(ここでは単純に2つの素数日が双子素数を構成している日と定義します)が2組もあって、それに救われた感があります。ついでに双子素数日を探すプログラムをJavaScriptで書いておきましたので、おいておきますね。

双子素数日を探す

では来年はどうでしょうか。2017年、6年ぶりの素数年には、今年と同じく19日の素数日があります。

20170121
20170219
20170223
20170301
20170303
20170331
20170421
20170511
20170519
20170607
20170627
20170807
20170831
20170901
20170903
20171017
20171101
20171201
20171219

来年も双子素数日が2組ありますね…それに加えて、来年8月末から9月頭にかけて、なんと2日続けて素数日という日があるではないですか。これは2002年5~6月以来、実に15年ぶりの出来事です。連続素数日を探すプログラムも置いておきますね。

連続する素数日を探す

そういえば2016年は素数年ではありませんが4で割り切れる年ですから、夏季オリンピックの年でしたね。次の2020年の東京オリンピックパラリンピックを楽しみにしている方も多いと思いますが、2020年は素数日にとっても記念すべき年です。

20200109
20200111
20200121
20200123
20200223
20200309
20200429
20200511
20200529
20200613
20200619
20200703
20200711
20200721
20200723
20200729
20200801
20200813
20200903
20201021
20201029
20201101
20201113
20201227
20201231
20210101

特別に2021年元旦まで加えておきました。御覧のとおり2020年は「毎月素数日がある」「双子素数日が2組3組ある*5」そしてなんといっても「年またぎの連続素数日がある」という大変素数日的には充実した1年になる予定なのです。年またぎ連続素数日は1987年末以来33年ぶりの出来事であり、この次は2029年末とすぐに訪れますが、さらに次となると2161年末までない、そのころにはドラえもんが生まれてる*6というほどの珍事です。さらにその次は2383年末なので、それまでに我々はガミラス*7クリンゴン*8奇居子*9を迎え撃たねばなりません。話が脱線しましたが、このように2020年は特別な年なので、とても楽しみになってきましたね。

素数不足解消のための素数秒の提案

しかし、いくら素数日を愛でていても少し物足りなくなることはないでしょうか。素数は無限にあるのに、なぜ月に1~2度あるかないかの素数日をこんなに待ち焦がれないといけないのでしょうか。そこでそんな素数不足を解消したい人のために、新たな概念を持ち込みましょう。それは「素数秒」です。

素数秒はここでは、年月日時分秒を14桁の数字で表した時に素数となるものとします*10。例えば2016年12月23日0時0分53秒を20161223000053とすると素数になりますので、これが素数秒です。ちなみにこれが本日最初の素数秒ということになります。2017年最初の素数秒は元旦の0時0分1秒、つまり20170101000001です。ちなみにこの日はIT業界の敵、うるう秒がありますね(日本時間で8時59分60秒)。素数秒は幸い、うるう秒対応する必要がありません(うるう秒は必ず非素数秒です)。

この素数秒、1日にどれくらいあるでしょうか。ちょっとプログラムを書いてみました。

素数秒を探す(試し割り版)

…遅い!さすがに14桁は8桁とはわけが違います。私の環境*11では30秒くらいかかりました。しかしその甲斐あって、本日12月23日は素数秒が2871回あることが分かりました。平均的には30秒に1回程度、我々は素数秒を楽しめることになります。

しかし遅いですね。残念ながらこのプログラム、単純に各素数候補素数で試し割りしてるだけ( nまで列挙なら O(n \sqrt{n}))なので、計算量的にはエラトステネスの篩( nまで列挙なら O(n \log{\log{n}}))のほうが有利のはず。実際には区間で求めてるので単純じゃないしどうかなと思いながら、区間エラトステネスのふるい(ナイーブな方法)でも実装してみました。

素数秒を探す区間エラトステネスのふるい版)

…せいぜい倍にしかなりませんね。エラトステネスのふるいの速度は計算量もありますが、コアのループの計算の単純さでも効いてくるので、60秒の区間ずつふるうのではあまり速度効果が出ないのでしょう。実はこの後、John Moyerに倣って11や13以下の素数でふるった後のビット列を使ってやれば少しは速くなるかなと試していたのですが、やはりJavaScriptでは複雑さが効くのか大して高速化できない上に、途中でOrionHubのバグを踏んでしまったらしくソースコードをゴミデータで上書きされてしまいメゲたので、これはもうここまでにしておきます*12

さて、この素数秒を愛でるにはどうすればいいでしょう。まさか時計と素数秒の表を見比べながら次の素数秒を今か今かと待ちわびる、というのはバカバカしいので、こんな時計を作ってみました。名付けて「素数秒時計」です。

f:id:tetsutalow:20161223135302p:plain

…デザインセンスがない点についてはご容赦下さい。機能としては、現在の時刻と共に、次に訪れる素数秒を表示します。素数秒ではない現在時刻については、その非素数秒を素因数分解したものを下に表示するようにしてみました。こうすることにより、素数秒以外の各秒でも、さまざまな素数との出会いが目を愉しませてくれます。これで素数欠乏症も怖くありません。きっと舘ひろしさんも喜んでくれると思います

この素数秒時計をデスクトップに表示してじっと眺めていると、あたかも素数階段を一歩一歩登るような喜びが味わえます。平均的には30秒に1度とはいえ、やはり素数らしくその間隔には不思議なばらつきがあります。不意に訪れる、次の素数秒との長い空白を息を潜めて待つも良いですし、突然目に入る「双子素数秒」との出会いも楽しいものです。皆さんもぜひこの「素数秒時計」で、充実の素数ライフを!!

 さて、明日はいよいよクリスマスイブ。KMC Advent Calender 2016の明日の担当は、kmc-id hakurin(id:hakurin070706)さんです。明後日のKMCお絵かき Advent Calendar 2016ともども、頑張ってください!

www.adventar.org

*1:つまりKMCは来年40周年を迎えます。

*2:現時点でKMCの歴史の75%の期間部費を払っています。その間、部費の値上げはなんと1度しかありませんでした。

*3:KMCは入部に際し所属身分年齢性別国籍宗教その他何の制限もありません。実際、最近はネット部員的な人も増えてきています。まだ人類以外が入部申請してきたことはないようですが、規約上は宇宙人でも大丈夫だと思いますので、個人的には、ツノがあってトラジマビキニを着ていて空を飛べる女性の入部をお待ちしています。

*4:実はWikipediaをよく読むと今年の年次集団はそれほど大きくない群らしいです。ニュースを見かけたので書いちゃいましたがよく調べるべきでしたね。

*5:最初見落としてましたAKさんありがとう

*6:ドラえもんは2112年9月3日生まれ。この日は素数日ではありません。

*7:ガミラスは2192年来襲、2199年には地球防衛軍が敗北しヤマトがイスカンダルへ向かう予定です。

*8:U.S.S.エンタープライズ就航は2245年ですが、2293年にはクリンゴン帝国とキトマー条約を締結します。2383年はボーグとの戦いの最中ですね。

*9:奇居子の地球侵攻は2371年。

*10:コンピュータ屋としてはUNIX timeで定義することもちょっと頭を過ったのですが、2進法の美しさと素数の美しさはベクトルが違うように感じたので止めました。

*11:VAIO S11(Core i5-6200U 2.3GHz)にWindows 10 64bitとChromeバージョン 55.0.2883.87 m (64-bit)

*12:ようやく、Advent Callendarのお題の「KMC」らしい話題になりました。

日本の大学で情報セキュリティを学ぶには

私が何気なく、しかも初めて書いたYahoo!知恵袋への回答が思わぬ広がりを見せるという事件?が起きました。

detail.chiebukuro.yahoo.co.jp

さっと(割と慌てて)書いた私の回答の足りなさや、違った見方を補おうとされてか、色んな皆さんが乗っかって下さって素晴らしい回答を寄せて下さって、 結果としてすごい回答集に。そして、果てはWeb記事化される事態に。

www.itmedia.co.jp

これ、最初は徳丸浩さんが回答に立命館大を挙げて頂いたのを見て、有り難い話なので私も何か書かねばと最初このblogにエントリを書きかけてたのですが、忙しくて書き上がるのに間が空きそうだったので知恵袋に急遽登録して勢いで投稿したものでした(しかも東京出張の新幹線車内で)。中身は概ねいつも言っていることでして、要するに

  • セキュリティを学ぶにはまず情報科学の基礎体力をつけなくてはならない。大学で体系立てて集中して学ぶべき。
  • 情報収集と自学自習が大切なので刺激を受ける機会が必要。そのためにコミュニティへの参加を。

この2つに集約されると思っています。かつてこのblogで書いたことにも重なりますね。

tetsutalow.hateblo.jp

ところで、元の質問主は関西の「私学」を求めておられました。候補に挙げられたのは関大の総合情報学部でしたが、知恵袋にも 回答を寄せられた小林孝史先生(名乗っておられないですがすぐわかりますよね)や、 暗号がご専門の桑門秀典先生を意識されたのでしょうか。 関大を挙げられる程度の学力をお持ちとなれば、多分選択肢は関西だと立命館になるだろうなと思って、知恵袋ではあんな感じの回答を書いたのですが、高2でもう私学に絞るなんて勿体ない、国公立も目指したらいいのにと思ってしまいました。早くから受験を私学に絞りたいという受験生は多くの場合、受験科目数の少なさに魅力を感じてるようですが、そこはなんとか踏ん張って国公立大も受けられるように勉強をしておいた方が後々大きく役立ちますから。

というわけで、実はあの知恵袋への回答を返す前には、国立大も関西以外も含めた日本の大学でセキュリティを学ぶことについてエントリを書き始めていたのですが、収拾が付きそうにないので慌てて知恵袋自体に書いた次第。 でも書きかけのモノがあるので少しだけ掘り起こしてこのエントリを作りました。以下は掘り起こした文章です。高校生とその保護者や進路指導担当の皆さんに向けたものとして。


さて、大学でセキュリティを学ぶにはどういう選択をすればいいんでしょう。そもそも「セキュリティ」関連人材っていっても求められる能力は様々です。最近JNSAがセキュリティ知識分野(SecBoK)人材スキルマップ2016年版を公表しましたが、その作成に私も参加させて頂く中で、改めてこの業界で働く上で必要なスキルの幅広さを感じました。

www.jnsa.org

ここで挙げられるような、技術からマネジメントに渡る広いスキルを身につけられるカリキュラムを持つ大学は、学部レベルでは長崎県立大の情報セキュリティ学科しかなさそうです。このカリキュラムがうまく回れば素晴らしいセキュリティ人材が育成できそうですね。

ただ、個人的にはこのカリキュラムの理想を実現すること、またこのカリキュラムを消化できる能力のある学生を集めるのは、かなり大変だろうと感じています。 正直なところ、うち(立命館)に来る学生さんには、学部レベルからマネジメント関係を教えようという気にはなりません(話としては触れるかもしれませんが)。 学生の消化できる量を考えると広く薄くやっている余裕はないので、まずは情報科学の基礎とセキュリティ関連技術をしっかり身につけてもらう方が良いと感じています。

ということで、セキュリティを大学で学ぶには、学部時代にはカリキュラムを良く見て、計算機の構成、OSなどの基本ソフトウェア、プログラミング、ネットワーク、 暗号技術について学ぶことができるところを選ぶと良いかと思います。特にプログラミングとネットワークに関しては演習があるところがお勧めです。 このようなカリキュラムを持つ大学なら比較的選択肢は広くなると思います。

最近の大学はどこでもカリキュラムやシラバスを公開していますので、どのような講義が開講されておりどのようなことが学べるのか調べるのも簡単になりました。 例えば立命館大学情報理工学部ではカリキュラムこちらに 主な科目名とともに書かれています。この科目名をこちらのシラバスに入力すると、 どのような内容が講義されているのかよく判ります。他の大学も同様になっているので、ちょっと手間ですけど、是非見てみて下さい。

次に、大学院に進むべきか否かですが、これはセキュリティに関しては是非、修士課程に進むことをお勧めします。残念ながらセキュリティは求められるものが 広く、学部だけではとても全てを学びきれません。上記のSecBoKにあるようなスキルの多くについて、 少なくともそれがどのようなものであるか理解するという段階に達するだけでも、 大学院での学びと経験は必要になると思います。大学だけでは技術的セキュリティの基礎で精一杯ですが、大学院まで進むと 人的セキュリティや運用のセキュリティを含むマネジメントについても学べる機会が格段に増えます。 逆に言えば、そういうことを学ばせてくれる先生がいらっしゃる研究室に配属されるよう、進路を選ぶ必要があります。 大学院の場合は(SecCapなどいくつかの特別プログラムを除けば)講義より、研究室(ゼミ)での研究活動を 通じた学びの方が重視されるからです*1

また、大学院は大学とは違うところに行くこともできます。大学院になるとセキュリティを専攻するところが増えますし、そもそも大学院大学が 選択肢に入ってきます。例えば情報セキュリティ大学院大学は教授陣の層が厚く、守備範囲が広いので、 様々なことが学べるでしょう。また、兵庫県立大学の大学院応用情報科学研究科カーネギーメロン大学(CMU)とのダブルディグリープログラム を持っていますので、セキュリティ分野の最高峰の一つであるCMUの教育を受けることも出来ます(授業料が高いですが…)。 そして奈良先端科学技術大学院大学などの大学院が連携して提供しているSecCapというプログラムは 本当に幅広い講義と演習が含まれているので、セキュリティについて大きな力が付くと思います *2

いずれにせよ、大学院は本当にどの研究室に配属されるかでやりたいことが出来るかが変わるので、 目指す大学院にどのような先生がおられてどのような研究をされているかよく調べるべきです。 大学院の各専攻の教員や研究室の一覧はWeb上にありますし、パンフレットなどが整備されている場合もあります (例えば立命館だと学部の研究室がこのように一覧になっていて、簡単な研究紹介があります。 大学院情報理工学研究科が情報理工学部と一体になっているってことが外側から判りにくいのが難ですが…) 他にも先生のお名前でGoogle検索をしたり、CiNiiと呼ばれる論文データベースや、 Google Scholarで英語論文を調べたりするとだいたいの研究内容がわかります。 例えば私の名前で検索するとこんな感じですね。

これで見ればだいたいどんな研究をしているかわかりますが、セキュリティを専門にしておられる先生だけでなく、 セキュリティ「も」やってます、という先生も少なくないので、研究内容をよく調べてみてそういう方も候補にしたら 良いのではないでしょうか。そして実際に連絡を取って、学びたいことややりたい研究についてよく事前に 相談すると、多くの先生はきっと応じて下さいます。


以上が書きかけの文章から起こし直したもの。海外の大学についてはもう書く元気がないのでどなたかに任せちゃいます。

ところで、最後に宣伝を。知恵袋でもちょっと頭出ししましたが、立命館大学情報理工学部は2017年度に改組を予定しています。 学科をコースに再編成するのですが、コースの中に「セキュリティ&ネットワークコース」を設けることになっています。 カリキュラムとしては、情報システムやネットワークの基礎技術に関する講義を中心に、暗号だけではなく セキュリティに関する講義を設けて手厚くします。さらに演習も行います。加えて、現在行っている京都府警との連携は 継続するほか、企業との連携を深めたり、引き続く大学院ではSecCapへの参加なども検討しています。 セキュリティエンジニアやアナリスト、コンサルタントを目指すような学生さんを集められたら良いなと思っています。 追ってちゃんとした広報もしますので、ご期待下さい。

*1:このあたりの感覚が、特に文系学部を卒業された保護者の方々や進路指導の先生方になかなか伝わらないことが…

*2:今の受験生の皆さんが大学院に進まれる頃にはSecCapは別のプログラムになっている可能性がありますので、 直前にまた調べ直す必要がありますが…

2016年の素数日一覧

一連のツイートが思ったよりバズったので…

ついでに2016年の素数日(日付を8桁で表すと素数になる日)を貼ります。

20160319
20160401
20160403
20160529
20160601
20160607
20160611
20160709
20160727
20160809
20160817
20160821
20160923
20161007
20161013
20161019
20161021
20161027
20161103

1月と2月と12月には素数日がありません。4月1日は素数日なので東工大の学長も祝辞のネタには困らないと思います ;-)

ついでに書いたヘボいコード。久々にRuby書いたなぁ…

追記:

もっと美しく書いてる人がいました

qiita.com

ついでにWebで計算できるようにしてる人も。

2016年の素数日

hamukazu.com

Prime Number Days


便利だけど気をつけないと危ないChrome Remote Desktop

Windowsデスクトップに遠隔でアクセスしたくなる事がありますが、皆さんどうされてますか?

昔から定番はVNCを使うことでした。個人的にも昔はRealVNCUltraVNCを使っていましたが、VNCは画質もイマイチですし音声も転送できないのでもう少しマシな方法が欲しいところです。

Windowsの場合、純正のプロトコルであるRDPを用いた「リモートデスクトップ接続」なら音声も転送できますし画質も綺麗です。ですが、これを利用しようとすると、遠隔操作される側が(Homeやwith Bingでなく)Professionalなど上位のエディションである必要がありました。ところが最近、HomeエディションのWindowsでもRDPによるリモートデスクトップ接続を可能にするRDPWrapなんてものが現れました。個人的にも最近は専らこれに頼っています。Windows 8.1 with BingやWindows 10 Homeあたりでも問題なく遠隔操作できるので大変便利です。さらに最近はMicrosoft純正のAndroidで動作するクライアントiPad/iPhoneなどのiOSで動作するクライアントもあるので、時々iPadから接続したりして快適に利用してます。

そんなわけで個人的にはRDPWrapですっかり満足しているのですが、他の選択として、最近GoogleChrome Remote Desktopなるものを出していることに気づいてはいました。

support.google.com

ChromeはChromecastに向かってタブだけじゃなくデスクトップを送信(キャスト)する機能があるので、Chrome Remote Desktopもこの技術の延長で実装されてるのかなと思っていたのですが、先日ちょっと調べる機会があって動作を見てみたらこれがとんでもない勘違いであることに気づきました。確かに便利ではあるのですが、なかなか怖いということもわかったのでまとめておきます。

Chrome Remote Desktopのインストールの方法&使い方

インストール手順や基本的使用法そのものはここに詳しいので譲ってしまいます。

www.atmarkit.co.jp

この手順を見ればわかりますが、サーバPCには、chromeremotedesktophost.msiのインストールを通じて「Chromeリモートデスクトップサービス」なるサービスが登録されます。

f:id:tetsutalow:20160101220815j:plain

この結果、対象となるサーバPCはChromeの起動の有無やログオン状態とは関係なく、電源onであればいつでも遠隔操作可能となります。Chrome Remote DesktopというからにはChrome起動中だけ遠隔操作可能なのかと思ってしまいそうになりますが(私だけ?)実はChromeとは無関係であるというのがミソ。ログオン前でも遠隔で接続してログオン操作から行うことが出来るので、確かに大変便利です(例えば再起動が必要になる状況になっても気軽に遠隔から再起動できます)が、一方で他人が利用中のPCのデスクトップも(許可さえされていれば)いつでも共有できてしまう=操作可能になってしまいます。なお遠隔操作時には、画面中央下に「デスクトップは現在<googleアカウント名>と共有されています」と表示されますので、遠隔操作されていることに気づくことはできます。この機能はどうも、PC操作の遠隔サポートなどを想定しているのでこのような動作になっているようです。

遠隔操作できる条件

調べた範囲では、サーバ側PCのデスクトップが共有可能になる=遠隔操作可能になる条件は以下の場合のようです(間違っていたらご指摘下さい)。

  1. サーバ側PCの管理者権限を持っており(=ローカル管理者権限のあるアカウントを持っている)あらかじめ対象PCを遠隔操作可能なGoogleアカウントを指定してあること。管理者権限はChromeリモートデスクトップサービスのインストール時と、遠隔操作可能なGoogleアカウントの指定時(PIN指定時)の2回必要になります。遠隔操作可能とするためには、対象となるPCのデスクトップでの直接操作が必要になります。また、1台のPCに対して遠隔操作可能なGoogleアカウントは1つしか指定できません。
  2. サーバ側PC、クライアント側PCともにGoogleの特定のサーバへの443/5222TCP接続と、UDPの対外接続が可能であること。NAT配下で構わないようですが、NATルータのUDP Hole punchingについてどんな制限があるかはまだ調べていません。重要なのは、サーバ側PCに外からTCP接続を必要としない、つまり、Port forwardingやUPnPを必要としないことです。UDPが必要なのでProxy配下の端末は操作できませんが、VNCやRDPと違ってTCP接続の穴を外から開ける必要がありません。

ネットワーク的な動作

実際のネットワークトラフィックがどのようになるかは、この辺を読むと推測できます。

(1) サーバ側

Chromeリモートデスクトップサービスを担っているremoting_host.exeから、chromoting-host.talkgadget.google.comのport 5222にTCP接続されています(プロトコルXMPPの模様)。また、実際のリモートデスクトップ接続後はランダム(だいたいは60000番台)なポート番号のUDPトラフィックをクライアントとの間で直接やりとりしますが、ここに書いてある設定によってポート番号の範囲を12400~12409に制限できるようです。

(2) クライアント側

ドキュメント読む限りはchrome.exeからchromoting-oauth.talkgadget.google.comのport 443とchromoting-client.talkgadget.google.comのport 5222にTCP接続するようです。ただ、私が試した範囲ではChrome.exeから5222への接続は確認できませんでした。代わりにport 5228へのそれらしい接続は見つかりました(バージョン47.0.2526.28の場合)。一度接続するとUDPトラフィックをサーバ側PCとの間で直接投げ合います(ポート番号はやはり基本ランダムで、設定により制限可能)。

なお実際にはGoogleのサーバは(現在のところ)3種とも全てwildcard-talkgadget.l.google.comへのaliasになっているようです。

問題となりうる状況

すぐに思いつく問題では、「UDPが通ればFirewall配下でも遠隔操作可能になるので、組織内のPCがセキュリティポリシーなどに反して遠隔操作可能にされているかもしれない(その結果組織のセキュリティに影響する)」という話です。ただ、PCの管理者権限が必要ですし、NAT接続などUDPが通らないとダメという制限がありますので、小企業のように企業内PCの管理者権限がエンドユーザに渡されているようなところでない限りあまり問題にならないかも知れません。

一般利用者にとっては「いつのまにか画面が他の人に覗かれているかも知れない」という問題があります。これはChrome Remote Desktopが現在使用中の画面状態(セッション)のまま他者に共有させるからです。この挙動はVNCと同じですが、純正リモートデスクトップ接続であるRDPとは違います(RDPの場合使用中のセッションを遠隔で奪うには使用者のログオンパスワードが必要)。共有状態になっているかどうかは画面に「共有されています」という表示が出ているかどうかで解りますが、気づかない可能性はあります。例えばログオンした画面をロックせずに離席してたら、覗かれても気づきませんね。

あと細かいことですが、通信プロトコルが全体としてXMPPをベースとしたものだと思われるのですが詳細は分からないので、リモートデスクトップ接続利用に伴ってGoogleにどのような情報が渡っているのかよく判らないのも気になります。これについてはヘルプ中の「Chrome リモート デスクトップの安全とセキュリティ」という節に「ネットワークの待ち時間やセッションの継続時間に関して、データを完全に匿名で収集、保存」とあり、不要な情報は保存していないと宣言されているので、これを信じる限りはそれほど心配要らないと思うのですが。

Google Chrome Desktopの使用を禁止する方法

端末に管理者権限がない利用者が勝手にChrome Remote Desktopの利用を有効にすることはできないので、この点は安心なのですが、ネットワーク管理側で一網打尽にしようとすると少し面倒です。TCP Port 5222による対外接続を塞いでしまうとできますが、他のXMPP使用アプリケーションも(どれくらいあるかわかりませんが)塞がれてしまいます。きちんと管理する方法については、Google自身が下記のような情報を提供してくれています。

リモートでデスクトップを管理する - Chrome for Work ヘルプ

上記URLにはいくつかのGoogleのホストをDNSでブロックせよと書いてあるのですが、これは管理者にとってはちょっと面倒な上、ちゃんと考えておかないと抜け穴が残っちゃいますよね(例えばDNSサーバを管理外のものに変更されてしまうと抜けられてしまう)。まぁ結局ちゃんと端末管理したければNATなんかせずにProxy設置しなさいということなんでしょう。

 

ということで、何かのご参考になれば。

あけましておめでとうございます

あけましておめでとうございます。
旧年中は大変お世話になりました。今年もよろしくお願いします。

今年の抱負ですが、セキュリティ人材の育成にフォーカスしたいと思っています。もともと人材育成には力を入れてきたつもりではあるのですが、昨年の年金機構の事件以降、業界的な人不足がとんでもなくなっているのを見て、危機感が強まりました。社会人のリカレント教育も含め、セキュリティ人材を産み続ける力を大学が持つことが大切で、そのために私が何が出来るか、私が所属する立命館大学に何が出来るか、考えながら走るような一年にしたいと思います。といっても私一人で成し遂げられるわけがないので、是非とも同じ想いを持つ人たちと一緒にさせていただきたく。ご協力よろしくお願いいたします。

というか正月くらいblog書こうかと…

 

Google Chrome for Windowsを32bit版から64bit版に移行する

Windows版のChromeが32bit版だったのに気づかず使ってて64bit版にしたら軽くなったという話がFBのTLに流れてきて、そういえば自分も出た直後に試験的にサブマシンに64bit版を入れて使ってみたもののメインマシンは放置してたなと思い出し、移行しようとしてちょっとだけハマったのでメモっておきます。
まず自分でお使いのChromeが32bitか64bitかの確認方法は以下の通り。まずメニューから「Google Chromeについて」を選択。
(以下の画像は潰れて見にくい人は画像をクリックしてオリジナルサイズを表示して下さい)

概要のバージョン番号を見て、64bitとあれば64bit版ですが、何もなければ32bit版です

64bit版のダウンロード方法がまた面倒で、普通にダウンロードしに行くと32bit版になってしまいます。そこで、「別のプラットフォーム向けのChromeをダウンロード」します。

Windows 8/7 64bitを選択。

利用規約の承諾などを求められますので承諾するとChromeSetup.exeが落ちてきます。
で、これを実行すれば64bit版をインストールできるのですが、私の環境では「実行中のGoogle Chromeと同じバージョンをインストールすることはできません。Google Chromeを閉じてからもう一度お試しください。」と出てインストールできませんでした。
f:id:tetsutalow:20150406113059p:plain
Chromeのウィンドウを閉じても同じ。で、タスクマネージャーで調べるとChromeのプロセスが残ってます。ここで手でプロセスを殺したり、再起動したりしてからインストールしてもいいのですが、そもそもなんでChromeは閉じたあともバックグラウンドで動き続けるかは、そういうの機能があるからなので、そちらの機能を切ることで対処しましょう。
まず、再びメニューから今度は設定を選びます。

詳細設定を表示します。

下の方に「システム」という項があって「Google Chromeを閉じた際にバックグラウンドアプリの処理を続行する」って言われますが、これがプロセスが生き残る原因です。なので、64bit版のインストールに失敗した人は、まずChromeのこのチェックを外します。

あとはChromeを閉じて、再度ChromeSetup.exeを実行すれば良いはずです。もしバックグラウンド実行機能(メッセージの通知とか)を使いたいのであれば、インストール終了後に再度設定して「バックグラウンドアプリの処理を続行する」を有効にするのをお忘れなく。

なお、Chrome 64bit版はセキュリティ的にはより安全になるはずなのでお勧めできますが、性能が向上するかは環境依存ではないかと思います。基本性能は上がっているようですが、どうしても32bit版より少しメモリ食いになると思いますので、メモリが厳しい環境では期待外れかも。あと、さすがにもう絶滅寸前じゃないかとは思いますがNPAPIが必要なプラグインを使っている人はトラブります。でもこの1月でNPAPIはデフォルトで一部を除きブロックされるようになったようですし、9月には完全にサポートがされなくなる予定です。
関連:
Chromium Blog: The Final Countdown for NPAPI

それにしても移行は拡張機能はもとよりCookieもそのままなので、本当に単なるバージョンアップと同じ感覚で行えます。