【Manjaro/Arch Linux注意】Yaourtは廃止になりました

すごくニュースだと思うんだけれど、全然話題になっていないけれど。

AURヘルパーである YaourtはAURからなくなりました

もう随分長いこと「非推奨」とされてきたのだけれど、ついになくなった、というかたち。

AURヘルパーの中ではYaourtが最も親しまれてきたし、最も有名だった。 「Yaourtを使う」というのが当たり前になってもいた。

けれど、近年はセキュリティ上の問題があり、メンテナンスされていないことからobsolateになっていた。 で、今ついにAURからなくなった、ということ。

これに伴って、CommunityパッケージになっていたManjaroでもYaourtは廃止に。

今後はyayなり、Trizenなりを使っていくことになる。

そのうち「Yaourtを野良ビルドして使う」みたいな記事が出てきそうだけれども、 危険なのでやめましょう

Archwikiでは2019-05-20現在、日本語版はそのままであるものの、英語版はYaourtに関する記述自体が削除されている。

Axon7故障 → AQUOS R2 Compact購入

弱いAxon7

Axon7が壊れた。 画面が砂嵐になる、という症状だ。

どうもこれ、Axon7にとってはよくあることのようで、報告例が非常に覆い。 実際、私も以前この症状で一度交換している。

画面の接触の問題だそうで、強く押し付けたり踏んだりすると直ったりするし、 これで一時的に直してデータ移行をしたいのだが、画面がうつらなくなる可能性があるのではとても使えないので、嫌なタイミングではあるが機種変することにした。

Axon7に関しては、画面の問題以外にも、重量や発熱など基本的な部分に加え、やや不安定な挙動、WiFiをロストしがち、音楽再生中にオーディオボリュームを変えられてしまう、といった問題もあり、正直使っていてそんなにいいとは思えなかった。 ただし、Dolby Atomos, SD820, 3.5mmジャックありという構成自体は、音楽聴くにもゲームするにもよく、カメラ性能もそこそこ良いため、まぁまぁ活躍したのは確かだ。

移行先の選択

まず、前提としてサブ機である。

メイン機は6.4インチのOPPO R17 Proがある。ブラウジングや入力系、そして圧倒的なカメラの性能を踏まえてのカメラ機能に関してはこちらに任せることができる。 SD710なので、性能もまぁまぁ高い。また、画面が綺麗なので、写真を見たり動画を見たりするのも(スマートフォンではほとんどしないが)メイン機扱いで良い。

サブ機の主な役割はアカウントの使い分けという面を除外すれば、音楽を聴くこととゲームである。 そのため、

  • SDカードスロットと3.5mmジャックがある
  • オーディオエンハンスがある
  • SD820よりゲーミング性能が高い
  • 画面操作がしやすく、反応が良い
  • できれば小さく、軽い (ただし、ゲーミング性能を損なうなら非優先)

を条件とした。

SD820よりも性能を要求しているのは、主にはやっているゲームのためだが、 それ以外にもGPU的に重いアプリがいくつかあり、GPU性能が高いほうが快適性が高いためである。

最有力はAQUOS R2 Compactとした。

これは、登場時から、「SD845で、軽く、小さい。SDカードに対応していて3.5mmのジャックもある」ということから、まさにR17 Proの補完に最適であると考えていたからだ。 AQUOSスマートフォンは経験上、非常に上部で壊れない、という点も私を後押ししていた。 また、以前ASUS Zenfone 4 Selfie ProとZTE Axon7の性能・特性・得手不得手が似過ぎていて棲み分けが出来ない、という問題も踏まえている。

その上で店にいったのだが、日本語がやや拙いおねえさん(私にOPPOを推した人でもある。 でも購入したのは違う店だった)推奨のNova3が対抗の候補となった。 値段的にもR2 Compactより4割近く安いのは魅力的ではあった。

SDカードスロットがあり、オーディオエンハンスがあり、なおかつKirin 970を搭載しており、要件は満たすのだが、6.4インチでやはりR17 Proとの棲み分けが難しい。 また、Kirin970の性能、体感的にはSD710を搭載するR17 Proと比べても高くはないように感じられた。R17 Proは結構さくさく動くのだが、Nove3はフリップアニメーションなどがちょっと遅い。

もっと安い端末でめぼしい選択肢もなかったことから、当初の狙い通りR2 Compactを選択した。 大きな点としては、「Nova3もそんなに安いわけではないので、微妙に気の進まない端末を買うよりは愛用できる端末を買うほうが安い」という判断であった。

SH-M09 AQUOS R2 Compact 概要

SD845を搭載しながら、5.2インチディスプレイを搭載した145gのコンパクトスマートフォンである。

「5.2インチならそんなに小さくない」と思うかもしれないが、131*64*9.3(mm)で、132*66*9.6(mm)で4.9インチだった先代AQUOS R Compactよりも小さい。サイズ感としては、5インチスマートフォンよりも明らかに小さく、4インチ台だった昔のスマートフォンに近いサイズ感。重量も140gから135gへと軽量化された。

ただし、9.3mmという厚みは、6.4インチのR17 Proが7.9mm、特に薄かったZenfone 4 Selfie Proが6.85mmということを考えると、こちらもクラシカルで分厚い。アルミフレームだし、昔のiPhoneのようだ。

先代がSD660, 3GB RAM, 32GB ROMといったミドルクラスの性能を与えられていたのに対し、SD845, 4GB RAM, 64GB ROMというフルサイズのR2同様の性能が与えられている。「コンパクトスマートフォンはアンダークラス」という位置づけを破り、「R2のコンパクト版」に切り替えてきたわけだ。 画面が小さいので、自ずからSD845機の中でもベンチマークスコアは特に良い。

元々はソフトバンクキャリアで出ていた端末で、「らしく」、防水・防塵に対応。IPX5/8/IP6Xと本格的である。インカメラは8Mpxにすぎないが、アウトカメラは22.4Mpxと妥協なく、ディスプレイは2280x1080pxで120HzのハイスピードIGZO。 アウトカメラが22mm相当の広角レンズで、しかも光学式手ブレ補正つきあるという点も大きい。インカメラも画素数こそ少ないが、広角レンズで使いやすい。控えめな美顔機能もある。

「小さい」という点を除けば基本的にはハイエンド機の構成である。

さらに、最近のハイエンド機が失ってしまった、SDカードスロットと3.5mm4極のステレオヘッドセットジャックを持っている。

スマートフォンに全方位要求するが、手が小さいため大きい端末が選べないと歯噛みをしていた女性には最高の端末ではないだろうか。

ちなみに、特に女性向けというような売り方はしておらず、カラーラインナップも白と黒とくすんだ緑となんとも微妙。

使用感

速い

スマートフォンでここまで速いと本当に驚く。

私の印象ではスマートフォンというのは操作ごとのレスポンスが遅く、待ってばかりである。 指を離して次に指を置くまでの時間に操作が完了していないのは、もはや欠陥といっていいレベルだと思うのだ。

webの表示も遅く、快適性が極度に乏しい。 私がスマートフォンをあまり使わない理由がここにある。スマートフォンを10分使うなら、コンピュータを起動したほうが時間の節約になるし快適だ。

だが、R2 Compactは操作からして速い。 単純にアニメーション時間が詰められているのかもしれないが、アニメーションが速く、webの表示も速い。 さらにいえば、通信自体速く、Wi-Fiでのやりとりも速い。アップデートも速いし、アプリインストールも速い。 もう、「こんなに違うのか」と驚いてしまう。

120Hz描画のパワーもあり、さらに速さが強調される。最高である。

小さい。 軽いかどうかというと…

うちはたくさん端末があるのだが、パット見にR2 Comapctは古い端末に見える。 厚みがあってアルミフレームというクラシカルな外観も要因のひとつだが、いかにスマートフォンは大きくなっていくものだという認識が当たり前のものであったかというのを感じてしまう。

小さいだけに135gといいながらもった感じはむしろ重い。 ただし、持ち運ぶときは明らかに軽い。重さを感じるのは手で持っているときだけだ。

シャツの胸ポケットに完全におさまるサイズなのも良いところだ。

充電速度は弱点か

R17 Proは10分ちょっとで10%から90%まで充電してしまう超高速タイプであり、出かける直前に「あ、バッテリー」となっても着替えている間に間に合う。 Axon7もそこそこ速く、20%ほどでもごはんを食べている間に充電すれば60%は越える。

だが、R2 Compactは遅い。本当に遅い。公称では充電時間160分である。

充電器を見てみるとなるほど、なんと “5V/1A” しか記載がない。 MicroUSB時代ですら2A以上の急速充電が当たり前だったのに、これは驚異的だ。

R17 Proの充電器は “5V/2A, 10V/5A(!)” であり、Axon7の充電器は “5V/1.8A, 9V/1.8A, 12V/1.35A” である。 R17 Proの10Vに至ってはUSBの規格外の特殊な電気を流す。 最近のスマートフォンは形としてはUSB Type-Cを使いながらも、専用充電器でなければ充電できないものが多く非常に困ってしまう。 R17 ProはPD充電器でも5V/2Aで充電できるが、Axon7はネゴシエーションに失敗し、充電器、端末ともに危険な状態になる。 これは、私が使っているYOPJOCK製充電器が通常はサポートしないはずの12Vをサポートをするために生じるのかもしれない。

試しにR2 CompactをR17 Proと同時に40%から充電してみた(このとき使用したのはAxon7の充電器)が、充電量は2/5ほどであった。 R17 Proの充電器は50Wだから20W…というわけではない。R17 Proは3700mAhのバッテリーを搭載しており、R2 Compactは2500mAhであるため、67.5%ほどのバッテリー容量となる。 ということは20Wの67.5%、というわけでだいたい13.5Wということになる。これは不明で、5V/1.8Aなら9Wであり、それよりは充電できている…というより、5V/2Aに達しないと「急速充電中」の表示自体出ないはずだ。

USB PD充電器で充電すると、Axon 7充電器の充電にわずかに劣る。 恐らく、USB PD充電器で充電した場合、microUSB時代から存在する5V/2.5Aないし5V/2.6Aで充電することになるのだろう。

実際に充電時の充電器の消費電力(充電の供給電力とイコールではない)を見ると、Axon7充電器は9W、PD充電器は10Wであった。 また、5V/2AのZenfone4用充電器でも9W。

だが、超急速充電を実現するR17 Proが50W1、Axon7でも16W、USB PDに対応していれば27Wや45Wでの充電が可能であることを考えると、10W程度でしかない充電力は非常に心もとなく、 microUSB時代は変わらないバッテリーマネジメントを求められる。 バッテリーが小さく、ゲーム時はどうしてもバッテリーが不足しやすいのだが、充電して一時休憩…というような方法もとれない。

USB PDに対応している、という記載があるのだが、私の充電器ではそのようには感じられない。あるいは、私の充電器では対応していない15Vなのか2とも思うが、 ちょっと確認のしようがない。 USB PDでも135分とのことで、結局10Wと大差ない印象だが、もしかしたら初期に急速充電する方式なのかもしれない。

機能面は切り捨てられているレベル

ソフトウェア面で使いやすいかと聞かれると、「非常に使いにくい」とこたえざるをえない。

そもそもAndroid9が使いやすくない、という問題もあるけれど、それ以上に問題が山盛りである。

まず、「もつと画面点灯」が使いにくい。画面が拭けない。 これは「AQUOS便利機能→自動画面点灯→持つと画面点灯」でオフである。

Android9の問題である邪魔なGoogleアシスタントは、「Google→検索、アシスタントと音声→アシスタント→アシスタント→アシスタントデバイス→スマートフォン」でオフにできる。 深さに抵抗を感じる。

Android9の問題、WebViewでのフォーム入力をGoogleに送られてしまうことについては、「設定→Google→Smartlock for Passwords」でオフにすることで解消できる。

ゲーム中でも画面をスリープにされてしまうという問題は抑制する方法がない。画面スリープまでの時間を伸ばしておくのが現実的。

ナビゲーションバーは隠すように変更できるが、ナビゲーションバーを隠している場合、引き出す操作の反応はいまいち。 指紋センサーをマルチホームボタンとして使うことができるのだが、これはうまく操作するのは非常に難しい。ただし、指紋センサーのところにエッジがあるタイプの保護ガラスを使えば指紋センサーによるナビゲーションが現実的になる。

指紋センサーの反応はすこぶる良い。ただ、良すぎるため画面ウェイクアップを抑制しにくい。 指紋は、Android9の仕様に従いGoogleに保存される仕組みであり、嬉しくない。

導入されているアプリは

  • おサイフケータイ
  • からだメイト
  • OfficeSuite
  • SHSHOW
  • アルバム
  • コンテンツマネージャ
  • エモパー

と非常に少ない。 音楽プレイヤーすらない。今はサードパーティ音楽プレイヤーに対しては扱い厳しいのに。

ホームアプリも素のものに近いが、独自のものではある。

かといってGoogleアプリを入れまくっているわけでもない。

エモパーは大量の権限を要求する上に、現在地情報をオンにしておくことを要求する。 アルバムはカレンダーへのアクセスを要求する。

基本的な端末のハードウェアなどは悪くないので、設定などを練っていく手間をかけることになる。 OPPOはだいたいほしい設定になっているだけに、設定把握からはじまり面倒だ。

設定項目の追加などもなく、基本的には素のAndroidという感じ。 最近のAndroidが不十分であると感じている私にとってはいまひとつ。

良い点として、SH-SHOWはかつては「着メロ配信サイト」としての価値を担っていたが、現在においても色々と壁紙だったり、テーマファイルだったり、着メロだったり、あるいはS-Shoinの辞書だったりを配布していて、結構便利だったりする。 昔はパケット代を気にしてあまり使えなかったものだが。

ゲームはとても良い

私は「ゴシックは魔法乙女」というシューティングゲームをやっているのだが、反応が良いのでとてもやりやすい。 今のところ慣れないので被弾が増えてしまっているが、慣れてしまえば問題ないと思う。

ハイスピードIGZOのおかげで120Hz表示ができるのが良い。 何気に将棋ウォーズのエフェクトのなめらかさが際立っていたりする。 ちなみに、速さは将棋ウォーズでも生かされ、速く描画されるのでスピード戦である3切れはだいぶ有利。ただし、盤面が小さく、誤タップを警戒すると指すのはそんなに速くならないが。

「ゲームなら画面は大きいほうがよかろう」と思っていたのだけど、むしろこれこそいいのかもしれない。 重めの「カスタムキャスト」なんかももちろん問題ない。もたつきなく操作できる。

音楽は…悪くはない。

Dolby Atomosのインテリジェントモードはいまひとつであり、結局グライコがついているだけ、ということになってしまう。 疑似3D機能がなく、Axon7のものよりシンプル。

ただし、3.5mmジャックが上側にあり、グライコがあるというので十分でもある。

プレイヤーはPulserを使っているが、再生中はロック画面がアルバムカバーに置き換えられるのもまた良い。 ただし、そのせいでロック画面で文字がみづらく、ロック解除が困難になることもある。

優秀な日本語入力

日本語入力はS-Shoin。

画面が小さい、で最も最初に問題になるのは「スクリーンキーボードが打ちにくい」なのだが、S-Shoinは小さい画面でも打ちやすく、良好な予測変換を行う。私はATOKも買ってあるのだけれど、今のところS-Shoinを使いつつけている。

シャープ製端末はiWnnで、日本語入力に強いという印象はなかったのだが、2015年夏からS-Shoinが投入されたらしい。 これは大変良い。

なお、「Shoin」というのは恐らくシャープのかつてのワープロ「書院」から来ているのだろう。 なんとも懐かしい。 私はシャープ製のケータイ(フィーチャーフォン)を使ったことがないので知らなかったが、「ケータイShoin」なるものもあったそうな。

ちなみに、なぜかベトナム語と中国語のGboardが入っている。

留守電機能搭載

スマートフォンの非常に大きく、明快な機能的後退が端末の留守電機能がなくなったことだ。 キャリア製端末を使うのであれば、キャリアの留守番電話に加えて端末で使えることも多く、逆にMVNOユーザーとしてはどっちもなくて非常に困ることが多い。

私はほとんどの場合電話が出られない状況にあるので、留守番電話がない、というのは電話としての価値を大部分損なっているといっていい。

恐らく、Google的にはSMSがあるから必要ないという考えなのだろうし、実際欧米ではSMSが結構日常的に使われているのだが、 日本ではほとんど使われていないし、実際SMSが来ることはほぼないし、SMSを送ると「使い方がわからない」「受信者負担がある」といった理由で怒られることすらある。

AQUOS R2 Compactには「簡易留守録」という留守番電話機能が搭載されている。 ちなみに、AQUOS PHONE全般に搭載されており、AQUOSケータイにもある機能であるようだ。実際私はAQUOSケータイを持っているが、留守電機能は大変重宝している。 自動音声営業で埋め尽くされることも多いが。

この機能単独で選択理由になるレベルである。

持ちやすいけど、汚れやすい

基本的に端末はもちやすい。 が、どうも静電気強めのようで、ほこりがよくつく。しかも、背面ガラスなので指紋もよくつく。

結局、カバーとスクリーンガラスは必要だろう。 ただ、形状自体が持ちやすい上に小さいので、リング等を使わなくても、PVCカバーだけで十分機能を果たしてくれる。

画面輝度には着目したい

最小輝度の暗さはやや物足りないが、これに関してはZenfone 2のように「最小でも明るすぎて困る」というほどにはなっていない。 真っ暗な中でも目がくらまない程度にはなっている。

そして、最高輝度は素晴らしい。直射日光下でもまばゆく輝く。そもそも画面がかなり見やすいこともあって、画面は良好だと言えるだろう。

ただ、シャープは「液晶だけど有機ELより省電力だぜ」と言っているものの、実際のところ液晶でここまで明るくするとだいぶバッテリーを食いそうだ。

使いやすい省エネスイッチ

画面輝度最低を中心とした省電力モードに入る省エネスイッチは実用的に使いやすい仕様であり、 なおかつどこからでもメニューを引き出してボタン一発であるため非常に使いやすい。

評価は

★5である。

「使いにくい」を強調しておきながら…と感じるかもしれないが、結局のところ必要な機能が全てそろっていて、その機能が支障なくしっかり機能することは何者にも代えがたい。 目的に沿う、という理由で買っているので、それがしっかり果たされればそれだけで結構な満足ができる。

そして、SD710でも、Kirin970でも感じることのできなかった「速さ」が、明らかなストレス軽減につながっている。 機能面は設定やアプリ導入でかなりの部分が改善できるので、あまり深刻な問題ではない。OPPOのように明確なアドバンテージを生むことはできないが、それでもZTE端末や、HAUWEI端末でできる程度であれば何の問題もないと言える。

ハードウェア的な欠点、つまり「汚れやすい」「指紋センサーナビゲーションが使いにくい」が保護ケースや保護ガラスによって解決するため、ハードウェア的な弱点も残らない。

求める機能がしっかり機能し、その上でストレスがない、というのはもうその時点で満点をつけていい。

メイン機として考えれば、私はもうColorOSを知ってしまっているので、「メイン機はOPPOだろう…」という状態だからあまり話にならないが、もしOPPOがないとしたらメイン機でもぜんぜんおかしくない。 この場合、「ブラウジング用」あるいは「Twitter用」もしくは「YouTube用」にサブ機みたいな話になるのだろうか。 全方位強いのだが、「物理的に小さい」ことだけはいかんともしがたい。 ただし、それでも5.2インチ端末であり、「画面が小さい!!」というほどでもない。小さい端末いっぱいに画面というのはかなり強力なようだ。

解決できない問題を挙げるとしたら、充電速度になるだろう。 必要とされる直前に充電する戦略がとれず、出かける時間とバッテリー残量を気にしなければならないのはちょっとしんどい。

その点だけは明確に足をひっぱるのだが、Axon7においては決して快適とは言えない使い心地(特に日本語入力周りと重量、持ちにくさ)だったのに対し、小さく軽く、もちやすく、快適な性能と入力を備えるR2 Compactは、これ単独で持ち歩いくことが既にある。 Axon7時代は「Axonだけを持つ」ということはなかった (この端末は「プライベート電話、仕事ネットワーク」の構成である。メイン端末は逆で「仕事回線、プライベートアプリ」になっている) ので、これは体感的な使い心地を直接に表わしていると言えるだろう。


  1. 充電器の消費電力で本当に50W出る。

  2. 「PD Output 5V/3A, 9V/3A, 12V/3A, 20V/3A」という記載となっており、なぜか15Vに対応していない

カスタムキャストでキャストデータを移行する

アプリとしての出来が悪いままのカスタムキャスト

ドワンゴのVTuber戦略は相当不調らしい。 まぁ、「当然だな」という越えがおおかったりもするのだが、登場当初は非常によく遊ばれ、期待も大きかったカスタムキャストがいまひとつ普及していないのも、その現れなのかもしれない。

カスタムキャストは元はアダルトゲームのカスタムメイドがベースになっている。 あれは、エディット機能自体は優秀なものの、DMM版含め出来がよくないという評判がもっぱらなので、必然なのかもしれない。 ありとあらゆる面でいまひとつであり、そのひとつとして「引き継ぎ機能がない」というのが挙げられていた。

やがて引き継ぎ機能が実装されたのだが、著しい「コレジャナイ感」が漂っている。

ほとんどの人は引き継ぎたいのはキャストデータだと思うのだが、キャストデータは対象外、というか引き継げるデータはほとんどない。 キャストデータを作るのは結構時間もかかるし、再現するのは困難なので、キャストデータが引き継げないとそもそも使い物にならないと思うのだが。

データをコピーすればOK

説明にある通り、キャストデータは端末に保存されている。 保存場所はAndroid/data/jp.customcast.cc2/以下である。つまり、このフォルダ以下をコピーすれば良い。 幸いにも現在データチェックは甘く、キャストデータをピンポイントに上書きしなくても、必要なデータを再ダウンロードする形で通してくれる。

ただ、私が試した限りだとgvfs MTPの制限なのか、このフォルダ以下にコピーすること自体ができなかった。 ただし、ファイルの作成や上書きはできるため、

のようなシェルスクリプト(これはサブフォルダ用)で処理できた。 これ以上深いディレクトリの中身は放置して良いし、cache以下は気にしなくて良い。

Windowsユーザーはどうすればいいか、という話は私が取り扱うべき話ではないから、 このフォルダをコピーすればいいよ、という情報を元にがんばっていただく方向で。

OPPOスマートフォンの「AR測定」がすごい

OPPOスマートフォン(R17 Pro)の先日のアップデートで新たに「AR測量」というアプリが追加された。

これは、カメラを使って距離や角度などを測ることができるアプリだ。

以前一部スマートフォンにレーザールーラーが搭載されていたが、これに代わるもの、というかはるかに強力なものになる。 せっかくのデュアルカメラだし、測量に活用できないかな、と思っていたので、まさに実現した感じである。

使い方としてては対象にカメラでピントを合わせるようにしてポイントすると、照準先のターゲットにアンカーを打ち込む。 これを複数打ち込むことで測定するわけだ。

ここがすごい

最初のアンカーに関してはレーザー測定なのか、離れていると打ち込むことができない。 ところが、ふたつめのアンカーからは結構離れていても打ち込める。

レーザールーラーは便利ではあるのだが、射程が2mほどしかないため、メジャーを当てにくい部屋や家具のサイズを測るのに使えない、という残念なポイントがあった。 ところが、このAR測定はそんなの関係なし、部屋のサイズだって測れちゃう。(ポイントを打ち込むときはレーザーの届く範囲に限られるが、打たなくても計測自体はできる)

また、距離計測でレーザールーラーの場合あくまでスマートフォンからの距離を測るのだが、AR測定の場合三角測量になっていて、カメラを計測対象のポイントに向けるだけでいい。距離の場合、第二ポイントに打ち込む前にポイントとの距離を出してくれる。 「端から端」をはかるとき、スマートフォンを端においてしまうと操作できないので、レーザールーラーは微妙に実用的ではなかったが、これなら非常に使いやすい。

計測できるのは「距離」「長さ」「角度」「面積」。 面積や、他でもカメラを持って移動するような場合は精度にやや不安があるが、だいたい分かれば良い場合は大変重宝する。

ポイントしたあとはその計測マークが画面上に残留する。ここが「AR」なのだろう。 カメラを移動させると、その測定したポイントを結ぶ線が空中に浮かんでいるように見える。 ちなみに、多分測量自体AR技術。

頭いいなぁ。数学の素養の問題なのだろうけど、ちょっとどうやったらこんな測定ができるのかわからない。 OPPOスマートフォンを選ぶ理由がまたひとつ増えてしまった。

フットプリントのおはなし

先日フットプリントの話題になったのだが、いまいちピンとこない人が多いようだったので、 情報技術におけるフットプリントについて解説する。

フットプリントとは

フットプリントは匿名の活動記録である。 それ単独の情報が固有である(ID代わりに利用できる)ものはフィンガープリントというが、フットプリントは単独の情報としてはそれほどの意味はない。 もちろん、統計上の価値はあるのだが、フットプリントという場合には、異なるアクティビティをつなげることを前提としている。

典型的なのはユーザーエージェントとアクセス元IPアドレスである。 IPアドレスは場合によっては固有であることもあるが、一般的には(普通のユーザーは)固有ではない。 よって、これらの情報は特にフィンガープリントとしては機能しない。

ただし、私の場合割と珍しい条件を揃えている。 まず、私のUAはMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.122 Safari/537.36 Vivaldi/2.3.1440.61である。あまり特色がない、と感じるかもしれないが、(X11; Linux x86_64)の記載がある時点でだいぶ絞られる。さらにいえば、UbuntuやFedoraや(Vivaldiの場合どうかはわからないが)ディストリビューション名が入ったりするため、さらに絞られてしまう。

そして、私はIPアドレスも、固有ではないがかなり珍しい。 私の観測範囲においてはこの組み合わせを持つユーザーは他にいない。「観測範囲ではいない=活動範囲ではいない」であるため、逆に私の活動圏においてはこのUAとIPアドレスの組み合わせは私である、ということがわかってしまう。

これは割と珍しい例だ。例えば@NiftyでWindows 10のGoogle Chromeを使っているユーザーなんてたくさんいるだろうし、Softbank mobileのiPhoneユーザーもたくさんいるだろう。 ではこれらは全く特定できないか?というとそんなことはない。

まず、ある瞬間に同じIPアドレスを持つのは、同一のNAT内にあるコンピュータだけである。 ユーザーエージェントは意外と一致しない(ログをソートしても異なるユーザーで全く同一のユーザーエージェントを示すケースはかなり少ない)ので、連続的にアクセスしていた場合、そのユーザーの「特徴」を掴むことで同一人物であることを特定でき、またIPアドレスの変わり際はその「微妙に違うIPアドレスと行動の連続性」によって特定できてしまうので、追跡することができる。

IPアドレスとUA以外にも

  • 通信速度
  • 反応を返すまでの応答時間、ラグ
  • コンテンツ中のロードする内容
  • 滞在時間の傾向
  • 選択するリンクの傾向
  • ページロード中にページを離れる率とタイミング
  • タッチデバイスでの操作か否か
  • 表示領域のドット数とウィンドウのドット数
  • スクロール速度と量
  • スクロールを止める箇所
  • ページをクリックや反転させるクセがあるかどうか
  • ブラウザで有効化されている機能

などなどフットプリントとして機能するものは非常に多く、本気を出せば人物の同定は非常に簡単である。 避けることはできない。

もっとも、現実にはこのようなケースではトラッカーを使うほうがずっと簡単であるため、このような高度な行動分析は行われない。 このような高度な行動分析を必要とするのは、どちらかといえば私のように行動と心理に関する情報を必要としている者だ。

ちなみに、安心してほしい。 私はトラッカーが死ぬほど嫌いなので、私が提供しているサイトにはトラッカーはないし、不要にクッキーを使うようなこともしていない。1 統計的情報としての範囲を越える利用は全くしていない。

横断する恐怖のトラッキング

このようなフットプリントはローカルに持っていて、そこにとどまるのであればそれほど怖いものではない。 だが、横断すると話は全く別である。 横断すればその人がとっている一連の行動がわかる。ずーっとインターネットにおける活動を監視しているのと同じだ。期間が長くなってくれば、次の行動も予測できるようになる。

かなり大きいのは、Tポイントカード、Dポイントカード、楽天カードといったポイントカードの利用と、Suicaなど交通系ICカードの利用である。 これらはかなり利用を避けがたいのだが、ここに残っているフットプリントは結構致命的な内容である。 TポイントやDポイントやSuicaの内容がほいほい第三者に利用されていることについて、人々はもっと強く危機感を持つべきではなかろうか。

私は防衛型のハッカーなので、「まず自分が攻撃することを想定し、次にどのようにすれば防衛できるかを考える」という手順を取る。 これに則って考えれば、情報へのアクセス難易度や行動上の条件によって阻まれない、という前提のもとであれば、その人物が「どこに住み」「どのような生活サイクルで」「どのような手段でどこへ移動し」「どのようなクセを持っていて」「どのような行動を取るか」ということが把握できる。 どこに勤めているか、どのような生活をしているかはもちろんのこと、日用品が足りないのではないか、食料を買いにいかなければならないのではないか、ということも、次にどのタイミングでスマホでどのサイトを開くか…というのも手に取るようにわかるわけだ。 ここまで分かれば煮るなり焼くなりという状態である。ピンポイントにメールを送るも良し、フィッシングサイトで釣り上げるもよし、あるいはエンカウント数分前着程度の滞在時間で人気のないところで待ち伏せるもよし、である。

そんなまさかと思うかもしれないが、諜報機関ではこれくらいやる。 北朝鮮の拉致だって、今ならこのレベルでやるかもしれない。 というか、私で具体的方法を含めぱっと思いつくのがコレなのだから、ガチ勢はもっとやばいと思ったほうがいいだろう。

そして、このような横断してフットプリントを集めるという作業は日常的に行われ、私達は日常的に目にしている。 そう、ターゲティング広告だ。

「目立つフットプリント」は匿名化以上の損失になりうる

個人情報に紐付かないフットプリント の対応として適切なのは「森に入る」であり、なるべく紛れることである。

例えば匿名化ウェブプロキシでアクセスすると、身元が隠蔽されるため安全である、と考えるかもしれないが、実際のところ匿名化プロキシでアクセスしてくる人というのは非常に少ないので、大変に目立つ。 匿名化プロキシの効果でそれが誰であるか完全に特定できなかったとしても、そのようなものを使う人自体が大変少ないので、使っていること自体によってかなり絞り込めてしまう。

そもそもフットプリントから追跡対象を決めるときは「特徴によって決める」のが普通なので、目立つフットプリントはそれだけで目をつけられる可能性が高い。

検閲による効果は、検閲を回避する者にまで及ぶわけである。

特徴的な行動、少数派などは、フットプリントによる追跡からの防衛という観点から言えばなるべく避けたいのだ。

防ぐことの難しさ

正直なところ「祈るしかない」とは言える。

例えばテクノロジーに疎く、ケータイも持っていなくてSuicaも使わない、という人であれば追跡できないかというと、そんなことはないのが現代社会だ。 情報を過剰に収集している上に、あまりにもそれを濫用している。

現代社会においては極めて知悉した上で、細心の注意を払い、非文明的暮らしをすればフットプリントを限定的にできる。 だが、それはそれで「追跡しづらい、謎めいた人物」というフットプリントが浮かび上がってしまい、マークされることになるかもしれない。

このような不躾な追跡は、それが例え私の研究の進展に寄与するとしても、人の平穏な暮らしという観点から到底許されるべきではないと、私は思っている。


  1. WordPressを使っているサイトはWordPressが使っているかもしれない。それには私は関知していない。

論理的思考力 初歩

授業や講座でも人気の論理的思考力のおはなし。最近だいぶアップデートされたので、これをChienomiでも紹介することとする。

論理とは

周辺事情から間接的に事象を確定する(観測する)ことである。

論理は“真”または“偽”で表す。成り立つものが“真”、成り立たないものが“偽”である。 「部分的に成り立つ」ということはない。成り立たないこともあるのであれば成り立つことが証明できていないからだ。 偽であることは「必ずそうでない」ことを証明するのではなく、「必ずしもそうはならない」ことを証明するものである。

よって、物事は圧倒的に偽になる可能性が高く、真であることとは本質的に同一または包括関係であることが多い。 真であるとする証明が正しくないことを証明するためには、わずか一例でも成り立たない例を示せばよい。

論理は因果関係である。「Aであるならば、Bである」というものだ。 AとB(因果)を逆にしたものを「逆」という。 つまり、「BであるならばAである」ということだ。

逆は必ずしも成り立つとは限らない。特に、AがBを包括するとき、AであるときBは十分条件を満たすため真になるが、BはAの一部でしかないためBであってもAでない場合というのが存在することになる。 もし、AとBが同一であれば逆も真となる。

AとBが共に否定関係にあるものを「裏」という。 つまり、「Aでないならば、Bではない」というものだ。

これが成り立つためには、AがBにとっての必要条件である必要がある。 AがなくてもBを満たす方法があれば裏は成り立たない。 そして、「裏が成り立つ」と「AはBにとっての必要条件である」は等しい。

なお、論理的に言う「否定」とは「論理反転」を意味する。だから、「〜ない」を否定すると「〜である」になる。

「逆」と「裏」の両方にあたるものを「対偶」という。 「Bでないとき、Aではない」である。

対偶はあまり使わない。意味としては裏を逆にしたものであり、BがAの必要条件であることを意味する。 裏も対偶も真であるのに逆は偽である、というケースはだいぶ稀だ。 互いが必要条件であるならば、両者は密接な関係にあると考えて良いからだ。 ただし、必須の包括状態にある場合には、逆だけが偽になることもある。

これは高校数学でやるのだが、高校では数学をやらないケースもあるため、知らない人もいるだろう。 私も数学ではやっていない。

余談だが、「逆に言う」「裏を返す」は、まんま論理学的用語であるため、ちゃんと逆ないし裏になっていないと、私としては教養のない人だなぁ、という感想を抱く。

論理の初歩にナンプレを

ナンプレ(ナンバープレース)というパズルがある。

かなりメジャーなもので、やったことのある人も多いだろう。 一時期、Nintendo DSがリリースされたブームになったりもした。

ルールはシンプルだ。9×9の81マスがあり、各マスには1から9の数字が入る。 ただし、制約があり、縦列、横列、及び3×3で区切られた中には重複する数字を入れてはいけない。

ルールは以上だ。

このルールの時点で論理的に解法を求められる。 ちなみにもナンプレの攻略テクニックとしてこれ以外の方法があったりするのだが、ここはあくまで普通に論理的に解くこととする。

空行の候補は1から9の数字である。 これは、ルールによって定義されており、直接的に表現されている。

そして、ルールから「縦列、横列、または区画において出現している数字は除外できる」ということが導ける。 これら出現している数字をあてはめた場合、ルールに反することになるからだ。

ごく簡単なナンプレ問題では、このように除外することで候補がひとつしか残らないマスが出現する。 マスには数字を入れなければならないため、候補がひとつになった時点でそのマスの値は確定する。 このように順次確定することでマスを埋めることができる。

そのマスだけを見たとき、直接定義されているのは「1から9の数字が入る」ということだけだ。 だが、周辺事情によってそのマスの値は確定することができる。 それが確定するのは、そのマスの値が残された候補でないとき、そのパズルのマスを埋めることができない、という命題が真になるからだ。 よって、そのマスは最後に残された候補の値にならざるを得ない。

これは、「周辺事情によって他の可能性が消去される例」である。

もう少し難しいナンプレ問題だと、複数の候補が残る。 この場合、そのマスに値を入れるとその影響によって候補が残らないマスというのが発生する。

だが、そのマスの正しい値というのはわからない。候補1になるマスは存在しない状態だ。 しかし、いずれかの候補値を仮定すると、結果的に他のマスの値が確定することになる。

このとき、マスが「答を入れることができない」状態になることがある。残される候補が0になるのだ。 これはつまり、仮定した値が間違いであることがわかる。よって、仮定したマスの候補から除外できる。

これは、「Aの値がXであるとき、ゲームBはクリアできなくなる」が真になるため、「Aの値はXではない」が成立するのである。

このように問題を一旦仮定することで、成立しなければ除外するということができる。 これもまた、「周辺事情によって偽であること良いが明らかになる例」である。 先に述べたように「AであるときBではない」の裏「AでないときBである」が成立するわけではないことに注意してほしい。 例え仮定した結果成立したとしても、それによって真であることが証明されるわけではないのだ。

実際、ナンプレでも複数の値によって仮定しても確定する値が矛盾をきたさないこともある。 実のところ、ナンプレの場合は基本的には最終的には埋められる値は1つしかない。もっとも、数多い空きマスの全マスに対して仮定を適用するのは、人間にはちょっと無理だが。 だが、現実にはそうでない場合も少なくない。想定すべき全体像がわかっているとは限らないからである。 そのため、例え直ちに矛盾をきたさないことが、その仮定が正しいことを証明するわけではない―ただし、正しいのではないか、という推測は成り立つ。

パズルと論理

ナンプレに限らず、パズルではこのような論理性を持った論理パズルが多い。 クロスワードのような潜在的に特殊な論理性を要求するものを割と珍しい。もっとも、ビデオゲーム用のパズルは全く別だが。

このような最も基本的な論理の適用方法は消去法である。 まず現在の状態から採りうる候補を列挙し、状態の変化に合わせて消去していく。 回りくどい方法だが、「こうだからきっとこうだ」などと推測するよりはずっと正確だ。

ボードゲームも、総当りすることができるのであれば、このような論理ゲームとして成立する。 実際、マルバツゲーム程度であれば論理ゲームとして成り立つ。 ただし、実際はそれが不可能であるため、別の方法をとることになる。

「らしさ」と論理

ナンプレにおいては明確に制限された規則によって論理を求めることができた。 だが、実際にはそのような状況を設定することができないことのほうが多い。そこで、逆に規則のほうを設定して、「論理が成立する条件」を求めるという手法もある。

規則は前提条件である。命題自体には含まれていなくても、その命題が設定される時点で常に適用されるものになる。 例えば、ナンプレであれば、「ナンプレのルールにおいて」という規則がある。そして、ナンプレのルールという形で様々な条件が設定されている。

規則がまるで導入されていない状態で成り立つ論理というのは「真理」だが、これはかなり限定的であり役に立たない。 (さらにいえば、真理ですらも最低限、「この宇宙における法則において」という規則が導入されている)。 そこで、有益な論理を導出するために必要な規則を探すのである。

やってみればわかるのだが、規則が限定的になればなるほど論理を成立させるのはたやすくなる。 だが、実際には「規則は適切に限定されていなければならない」のである。これは、必要以上に限定的な規則では有益ではない、ということだ。 ちなみに、導入した規則の存在を忘れてより一般性がある論理であるかのように言うのは愚か者である。

基本的には成り立たない論理というのは、それが当てはまる場合と当てはまらない場合の両方が存在するわけだが、規則のほうを限定していけばいずれ成り立つ。だが、その場合、「命題が何かを証明しているわけではなく、規則によって結果が必然的である」ということもあり、このような場合は有益ではない。

有益な論理というのは、「規則、命題ともに適切に限定されており、同じことを指してより限定的である以外に成り立たせる方法がない」というものである。 そして、論理の追求とは発見している論理や規則を、これに限りなく近づけることである。

論理では確定的事象を扱うため、確率の話は基本的にはしない。 だが、観測においては「確からしさ」というものを取り扱う。これは、確率の話である。

勘違いされがちだが、確率というのは「割合」とは違う。観測された事象のうちN%が該当するから事象の成立する確率はN%である…というほど単純な話ではないのだ。 (もちろん、この物言いがやや統計学に喧嘩を売るものであることはわかっているが、確率が統計だけのものだと思ってもらっては困る)

それが真である確率を強調していうのに、語義は同じだが「蓋然性」という言葉を使うことが多い。 「真である確率」とは基本的には「真にならざるを得ない条件」の蓄積である。

例えば、「地球には雨が降る」という事象の蓋然性について考えるとき、まず地球圏に(十分な量の)水分が存在することに着目する。 そして、地球圏の温度が均一たり得ないことを踏まえて考えると、その水分は偏りを持って移動すると考えられる。

この時点で「地球には雨が降る」を偽たらしめるのは、水分が大気中に混ざったまま浮遊していられる量である場合や、地球上に雨となりうる温度条件が存在しない場合などだ。 気象の話を本格的にし始めると多くの読者を置き去りにしてしまうのでイメージの話にとどめておくが、これら「偽の可能性」はいずれも否定しうる。

結果として、「地球上には雨が降る条件が揃っている」「地球上で雨が降らない条件は満たすことができない」ことから「地球には雨が降る」を真とみなすことができる。

しかし、物事によっては「これ以上偽たらしめる条件がない」ことを確定できない場合がある。 あるいは、偽たらしめる命題が偽であることを証明できない場合もある。 これらの不確定部分を「確かであること」から差し引いたのが、事象の確からしさ、ということになる。

なお、この節は非常に短絡的に述べているのはわかっているし、それはブログとして書けるものの制約によるものなので、論理学・天文学・量子力学・統計学・気象学できる系諸兄にはお見逃しいただきたい。

予測可能性

事象は連続する、という自然な感覚がある。 これは、自然においてそうなっているからなのだが、感覚的にはそれを拡張して捉えようとする。

これは理系文系の違いであると言われることもあるが、基本的には法則性・規則性が強いほうが予見できる、というのは事実だ。 というよりも、法則性・規則性がないものは予見できない。

このようなものを我々が強く意識するのは命名規則においてだ。 例えばメソッド名にaddElement, delElement, editElementがあったとする。 この状態でaddGroupが登場すれば、きっとdelGroupeditGroupがあるに違いないと考える。 もちろんそうであるべきで、いきなりgroupDelchangeGroupValueなんてメソッドを導入すべきではない。

似たような話だと、Unix系ユーザーアカウント操作コマンドがある。 useradd, userdel, usermodは一連のコマンドなのだが、これとは別にadduser, deluserというコマンドもある。 これらは全く別の体系にあるコマンドであり、useraddusermodとはコマンド形式からして違う。

ところが、これだけ提示されるとmoduserがある、と予見してしまう。 実際にはなく、vipwを使うのが基本であった。ところが、いくつかのLinuxディストリビューションは、adduser及びdeluserを採用した上で、usermodだけを導入する、ということをしてしまった。これだと、「変更コマンドだけ語順が逆、しかも書き方も全く違う」という事態であり、大変な混乱をもたらす。実際、これによって混乱しになっていた。ている人は多かったし、LPICでも結構な間違いポイントになっていた。

コマンド関係で言うと、serviceコマンドは引数が「サービス アクション」の順なのだが、systemctlコマンドは「アクション ユニット」の順で、このあたりも予見可能性を低下させている。

このような予見は非常に強く働く。あるワードが登場した時点で、例え法則性を提示されなくても、法則性があるのではないかと考えてそれを探す、という行動は極めてよく見られるし、検索語句としてもよく現れる。 このことから、「人は非常に強く物事に法則性を見出そうとするし、予見可能性が低いものを非常に嫌う」ことがわかる。

もうひとつよくある話だと、+=演算子の話がある。

A = A + Bを表すのにA += Bと書けるのだが、四則演算は減算(-), 乗算(*), 除算(/)もあるから、-=, *=, /=があると考えるのが自然であり、多くの人はそのように予見する。 そして、そうなっている言語も多い。

だが、実はそうなっていない言語というのも結構ある。 例えばzshは+=しかない。

この理由は、そもそもzshは四則演算がArithmetic evalutionの中でしか行われず、裸で演算子を書くことができないからだ。 そして、+=は配列に対するpostpendとしてのみ書くことができ、-=は文意が不明瞭になるため実装されていない。 実際、Arithmetic evalutionを使って(( A += 10 ))のような書くことはできる。

+=を四則演算以外に適用できるようにするケースも多い。少なくとも文字列の追加には使えることが多いし、配列の追加にも使えることが多い。 Rubyでは+メソッドが定義されてさえいれば、A += BA = A + Bとして評価させることができる。(ただし、例によってAは一度しか評価されないので同一ではない)

そのため、+=は汎用的に使える、と予見しがちである。しかし、Perlでは+=は数値演算以外に使うことができない。 そもそもPerlでは+演算子事態が数値演算に限定されており、文字列連結は.演算子を使う。 Perlは最近の大抵の言語よりも古い言語なので、Perlに責任はないのだが、今は一般に+=を一般化して使うことができるようになっているため、Perlよりも新しい言語から学び始めた人はPerlの挙動に予見可能性が低いと腹を立てることになる。

さらにいえば、+=は非常にメジャーな演算子であるため、JavaScriptに+=演算子がないことを腹立たしく思う場合もある―私はとても思うのだが、検索してもあまりそのような意見は見ないので、ひょっとしたらマイナーな意見なのかもしれない。

この予見可能性は基本的に「その人の中で成立しているように感じている論理」に基づいている。 法則性というのは観測の限りであり、別にそうなるものだという証明がなされているわけではない。だが、見出した法則性というのはその人の中では成立している論理と等しく、これに反するものは非常に強く裏切られたように感じられる。

設計におけるユーザビリティとしては予見可能性を高く保つことは何よりも優先される。 これは、APIであろうが、UIであろうが、挙動であろうが全てに言える。 予見可能性の低いUXというのは、例えばゲームで爽快感の低い操作を強いられて、ようやく動きが出てきて操作に追従するようになってきたと感じた途端に長いロードが入る、というのを繰り返すような不快さを提供することになるのだ。

そして、予見可能性を高めるということは、その枠組みの中で成立する論理を提供する、ということでもある。 例えばvipwは古くからあるコマンドだが、これは/etc/passwdファイルに変更を加える。これはユーザー情報のファイルであり、であれば/etc/groupを編集するvigrがあるはずだ…と予見する。特に、後に/etc/sudoersを編集するvisudoが追加されたことから、vi$targetという法則性を見出すことができるようになったという点も大きい。 vigrはかなり長いこと存在しなかったが、やがて追加された。これは、「ユーザーアカウントに関する編集を行うコマンドはvi$targetである」という論理性を創造した、ということになる。

自分でコントロールできる範囲であればより積極的にそうすべきである。 例えば、parmas[user]パラメータがparams[user][name]のように連想配列として提供されるのであれば、params[group]のようなパラメータが例え項目がひとつしかないとしても、params[group]によって値を返すのではなく、params[group][name]のようにすべきであるる なぜならば、そのようにすることでparams[$type][$term]が予測できるようになるからだ。 良い名前は名前だけでそれが何に属するどのようなものかを推理する余地を与える。

論理的思考

「世に論理的思考と呼ばれているものは論理とは関係ない」とよく言われるのだが、ここではちゃんと論理に基づく思考を指して論理的思考としたいと思う。

論理的思考とは「AのときBたりうるか」に基づいて判断することである、と言ってよかろうと思う。 この思考が究極まで至ることができるならば、全てを知ることができるのだが、残念ながら観測を含めそうはならない。 そして、基本的には(思考停止しない限り)時間があれば論理的思考量は増やすことができるので、時間に対してこの検討がどれだけできるか、というのが論理的思考力、ということになる。

論理的思考において、既知の箇所はスキップすることができる(もし、既知であるという判断が間違っていたとしてもスキップしてしまうのだが)ため、論理的思考力によって論理的思考量が一律に決まるわけではない。 例えば将棋やチェスにおいては、必ずしも論理的思考力に優れる者が勝利するわけではなく、定石などを知っていればある程度確定した状態からスタートできるので、大きなアドバンテージを築くことができる。

また、将棋やチェスなどにおいては基本的に時間制限があり、考えうることを全て考えて指すことができるわけでもない。 このため、単純な論理的思考力によって決着がつくわけでもなく、思考経路によって大幅に左右される。 いい経路を選択すれば論理的思考量に対して得られる結果がよりよくなる。だから、現実にはよい経路を選択できる勘のようなものも非常に重要になってくる。

論理的思考において重要なのは「期待しない」ことである。 人はなにかに期待すると、そうではない結果を否定したい、というバイアスが働く。だから、論理を歪めたがる。 「情報は情報であり、事実は事実であり、論理は論理である」ということを見失わないことが大切だ。論理に血が通う必要などない。そんなものは、言動において通わせれば良いのであって、論理を歪めるために使うものではない。

また、論理の正しさを肯定しないというのは、自分の都合の良いように事実を肯定歪めようとすることである、ということも覚えておいたほうがいいだろう。

Chienomiは結論を提供しない

Chienomiに限らず、私が書く文章において結論は提供しない、というのは私の信条である。

なぜならば、人が思考する上で有益なのは情報であって結論ではない。 情報さえあれば、人はその論理的思考力と価値観によって結論を出すこともできる。

結論が声高な文章は不快なノイズである。 もちろん、経験に導かれる結論はあってもよいのだが、そこに一般性があるとするのはノイズ以上のなにかにはなりえないだろう。 これは、当人がいかなる結論を得たか、ということとは異なる。それは単なる情報であり、意味のあるものだからだ。

そして、私の書く文章は、何らかの特定の結論に達することを期待しているわけでもない。 なぜならば、私自身が特定の結論を持っているわけではなく、あくまでその時々の判断と判断材料にあるに過ぎないから、「この文章はこういうことを結論としているのだ」と感じ取ってしまっているのであれば、それは全くあなたの気のせいである。それは、もしかしたら現代教育の被害なのかもしれないが。

文面からしか文意を導けないのは、論理的思考力の欠如だろう。 私は何かを書くときには論理的完全性にはかなり気を使っているつもりなので、あなたの論理的思考力を活用すれば、より多くの情報が得られるはずだ。 もっとも、それが有益かどうかについては保証できるものではないが。

Hy Garden Leafs (はるかシステム) システムとストレージの構成 2019

さすがに無理をさせすぎたのだろうか。 マスター系ディスクに故障が相次ぎ、縮退運用となった。

従来であれば縮退運用中はなにもできないところであるが、今回は40万円近く出費しなければ置き換えられないこともあり、長期化は避けられない。 そこで、縮退運用について柔軟性をもたせた。これは以前のディスク故障からP720導入で行ったローカルシステムとグローバルストレージの併用を強化したもので、これが功を奏した形である。

ここまでの構成変化の歴史を振り返ろう。 なお、一時期運用されたがunstableで廃止されたものは除外する。

また、セキュリティ上の理由からマウントポイント等のファイル名はフェイクはフェイクである。

構成変化の歴史

最初期

SSD 64GB + HDD 500GB*4(LUKS, LVM Mirrored, XFS)であった。

SSDはルートファイルシステムなわけだが、として64GBと少ないため余裕が全くなかった。 そこで、500*4 (LVM mirror 1TB)のディスクを/homeにマウントする方式をとった。

システムとディスクは別々にLUKSで暗号化されており、データの集約はこのときから始まっていた。

問題は、データに関しては冗長性が保たれているためディスク故障にはある程度強いのだが、それでもこのストレージがマウントできないとほぼ使うことができないということだ。初期は/varもHDDにあったのだが、問題が多かったため廃止された。

まだこの時はシンプルな構成だった。

このときから3TBの初期に至るまでは、「LUKSが突然解除できなくなる」というトラブルに見舞われ、かなりのデータを失った。

3TBの導入

SSD 128GB + HDD 3TB*8。

単純に容量を拡大したようだが、大きな変更としてLVMをやめ、Btrfsに変更した。 実際はこの構成になってからかなり長い間従来と同じ運用をしていたのだが、LVMだとディスクは偏って使われることから分散して使ってくれるBtrfsに変更した。 ミラーレッグの追加がBtrfsのほうが簡単という理由もあった…のだが、実際はBtrfsのミラーレッグ追加はうまくいかないことが多く、理屈通りにはいかなかった。

また、LUKSで突然解除できなくなるトラブルを踏まえて、LUKSからdm-crypt plain(keyfile)に変更した。

従来は/homeにマウントする方式だったが、このときから~/.localにサブボリュームをマウントするように変更した。 この名前だけはフェイクではなく、~/.localというディレクトリがシステム的に使われるようになったときに困ってしまった。

定期snapshotもこのときから始まった。

2系統へ発展

( SSD 128GB + HDD 3TB * 8 ) + (HDD 500GB + HDD 3TB * 4)

Btrfs mirroredなマスター系に加え、Btrfs singleのスレーブ系が追加された。 この時期にはもっと台数の多い構成で様々なクラスタストレージを試したのだが、結局は内蔵しておくのが一番使いやすいという結論に達した。 そのため、かなり無茶な方法でケース内に、多いときは13台ものディスクを搭載していた。

この時期に様々な理由で内蔵できない時期があり、その場合SSHFSを使っていたのだが、低速であること、変なタイミングでI/Oが詰まること、rootがファイルを扱えないことなどから「いまいちである」という結論に達している。 また、ネットワーク不調などにより暗に切断されてしまうとファイルにアクセスしようとしたプロセスが固まるという問題もある。

スレーブ系統に対してはBtrfs sendを使ってデータを転送していたのだが、Btrfs send/receiveが途中で固まってしまうという問題に遭遇し、途中からrsyncによる運用に切り替えていた。 結局、これは「ATAエラーが出るとBtrfsはファイルシステムをreadonlyにする」という挙動に起因し、ディスク不調が原因だったのだが、Btrfsがディスク不調に非常に弱く、かつ適切なレポートをしないという問題は現在に至るまで解決されていない。Btrfsが変な挙動を示したらBtrfsの言うことではなくカーネルログを確認するというのが基本的手法と化している。

同期手法はクラスタファイルシステムのミラー機能なども試したのだが、最も「シャットダウンしやすく、家庭が使うには柔軟な方法」は任意のタイミングで転送を行うことだった。

マウントポイントは~/globalに変更された。

NAS導入

( SSD 256GB + HDD 3TB * N1 + HDD 3TB * N2…) : (x + HDD 4TB * N1 + HDD 4TB * N2…)

ホスト数1では対応しきれなくなったことから、複数ホストでストレージを構成することになった。 これに伴って、従来は中核ホストが全ブロックデバイスをまとめてBtrfsにしていたのだが、この構成となってから各ストレージターゲットは自身で「暗号化され、冗長化されたiSCSターゲットを提供する」という方式に変更された。暗号化処理がホストに分散されるようになったため、少し軽くなった。

また、基本的にはストレージをRAID5で提供するということにしたので、容量が稼ぎやすくもなった。非常に大きくなったディスクをカバーするため、ディスク単位以外にユニット単位での置き換えも可能になった。これは、イニシエータホストから見れば1ユニット(ホスト)で1台のディスクに見えるからだ。

一方、Btrfs RAIDはmeta mirror, data singleに変更した。これは、data mirrorであっても復元があまり現実味がないという事実を踏まえてのことだ。 実際に最もうまくいったケースですら、btrfs balanceの最中にディスクが故障して失敗したし、btrfs balanceは非常に時間がかかる。 もちろん、scrubによる修復も効かなくなるのだが、scrubで修復するようなケースで問題が解消したことがないので、素直に下層のRAIDに任せたほうがうまくいくという結論に達したのだ。

つまり、

  • ターゲットは冗長性とセキュリティ(ディスクの暗号化)を保証する
  • イニシエータはネットワーク経由で提供されるブロックデバイス(普通はiSCSI。AOEだと問題が出るケースがある)をBtrfsデバイスとしてmeta mirror. data singleで編成する

というルールである。

SSDが256GBになったこともあり、ある程度データをSSDに置くことができるようになった。 そこで、新たに~/intを追加し、ここに運用に必要なデータを置くように変更した。

この変更はかなり大きい。従来の方式だとグローバルストレージがマウントできない状態だと何もできない。 そもそも、XDGディレクトリがシンボリックリンクであり、そのポイント先がグローバルストレージにある場合、マウントしない状態でログインするとXDGユーザーディレクトリの設定自体がリセットされてしまう。 また、Clutter launcher(Cinnamonのアプレットとして標準のアイコンランチャ)は.desktopファイル自体が有効でない場合はlauncherの設定自体を破棄してしまうし、.desktopファイルで指定されたコマンドが実行できない場合はランチャから一時的に除外する。

このことから、~/intには日常的に作業で利用するXDG DOCUMENTSディレクトリ、~/binディレクトリ、自分のリポジトリ(~/devel)、フォント(~/.fonts)をはじめとするリソースファイル、ブラウザプロファイル1、メール(~/Mail)などが含まれている。

つまり、~/intがあることによってログインに支障が出たり、基本的な作業すらできなくなるという問題が解消され、ほとんどのデータにはアクセスできないが最低限ログインして作業はできる状態が保たれるようになった。

実はこのことはかなり大きく、グローバルストレージになんらかの問題が発生し、データにアクセスできない状況が発生するのは全く珍しいことではなかった。その間本当に「なにもできない」状態になっていたのだが、これを解消したのである。

果たしてその状況は現実に訪れた。複数ディスク故障により縮退運用に至り、これが長期化する見通しとなったが、もしこの作業をしていなかったらまるで仕事にならない状態が継続していたことになる。

Btrfs RAID5について

結論から言えば使い物にならない。

現状、Btrfs RAID5はbtrfs device replaceがうまくいく保証がない。btrfs device removeに関してはほぼうまくいかない。 完全にexperimentalである。

では気休め程度に使えるかというと、そんなことは全く無くて、Godavariマシン(A10-7870K)ではCPUが100%に張り付き、極めて不安定なI/Oを見せる。 連続で転送していると調子がいいときは2時間で200GB程度を転送できるが、調子が悪いときは17時間で20GBしか転送できない。 これは 書き込みだけでなく、読み込みでも発生する

ダメだ、ダメだと言っているばかりで誰も実用しないので実態がわからないから勇者になってみたのだが、まぁ、ひどい。

AOEとBtrfsについて

詳細はよくわからないのだが、まずAOEでmkfs.btrfsしたBtrfsボリュームはローカルにはマウントできないし、逆にローカルでmkfs.btrfsしたBtrfsボリュームはAOE経由ではマウントできない。

だけならいいのだが、マシンに複数あるブロックデバイスをAOEデバイスとして登録し、これをそれぞれAOEデバイスにした場合、そのBtrfsは再起動後マウント不能になる。


  1. 私は自作の、ブラウザプロファイルを選択した状態で起動できるプログラムを使用しているため、多数のブラウザプロファイルがある。

認証と権限の根本的な考え方

最近、法人設立における印鑑登録を必須でなくす法案がはんこ業界の反対によって頓挫したのだが、その際に

欧米のサイン制度と違い、代理決済できるという印章の特長が、迅速な意思決定や決裁に繋がり、戦後の日本の急速な発展にも寄与してきたという自負もあります。

と声明を出し、失笑を買った。

根本的に、印鑑が証明として効力を持つのは、「同一の印鑑は本人しか持っていないはずだから、その印鑑を持っているのは本人である」という前提に基づく。 つまり、「本人以外がはんこを押せる」という状態は「hackされた状態」なわけである。

ところが、業界的にそのhackを認めてしまったことで、逆に「印鑑は本人の意思の証明にはならない」ということを主張するという本末転倒な状態である。

予め言っておくが、私は印鑑は 嫌いではない 。もちろん、印鑑文化にまつわる無意味な儀礼的要素や形式などは 唾棄するほど嫌い だが、印鑑自体はそれなりに好きで、私が使っている印鑑はかなり凝ったものである。会社設立のときも私の強い推しによって特殊な印鑑を制作した。

また、この話はセキュリティ的な認証と権限の話であり、 はんこの話ではない

認証

はんこやサインがどのような意味を持っているかということを考えてみれば、それは「以上の行為が本人であることを証す」ものである。 それは契約であったり、取引であったりといったことだが、このうちの「何者が」というのを担っている。 日本式の「自著+印鑑」というのはかなり無意味に思えるが、まぁ単純に多重化されている(どちらも単独では信頼できないとみなしている)と考えられる。

当たり前だが、認証時に他者を騙ることは許されないし、それが許されてしまってはそもそも認証としての機能を成していないということになる。

代理決裁が必要なのであれば、決裁権を他の者にも付与すれば良い。 Mimir Yokohamaではサポートサービスが福利厚生として利用できるようになっており、このとき決裁者を決めることができるが、 Any ofだけでなく、Orderedも可能になっている。つまり、上位から決裁可能な状態になければ次のものに決裁権を与える方式である。

他者を騙ることが許される認証というのはないのと同じである。

私としては、はんこもサインも「認証」としての機能は極めて脆弱であり、機能しないと考えている。

まず、照合されない、というのが大きい。 印影照合システムがあるのは知っているが、どれだけ導入されていて、どれだけ実際に使われているというのか。 ほとんどの場合、単に「押されている」だけで通過してしまう。

さらにいえば、最近の印鑑は基本的に機械的なフォントなので、実物に触れることさえできれば比較的簡単に模造できる。 もしかしたら陰影照合システムはそれを判別するのかもしれないが、欠けたりしても結構平気なので、それを考えると工業レベルの差は吸収されてしまうのではないだろうか。

署名はもっといい加減で、クレジットカードの署名なんて、私はペン次第でまるで形が変わってしまう。 私はクレジットカードに楷書ではなく、いわゆる「サイン」を使っているのだけど、「何語を操る人物にも模倣しにくい」という点を意識した特殊なサインを使っている。これは、通常の「サイン」に使っているものとも異なる。異なる理由はセキュリティ的な意識があることがひとつ、そしてクレジットカード裏の署名欄が横長であるのがひとつ。 だが、ペン次第で線の交差位置すら変わってしまうので、サインとしては認証できないことがかなり多いと思うのだけど、これで困ったことは一度もない。

いずれもどちらかといえば、裁判にまでなったときに「本人によるものかどうか」を焦点にして真贋が争われるものだと思うのだけど、この時点で「認証」ではできていない。「鑑定」できるに過ぎない。

そして、「本人でない者が勝手に押した印鑑に効力があるか」は法的に不明なのである。 まぁ、この声明の直後に役人が勝手に100度に渡り無断で決裁印を押したとして咎められたのは笑い話でもあったが。

共有される認証という愚

共有される認証ということでいえは「グループパスワード」というものがある。 Unixシステムにも導入されているが、これが有効になっていることはまずない。

その理由は、「共有される秘密は必ず漏洩する」ということからである。

認証の要件は「当人だけが持ちうるものである」ことなのだが、共有されている秘密というのは帰属が曖昧になるため、他に誰も知りえない状態にはなりえない。 暗号としては、「他の人に触れるチャンスのあった秘密」というのは「無効な秘密」とみなす。

グループパスワードをかけるのではなく、個別に認証される個々のアカウントに対するパスワードをグループに所属させるべきである。

この意味では、SSH鍵をマシン外に持ち出してしまうのもアウトである。 Inflatonでは異なるホストまたは異なるユーザーで鍵を使いまわしたことが発覚すると、アカウント停止を含む処置をとる場合があり、極めて厳しい処置をとることになっている。 そうする理由は、機密度の高い情報が取り扱われる非公開のサーバーへのアクセスを外部に晒すことは、他者の秘密情報にアクセスする踏み台を提供するのと同義であるためだ。

ちなみに、Mimir YokohamaでもInflatonでも、同一鍵の異なるアカウントへの使い回しも警告することにしている。

この意味ではホスト間で共有されるGnuPG鍵というのは非常に問題がある気がする。 だから私はOpenSSH鍵は場合によっては暗号化しないが(それでも少なくとも暗号化ファイルシステムもしくは暗号化ブロックデバイス上にはあるが)、GnuPG鍵は必ず暗号化するようにしている。そして、GnuPG鍵の暗号という秘密を漏洩することはない。

だから、決裁権を持つ人が複数いるのであれば複数人の有効な承認を用意すべきで、少なくとも共有されるべきではない。 共有したら、もはや認証としての価値はない。

有効性

認証要素の有効性、というのは簡単に見えて実は非常に難しい。

前述のように、印鑑や署名には認証要素として不十分である。 そもそも、複製が可能ではいけないのだ。本人しか知りえない秘密でなくてはならない。

その意味では頭の中にだけあるパスワードというのは非常に強い。が、実はこれも「本人しか知りえない秘密」かと言うと微妙だったりする。 典型的にはメモを残してしまえば終わりだし、ショルダーハッキングという方法もある。 私は外に持ち出す端末は他と共有されていないパスフレーズを使っているし、誰かの前で繰り返し使うもの(例えばクライアントが使っているサーバーのOpenSSH鍵のパスフレーズ)はその人に固有のものにしている。 実際、私は過去には「彼女によるショルダーハッキング」を食らったことがある。もちろん、そのときも十分に複雑で使い回されないパスフレーズによって防衛に成功したが。

だから実は複雑なパスフレーズを使い回すという方法はあまりよくない。 可能であれば「知りうる手段によって知りうる内容で攻略できない方法」である必要がある。 例えば、生体認証+PINまたはパスフレーズのようにだ。

この意味では、Windowsの「PINのほうが安全」という理屈はわからないではない。 使い回される可能性のあるパスフレーズを人前で打たせるよりは、PINを使ったほうが、「パスフレーズを使った覚えられてオンラインサービスに不正ログインされる」というコンボを防ぐことができる。 しかし、これに関してはそもそもパスフレーズを使い回すようなことを避けるべきで、正直PINのほうがショルダーハッキングによる攻略性は向上する。実際に私にもPINを攻略した経験はある。

私のラップトップの場合は前述のような複雑なパスフレーズ認証に加えて、LUKSによる暗号化を伴っている。 確実とは言えないが、シャットダウンしてしまえばLUKSパスフレーズを外で打つことは基本的にないので、アンロック不可能な状態にできる。 もっとも、これに関してはログインパスフレーズ変更ほどLUKSパスフレーズ変更は容易ではないので、LUKSパスフレーズの取り扱いに細心の注意を払う必要があるが。

同様に、スマートフォンの生体認証というのは脆弱な認証である。 確かに「本人しか持ちえない情報」ではあるのだが、「複製可能」であり、しかも「不正利用可能な」生体情報なので、ロングPINやパスフレーズよりもはるかに脆弱である。もちろん、4桁PINなんかよりはマシだが。

だが、これも考え方次第で、普段生体認証を使っているとパスフレーズを打つ機会が減り、ショルダーハッキングが難しくなる。 Androidスマートフォンは再起動すると生体認証が無効になるので、端末から離れるときや、端末を奪われそうなときなどは再起動すれば防衛することができる。

安全性では生体認証と秘密を用いた複要素認証を行うことが望ましいが、秘匿性、「秘密を秘密たらしめるもの」という観点からいえばそれは最善ではない。

認証を追求するコンピュータ技術

私が知る限り最も合理的で適切な認証と権限を持っているのはSSHだと思う。 もちろん、Unixシステムの認証と権限の設定が十分に堅固であることを前提としてではあるが。 あまり知られていないが、OpenSSHはPKI鍵の利用も可能である。

鍵の共有という問題はあるが、PGPも大変に強力である。 もちろん、隙なしというわけではないことは知っているが、基本的には非対称暗号というのは非常に強力なものであり、「秘密鍵が強固な対称暗号によって暗号化された非対称暗号」はほとんど本人以外は認証できないだろう。

考えられる方法としては、コンピュータと本人を奪った上で、尋問して対称暗号鍵を聞き出すことだが、そこまですれば大概の認証は無効化できるだろう。 これに加えて静脈認証のような強めの生体認証を組み合わせた多要素認証にすれば完璧なのだが、残念ながらそこまで強力な多要素認証を現実的に利用可能なシステムというものがない。

翻って現実では、「はんこを押すだけ」「サインするだけ」「物を持っていればよし」といった非常に雑な認証が行われており、実際のところ本人かどうかなどというのは全く認証できていない。 クレジットカードですら、その認証は極めて脆弱である。

これらの認証を支えているのは、運用であるが、実際のところ私は荷物をかすめ取られたり、勝手に契約されたり解約されたり…とかいろいろ大変な目にあっている。つまり、十分に運用でカバーできていない。 根本的に「本人であることを証明する」ということが社会的に非常に軽視されているのだ。

では、なぜコンピュータ上ではそこまで厳密な認証技術が発達しているのか…というと、real worldと比べて「詐称するのが簡単だから」である。 6文字英数字だの8文字英数字だのといった脆弱そのもののパスワードを採用しているところはreal world同様認証に対する意識が甘いのだと思うが、その程度のものを突破することは全く難しくなく、効力はない。

現実にはPGPは非常に強力で便利である。 PGPの話をすると大抵は暗号化の話になってしまうのだが、現実にはほとんどの場合署名として使用する。つまり、それを書いたのが本人であるということを証明するのが主な用途なわけだ。

実はその気になればPGPはメールのような限られたメディアでのみ利用できるわけでなく、例えば掲示板の書き込みなどでも利用できる。 当たり前に日常的に使いたいのだが、徳丸さんですら「今までに使ったのは1, 2度」というのが現実らしい。 ちなみに、私はメーリングリストなどでつけられる署名と、私が使うように迫った場合を除くと一度もない。 そんなものだ。

ちなみに、本気で本人認証するのであれば、マイナンバーカードには2kb長のRSA鍵が入っているため、これを使えばよいのだけれど、これは必要以上に情報を結びつけてしまうので、好ましいとは思わない。

本人認証というのは基本的にその人がある条件を満たす人と同一人物であることを認証できれば良いのであり、この定義が全て集約されなければならないわけではない。 これは、「しなければいけない」の話であって、情報がほしいかどうかは別の話だ。

例えば企業の決裁であれば、その人が決裁権を持つ人物と同一の人物であることが検証できれば良いのであり、それ以上にその人が何者であるかを知る必要は はない。

これはハンドルネームも同じ話で、「本名至上主義」は根本的に認証というものを理解していない。 ハンドルネームを「偽名」として扱うのも間違っている。ハンドルネームは「公開するための名前」であり、偽名や匿名(自身が何者であるかを隠す行為)とは同じではない。偽名ハンドルネームや匿名ハンドルネームというものが別に存在するのだ。 これは、例えば俳優の名前が芸名であってもそれが誰なのかわからなくなるわけではないのと等しい。

実際、私はもう何年もこの名前(本名)でhacker活動をしているが、別にこれが本名でなかったときに何者であるか不明だったということもない。 また、私が文筆家としてなんという名前で、声優として何という名前かということは知らない人が多いと思うが、それをつなげる必要があることは稀だろうからそれで困るということもないだろう。

本質的に認証というのはその人がある一定の条件を満たすことを証明する行為である。 その意味ではパスワード認証が通ることは認証側からすれば「本人であることを証明している」のではなく、「パスワードを知っていることを証明している」のであり、「パスワードを知っている時点で正当な利用権限を持っているとみなしている」のである。 はんこも同様に、「このはんこが押せる時点で権限を持っているとみなす」わけだが、それが適切かどうかは、また別の話である。

不安定なホスト(非固定IPアドレス, 非常時稼働)をサーバーにする

需要があるらしいので、この話。

不安定なホスト(非固定IPアドレス―浮動IPアドレス, ステートフルIPアドレス, あるいは間違っているけれど可変IPアドレス― または 非常時稼働システム)をサーバーにする、というテーマで、 方法はたくさんあるのだが、私の結論は「商業レベルでやることではない」である。

待ち受ける

DDNS

最も普通の方法だが、実際にはかなり制約が多い。

SFPレコードは効かないし、DNSレコードは反映をコントロールできない1ので逆引きが効かなかったりでサーバーとしては結構痛いことになる。

リバースフォワーディング

これはかなり簡単な方法で、例えば次のようにする。

# ssh -g -R 80:localhost:80 serverhost

これによってインターネットから安定して接続できるホストに代理ホストとして公開してもらう。

不安定なホストの非稼働時は代理ホストが応答する。

フロントエンドプロキシ

リバースフォワーディングと同様に代理ホストに公開してもらうのだが、不安定なホストに通信を転送させるのではなく、中継させるという方法。

まずなんらかの方法で代理ホストと不安定なホストを接続する。 例えばVPNで接続する。

# pppd updetach noauth silent nodeflate pty "ssh root@remote-gw /usr/sbin/pppd nodetach notty noauth" ipparam vpn 10.0.8.1:10.0.8.2

あるいはSSHによる転送を行う。

$ ssh -R 8080:localhost:80

そして、代理ホスト上でリバースプロキシを動作させる。例えばSquidやNginxをプロキシとして、ローカルネットワークホストとして、あるいはローカルホストの別ポートとして転送する。

VPNで接続している場合、代理ホストからは不安定なホストは不安定なグローバルIPアドレスではなくローカルなIPアドレス10.0.8.1として認識される。

不安定なホストの非稼働時は代理ホストが応答する。

逆接続モデル

利用可能なサーバーが限定されてしまうが、サーバーからクライアントに接続するモデルがとれるのであれば、不安定なホストであることはあまり問題にならない。 あるいはサーバーリレーするタイプ(送信専用メールサーバーなど)でも機能する。

VPNで接続する

インターネット公開しているのでないのならば、代理ホストを経由するなどしてVPNで接続し、ローカルなアドレスを代わりに使うという方法が効く。

非IP

「IPアドレスが固定でない」ことはIPアドレスを用いる場合にのみ問題として発生する。 だったらIP以外で通信すれば良い。

ただし、この場合はほとんどローカルなIPアドレスで運用する方法も適用できる(VPNで接続するなど)ことになるし、 リンクローカルな通信であることがほとんどだから、これを転送するハードルを考えるとあまり易しくはない。

例えばセキュリティの都合上でIP接続を許可していないAoEサーバー、なんていうのはアリだ。

Zeroconf

リンクローカルでIPアドレスが固定でないことを考慮しなければならないケースはあまり見当たらないが、 リンクローカルなのであればZeroconfが使える。

IPアドレス制限されたホストに接続する

レンジで許可する

ステートフルに割り振られるIPアドレスのレンジが十分に制限されているのであれば範囲で許可すれば良い。

ゲートウェイ経由

固定IPアドレスを持つホストを経由して接続する。

SSHならば割と簡単にできる。

$ ssh -L 10000:destination.example.com:10000 proxyhost

VPNで代理ホストを経由しても良い。

別の方法で接続する

例えばSSHやVPNなど特定のポートだけIPアドレス制限の対象外とした上で、これらのセキュアトンネルを通じて接続する。

MySQLサーバー等、認証が強力でないサービスのためにIPアドレス制限がなされているのであれば、SSHのように認証が強力な方法についてはIPアドレス制限から除外し、これを経由することを許す、というわけである。

許可されているホストに依頼する

ゲートウェイ接続はできないまでも融通の効くホストで接続が許可されているホストがあるのであれば、これをプロキシとして接続する。

このような場合普通はアプリケーションプロキシとして使うか、SOCKSプロキシとして使うものだ。 このプロキシに対する接続に認証を求めるべきで、異なる方法で安全性を担保させるわけである。

ちなみに、以前紹介したSSHフォワーディングの場合

  1. ローカルなポートフォワーディングにより代理ホストから不安定なホストに通信を中継するようにする。 (これ自体は公開されていない)
  2. プロキシコマンドとして外部ホストから代理ホストに対して接続を行う
  3. これによって確立された経路を使って代理ホストのlocalhost(lo)に対してSSHを通す (これがダイナミックポートフォワーディングによって不安定なホストに転送される)

という方法で、計3本のトンネルが通されることになる。


  1. 「TTLに従う」と信じているなら、ちょっとハッピーすぎる。

兵庫県警、無害なジョークプログラムを紹介した人々を逮捕

どんなこと

兵庫県警は13歳の少女をはじめダイアログループの書かれたウェブサイトへのリンクを掲載した数名を逮捕した。

本質的には一行のコードである。

ちなみに次のようにも書ける。

これがそもそもどの程度の話か…というと、 正直、「ほんのいたずら」というか、もはや、「いたずら」ですらなく、「悪ふざけ」のレベルである。

実害は全くなく、昔はすごくよくあった。 で、結局そのためにアラートが出ている状態でも閉じられるようになった。

だから、対策として

  • アラートが出ているからといって閉じられなくなるわけではない
  • タブを閉じることも、ウィンドウを閉じることもできる
  • 「このサイトで再度ダイアログをを表示しない」というオプションもダイアログに併記されるので、これを使えばダイアログを表示させずページを表示しつづけることもできる

とどうとでもなることで、なにか困ることがあるわけでもない。 GoogleのMariko Kosakaさんによれば

危ないかと聞かれれば、アラートの無限ループはデバイスを壊すわけではなく、個人情報を盗むわけでも無いです。ブラウザはアラートを消す・ページから去る方法を提供していますし、安全を担保するためにsandboxという概念(子供が砂場を荒らしても砂場内だけで、外には害が及ばない)を採用しています。

警察の環境は20年前の化石?

このようにダイアログループを抑制できるようになったのはNetscape Navigator 4からで、20年前のシロモノである。

それを「閉じられなくなった」「コンピュータの利用に支障をきたした」というのなら、兵庫県警サイバー課なるところは、20年以上前の機材を使っていて、かつそれ以降の知識はまるでアップデートもされておらず、そんな人たちが取り締まっている、ということになる。

これがどれだけヤバイことかは、1999年がどんな時代だったかを知ればわかる。

  • 最新のOSはWindows 98SE
  • 携帯電話にはまだカメラがついていない
  • 携帯電話はまだパカパカ(シェルクラム型)が主流になるより前
  • 携帯電話でのメールは有料で、同じキャリアとしかやりとりできないのが普通。 それも、「カタカナで20文字まで」だったりする
  • インターネットは電話線を使って「中継局に電話をかける」アナログモデム式。速度は56kbps (今の1/1000)
  • コンピュータで動画、は技術的には存在するものの実用性に乏しいもの
  • DVDは登場したばかり。 LDは一般的(家庭にはあまりない)
  • 音楽はCDまたはMD。主流はカセットテープ
  • Skypeも登場前で「インターネット無料通話」というものはない。 そもそもインターネット接続は電話代とISP利用料金の従量制でかなり高く、インターネットで通話できるからといって「無料」という感覚は全くない

この時代の頭で「犯罪」だの「悪質」だの言っちゃうわけだ。

日本が全世界の笑いものに

これはよく使われる煽りとかではなくて、本当に 既に 笑いものになっている。

例えばJavaScriptの産みの親であるBrandan Eichさんのツイート でも、「Netscape 4でJavaScriptのループを止められるようにしたぜ」ということを言っている。

Brandan Eichさんは笑っているというよりは怒っている感じだ。 JavaScript生みの親として意見する用意があると言ったとか。

ZDNetでは「Coinhiveを埋め込んだことで人を監獄送りにしたはじめての国」と日本を紹介している。

GoogleのMariko Kosakaさんは大したことではなく、ひどい話である旨発言している。 ちなみに、同氏は

腑に落ちないので何度も言いますけど、for(;;){window.alert('lol')} が「不正指令電磁的記録に関する罪」ですよ(しかも今回は作成が問われたんじゃなくて共用が問われてる)。 誰が不正指令電磁的記録か判断してるの?書類送検受けた検察はどんな取調べするの?

「不正指令電磁的記録供用未遂」だって。sanspo.com/geino/news/201… そうだろうと思ってたけどやっぱり刑法168条の2だ「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録」っていう拡大解釈が大変懸念されるアレ。

といった発言をしている。 繰り返すが、これは Googleの中の人である

このあたりのBrandan Eichさんと、Mariko Kosakaさんの発言はIT Mediaに記事としてまとめられている

もちろん、世界中からというだけでなく、世間的にも笑いものになっている。

これに対して電凸した人もいるようだが、

日本から子供を消すのか?

「補導」というとやわらかく聞こえるかもしれないが、13歳だから補導なだけで、実質的には逮捕である。

今回の場合、実害がなく、些細な悪ふざけにすぎない。 しかも、本人がやったのではなく、やっている場所を指し示しただけだ。

これと同等のことをした人が逮捕されるのだとしたら、ピンポンダッシュをした子も、落書きをした子も、「ひじって10回言ってみて」と言った子も、みんな逮捕である。 だいたい、ノリとしても被害としてもこれらと同等であり、内容的にも近似している。

この程度の悪ふざけを逮捕すべき事柄だとするのであれば、多分日本から子供はいなくなるだろう。 こうして学習や社会から学ぶ機会を奪われた子供は社会的に生きる能力を持たないし、多くの場合この程度で投獄するのだから、子供は皆投獄されるという話になる。

前提として、法律というのは 恣意的に運用してはならない という前提がある。 もし同じ罪を犯せば その全てが必ず裁かれねばならない のだ。

もし、これと同等の事が重大なる罪であるというのであれば、そのようなことをした人は全て逮捕されるということになる。 子供のいたずらは言うに及ばず、日本でプログラマになれるのは好奇心によって色々試したことのある者ではなく(そのような者の行動は必ず逮捕される)、職業訓練によって言われたものを言われたままに書くことだけを覚えた者だけだということになる。

子供がいなくなることを含めて、確実に日本という国の終わりである。

一方、もし「同じこと、あるいは同等のことであっても全て逮捕されるわけではない」とする(恣意的な運用を行う)ならば、「都合の悪い相手、気に入らない相手、虐げたい相手を投獄する」という、今で言うと北朝鮮よりもさらに悪い国家統治を行っているということになる。 というより、私は過去をみても世界中でこれよりひどい運用を行った法治国家というものを知らない。 そして、実際はこちらであると感じている。法治国家として、 決してやってはならないこと なのにだ。

Coinhive事件から連なる邪悪な行動

そもそもこの話は直接関係ないように思われてしまうが、

  1. 「不正指令電磁的記録に関する罪」の創設
  2. Coinhiveでの逮捕

と深く絡んだ事件である。

「不正指令電磁的記録に関する罪」は「ウィルス作成罪」などと呼ばれたが、「プログラムにバグがあるだけで捕まる」「プログラムを習得しようとするとどうしたって捕まる」「プログラムについて言及するだけで捕まる」などと非難が相次いだ。

これは大喜利的悪ふざけではなく、事実全てのプログラムに関わる人と、プログラムに言及する話題が犯罪要件を構成してしまうものだった。 それに対して「慎重に運用するので言われているような懸念は的外れだ」などと返してきたのだが、そもそも「普通に社会生活を営んでいる人が必然的に犯罪要件を構成するような法律に問題がある」という指摘は無視された。

その上でのCoinhive事件であった。 この事件については以前にChienomiで触れたが、これがまさに「悪質かどうか、内容がなんであるかに関係なく当該法律を拡大解釈して逮捕した」という実例だった。

これは世間的にも受け止め方は微妙だった。 というのは、悪質な広告同様に、Coinhive自体は肯定的には考えにくいものであったこと、また他者のリソースを裏でこっそり使って小遣い稼ぎをしようという思考に抵抗があったことから、「逮捕すべきかどうか」ということと混同してしまう事態を生じたからだ。

結果的に、そのような誘導があって「不正指令電磁的記録に関する罪の拡大解釈と恣意的運用」がまかり通ってしまった。 そして、さらなる拡大解釈と恣意的運用がなされた結果、今回の事件となったわけだ。

また、実際にその恣意性でいえば、今回のケースでいえば「不正なサイトへのリンクを貼れば罪になる」という話なのだが、 私はウィルスへのリンクを貼っているメールや、詐欺サイトへのフィッシングリンクを含むメールなどはとても積極的に通報する方針でやっているのだが、 対応されたことは一度もない

「捕まえやすく、抵抗しづらい相手を逮捕する」ということをしているわけで、純粋な弱いものいじめ、そして陵辱である。

ちなみに、兵庫県警のウェブサイトはGoogleアナリティクスが埋め込まれており、これは訪問者にとっては不可視だから、まさに「利用者にとって意図しない動作をするスクリプト」なのだが、これが話題になってからこっそりと削除するという対応をした。

漉さんの発言は大変良いと思う。

sudoの注意書きこそ、今、兵庫県警をはじめとした捜査機関と、広く報道すらメディアの人に読んで理解してもらいたい。

・他者のプライバシーを尊重する

・行動する前に考える

・大いなる権限には大いなる責任が伴う

検証不可能性重視 = 「悪事を働く恣意がある」

昔から、というかそもそも法律を定めた時点から、日本の司法は密室で行われ、その検証を許さないという傾向にある。 実際、公判によって公開されているように見えても、実際は予め打ち合わせされた通りに進行しており、その打ち合わせは非公開。ただのセレモニーである。

そして、その検証や公開は罪になる。

だが、言うまでもなく、「なにをしたかということを人目に晒せば罪になる」というのは、要は「人目については困る」「暴かれては困る」わけで、最初からやましいことをする気でいるということである。

今回も逮捕の対象になったものが何であるかということを確認することが「危険であり、また犯罪になる可能性がある」と注意喚起したことで「全く問題のないものを拡大解釈によって逮捕した」という事実を隠そうとしたわけだし、実際そのように「検証を求めて提示することで逮捕される」という状況を作り出したことで、「実際に自分で踏んで確認すべきだ」と主著ぅした高木浩光さん1でさえもそのアドレスの掲載は控えた。

もちろん、その内容に害はなく、ZDNetをはじめ海外のメディアは遠慮なくそのコードやアドレスを掲載していることから、実際に警察が強権を振り回すことで人々が萎縮し、検証の目が働かない事態になっていることが明らかである。

そもそも、外部の目や意見に左右されることなく他者を害することができる力というのは明らかにバランス悪く過剰なものである。 大きな力であればこそNoと言われれば行使できないものでなければならず、日本という国はこれまでも潜在的には人を虐げうる国として成り立ってきたが、それが顕在化する傾向が非常に強まっていると言えるだろう。


  1. セキュリティ専門家。産業技術総合研究所情報セキュリティ研究センター主任研究員。